// "минимальный" код для работы часов, можете начать с него разработку своей прошивки
// проверочный код для индикаторов, выводит 0-9 по очереди на каждую лампу
#define DELAY 500000 // задержка между сменой цифр, мс
#define DUTY 200 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
//#define BACKL 11 // подсветка
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// pinMode(BACKL, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
// включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
setPWM(6, DUTY);
// setPWM(BACKL, 1); // шим на светодиоды подсветки
/*
// перенастраиваем частоту ШИМ на пинах 3 и 11 на 7.8 кГц и разрешаем прерывания по совпадению
TCCR2B = (TCCR2B & B11111000) | 2; // делитель 8
TCCR2A |= (1 << WGM21); // включить CTC режим для COMPA
TIMSK2 |= (1 << OCIE2A); // включить прерывания по совпадению COMPA
*/
}
void loop() {
while (true) {
for (int i = 0; i < 10; i++) {
setPin(opts[0], 1); // тупо перебираем числа от 0 до 1
setDig(i);
delay(DELAY);
}
}
}