#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
};
int number = 0;
int mask;
boolean enableSegment;
int lastButton = LOW;
int curButton = LOW;
int debounce(int last){
int current = digitalRead(9);
if(last != current){
delay(5);
current = digitalRead(9);
}
return current;
}
void setup()
{
for (int i = 0; i < SEG_COUNT; ++i){
pinMode(i + firstSeg, OUTPUT);}
pinMode(9, INPUT);
}
void loop()
{
curButton = debounce(lastButton);
mask = numberSegments[number];
if(lastButton == HIGH && curButton == LOW){
// для каждого сегмента определяем: должен ли он быть включён.
for (int i = 0; i < SEG_COUNT; i++){
enableSegment = bitRead(mask, i);
digitalWrite(i + firstSeg, enableSegment);
}
if(number!=16){number++;} else {number = 0;}
}
lastButton = curButton;
delay(100);
}