#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//const int button = 5; // вывод контроллера для кнопки
int count = 0; // переменная для подсчета нажатий на кнопку
int button_old = 1; // предидущее значение входа для отлавливания момента нажатия
#define dw_KEY 5
#define up_KEY 7
#define set_KEY 6
byte set,up,dw;
//-----------------------------------------------------------------------
#define addr_min 0
#define addr_sec 1
//-----------------------------------------------------------------------
byte hours = 0;
byte minute = 0;
byte second = 0;
byte S_minute = 0; // minutes
byte S_second = 0; // sec.
byte step = 0;
byte start = false;
//----------------------------------------------------------------------
ISR (TIMER1_COMPA_vect) // эта функция вызывается прерыванием по таймеру и используется для учета времени для подсчета емкости
{
start = true; // и разрешаем измерение силы тока (емкости) 1 раз в секунду
}
void setup() {
lcd.init();
lcd.backlight();
minute = EEPROM.read(addr_min);
second = EEPROM.read(addr_sec);
byte S_minute = minute; // minutes
byte S_second = second; // sec.
if (minute > 99){
minute = 0;
EEPROM.write(addr_min, minute);
}
if (second > 59){
second = 0;
EEPROM.write(addr_sec, second);
}
cli(); // запрещаем перывания
TCCR1A = 0; // устанавливаем настройки таймеря для учета времени
TCCR1B = (1<<WGM12) | (1<<CS12); // mode 4 и делитель 256
TIMSK1 |=(1<<OCIE1A); // прерывание по совпадению
TCNT1 = 0; //
OCR1A = 62499U; //
sei(); // разрешаем прерывания
pinMode(up_KEY, INPUT);
pinMode(dw_KEY, INPUT);
pinMode(set_KEY, INPUT);
}
void loop()
{ KEY();
if ((set==0)&&(button_old==1)) //нажатие кнопки set
{
step++;
// lcd.setCursor(1, 0);lcd.print(count);
}
button_old = set;
//-------------------------------------------------------------
switch (step) {
case 1 ... 2:
// encoder();
break;
case 4:
if (start)
{
start = false;
if (second > 0) second--;
else{
if( minute > 0){
minute--;
second = 59;
}
else{
step++;
// digitalWrite(Out, LOW);
}
}
}
break;
case 5:
//disp.point(POINT_OFF);
lcd.print(0x00, _E, _n, _d);
for (int i=0; i<3; i++){
//digitalWrite(Buz, HIGH);
//delay(600);
// digitalWrite(Buz, LOW);
// delay(400);
}
// disp.point(POINT_ON);
step=0;
minute = S_minute;
second = S_second;
break;
}
draw();
}
lcd.setCursor(0, 0);lcd.print(step );
}
//--------------------------------------------------------------
void KEY()
{
set = digitalRead(set_KEY);
up= digitalRead(up_KEY);
dw= digitalRead(dw_KEY);
}
//---------------------------------------------------------------.
void draw(){
TimeDisp[0] = minute / 10;
TimeDisp[1] = minute % 10;
TimeDisp[2] = second / 10;
TimeDisp[3] = second % 10;
switch (Step) {
case 0:
lcd.print(TimeDisp);
break;
case 1:
lcd.print(2, TimeDisp[2]);
lcd.print(3, TimeDisp[3]);
break;
case 2:
lcd.print(0, TimeDisp[0]);
lcd.print(1, TimeDisp[1]);
break;
case 3 ... 4:
lcd.print(TimeDisp);
break;
}
}