/*
Проверка индикаторов для часов
*/
//-------------------------------
#define ON_TIME 3 // время включенности одной цифры, мс
#define OFF_TIME 17 // время выключенности одной цифры, мс
#define N_CYCL 25 // количество циклов демонстрации цифры
#define N_NIX 7 // количество индикаторов
#define N_DIGITS 10 // количество цифр на индикаторе
// пины
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
#define KEY0 4 // точка
#define KEY1 10 // часы
#define KEY2 9 // часы
#define KEY3 5 // минуты
#define KEY4 6 // минуты
#define KEY5 7 // секунды
#define KEY6 8 // секунды
int opts[] = {KEY0, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6};
byte shDigit; // номер текущей отображаемой цифры
byte counter;
//------------------------------
void setup() {
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(KEY1, OUTPUT);
pinMode(KEY2, OUTPUT);
pinMode(KEY3, OUTPUT);
pinMode(KEY4, OUTPUT);
pinMode(KEY5, OUTPUT);
pinMode(KEY6, OUTPUT);
}
void loop() {
for( shDigit = 0; shDigit < N_DIGITS; shDigit++) {
showDigits();
}
}
void showDigits() {
setDigit(shDigit);
for( counter = 0; counter < N_NIX; counter++) {
for( int myTimer = 0; myTimer < N_CYCL; myTimer++) {
digitalWrite(opts[counter], 1);
delay(ON_TIME);
digitalWrite(opts[counter], 0);
delay(OFF_TIME);
}
}
}
// настраиваем декодер согласно отображаемой ЦИФРЕ
void setDigit(byte digit) {
switch (digit) {
case 0: setDecoder(0, 0, 0, 0);
break;
case 1: setDecoder(1, 0, 0, 0);
break;
case 2: setDecoder(0, 0, 1, 0);
break;
case 3: setDecoder(1, 0, 1, 0);
break;
case 4: setDecoder(0, 0, 0, 1);
break;
case 5: setDecoder(1, 0, 0, 1);
break;
case 6: setDecoder(0, 0, 1, 1);
break;
case 7: setDecoder(1, 0, 1, 1);
break;
case 8: setDecoder(0, 1, 0, 0);
break;
case 9: setDecoder(1, 1, 0, 0);
break;
case 10: setDecoder(0, 1, 1, 1); // выключить цифру!
break;
}
}
// функция настройки декодера
void setDecoder(boolean dec0, boolean dec1, boolean dec2, boolean dec3) {
digitalWrite(DECODER0, dec0);
digitalWrite(DECODER1, dec1);
digitalWrite(DECODER2, dec2);
digitalWrite(DECODER3, dec3);
}