Arduino IDE

Напишем программу в среде Arduino IDE. При использовании разных плат в Arduino IDE потребуется установка разных пакетов, например:

Программу напишем с использованием библиотеки RobotClass_Gauge_Arduino.

Тестовая программа запустит тест светодиодов, запросит у модуля текущую версию прошивки и будет слушать шину I2C с выводом в COM-порт данных.

#include <Wire.h>
#include <RobotClass_Gauge.h>

RobotClass_Gauge gauge;

uint16_t pos = 0;
uint8_t btn = 0;

void setup() {
    Serial.begin(9600);

    gauge.begin();

    Serial.println("ready");

    gauge.test();
    delay(3000);

    uint8_t v = gauge.getVersion();
    Serial.print("version=");
    Serial.println(v);
}

void loop() {
    gauge.getState(&pos, &btn); 
    Serial.print("count=");
    Serial.print(pos);
    Serial.print(", btn=");
    Serial.println(btn);
    delay(100);
}

Загружаем программу на отладочную плату и открываем монитор последовательного порта. Крутим рукоятку модуля и нажимаем кнопку.

ready
version=3
count=0, btn=0
count=0, btn=0
count=0, btn=0
count=1, btn=0
count=1, btn=0
count=2, btn=0
count=2, btn=0
count=2, btn=0
count=3, btn=0
count=3, btn=1
count=3, btn=1
count=3, btn=1
count=3, btn=1

Настройка индикации

Для установки режима отображения используется функция setMode. Единственный аргумент этой функции — код режима: MODE_POINT, MODE_LEVEL, MODE_FLOOD. По умолчанию, в прошивке индикатора установлен режим MODE_LEVEL, но мы попробуем установить другой.

gauge.setMode(MODE_POINT);

Функция setBrightness устанавливает яркость светодиодов. Единственный аргумент — число от 0 до 31, где 0 — полное выключение светодиодов. По умолчанию яркость равна 5, а мы сделаем в три раза ярче.

gauge.setBrightness(5);

Изменение основного цвета индикатора осуществляется вызовом функции setColor с тремя аргументами, которые отвечают за RGB компоненты цвета. Каждая компонента может принимать значение от 0 до 255. Сделаем фиолетовый цвет.

gauge.setColor(255, 0, 255);

Фильтр нижних частот для потенциометра

Если мы повернем ручку потенциометра до некоторого положения и оставим её в покое, то увидим, что значение, которое мы получаем от АЦП ведет себя нестабильно. Чтобы значение не «прыгало» можно применить программный сглаживающий фильтр (он же ФНЧ или альфа-бета фильтр).

Настроить фильтр можно с помощью функции setPotLPF. Аргумент функции — число от 1 до 15, которое отражает силу фильтра. Чем больше число, тем стабильнее сигнал, но медленнее реакция индикатора на поворот ручки.

gauge.setPotLPF(7);

Пределы энкодера

С помощью функции setEncMax можно указать сколько щелчков энкодера необходимо сделать, чтобы позиция индикатора сдвинулась на единицу. У функции есть один аргумент — число, определяющее это отношение (от 0 до 6).

Для удобства определены константы ENC_LIMIT_1, ENC_LIMIT_2 , ENC_LIMIT_4 и т.д. При ENC_LIMIT_1 место соотношение 1:1, то есть, каждый щелчок энкодера смещает позицию индикатора на единицу. При ENC_LIMIT_2 будет отношение 2:1. А при ENC_LIMIT_6 получим 64:1.

gauge.setEncMax(ENC_LIMIT_1);

Вторая полезная функция setEncLimit включает и выключает режим ограничения энкодера. Если в эту функцию передать 1, то при достижении энкодером максимального значения он перестанет увеличивать свою позицию.

gauge.setEncLimit(1);

Изменено: