Arduino IDE
Напишем программу в среде Arduino IDE. При использовании разных плат в Arduino IDE потребуется установка разных пакетов, например:
- для Графит-32S, Графит-S2, Графит-S3 и прочих ESP32 — пакет ESP32 (для Графит-S2 подойдет пакет ESP32 от RobotClass)
- для Графит-RP2040 или Raspberry Pico — пакет Arduino Mbed OS RP2040 Boards.
Программу напишем с использованием библиотеки 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);