#include <Bounce2.h>;
#define SEG_COUNT 7 //количество используемых сегментов
const int firstSeg = 2; //младший номер вывода для подключения индикатора
// Таблица перекодировки символов
byte numberSegments[16] = {
0b11000000, //0
0b11111001, //1
0b10100100, //2
0b10110000, //3
0b10011001, //4
0b10010010, //5
0b10000010, //6
0b11111000, //7
0b10000000, //8
0b10010000, //9
0b10001000, //A
0b10000011, //b
0b11000110, //C
0b10100001, //d
0b10000110, //E
0b10001110, //F
};
const int BUTTON = 9;
int curButton = LOW;
int lastButton = LOW;
int countPress = 0;
// Создаем объект
Bounce debouncer = Bounce();
void setup()
{
pinMode(BUTTON, INPUT_PULLUP);
// Даем бибилотеке знать, к какому пину мы подключили кнопку
debouncer.attach(BUTTON);
debouncer.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
for (int i = 0; i < SEG_COUNT; ++i)
pinMode(i + firstSeg, OUTPUT);
}
int mask = numberSegments[countPress];
void loop()
{
boolean enableSegment;
// Даем объекту бибилотеки знать, что надо обновить состояние - мы вошли в новый цкил loop
debouncer.update();
// Получаем значение кнопки
int curButton = debouncer.read();
if (curButton == LOW && lastButton == HIGH)
{
++countPress;
if (countPress == 16)
{
countPress = 0;
}
}
lastButton = curButton;
// код символа из таблицы перекодировки
mask = numberSegments[countPress];
// для каждого сегмента определяем: должен ли он быть включён.
for (int i = 0; i < SEG_COUNT; i++)
{
enableSegment = bitRead(mask, i);
digitalWrite(i + firstSeg, enableSegment);
}
}