#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Глобальные переменные для хранения времени.
int hours = 0; // Часы
int minutes = 0; // Минуты
int a =0; //Время работы сигнала
int b =0; //Переход в режим настройки.
// Время срабатывания будильника.
int alarm_hours = 0;
int alarm_minutes = 0;
// Номера портов, куда подключены кнопки, в виде
// констант.
const int BUTTON_1 = 23;
const int BUTTON_2 = 25;
const int BUTTON_3 = 27; // Кнопка смены режима
const int BUTTON_4 = 29;
// Возможные состояния системы.
const int SETTING_STATE = 0; // Часы
const int CLOCK_STATE = 1;
const int CONFIG_STATE = 2; // Настройка будильника
// Состояние системы.
int state = SETTING_STATE;
void setup() {
pinMode(2, OUTPUT);
// Настройка дисплея
lcd.init();
lcd.backlight();
// Настройка кнопочек.
pinMode(BUTTON_1, INPUT_PULLUP);
pinMode(BUTTON_2, INPUT_PULLUP);
pinMode(BUTTON_3, INPUT_PULLUP);
pinMode(BUTTON_4, INPUT_PULLUP);
pinMode(3, OUTPUT);
}
void loop() {
lcd.clear(); // Очистка экрана.
if (state == SETTING_STATE) {
// Вывод текущего времени на экран:
lcd.setCursor(0, 0);
lcd.print(hours);
lcd.setCursor(2, 0);
lcd.print(":");
lcd.print(minutes);
lcd.setCursor(0, 1);
lcd.print("CLOCK");
if ( digitalRead(BUTTON_3) == LOW ) {
state = CONFIG_STATE;
}
if ( digitalRead(BUTTON_4) == LOW ) {
b+=1;
state = CLOCK_STATE;
}
if ( digitalRead(BUTTON_1) == LOW ) {
hours = hours + 1;
if (hours == 24) {
hours = 0;
}
}
if ( digitalRead(BUTTON_2) == LOW ) {
minutes = minutes + 1;
if (minutes == 60) {
minutes = 0;
}
}
} else if (state == CONFIG_STATE) {
// Вывод текущего времени на экран:
lcd.setCursor(0, 0);
lcd.print(alarm_hours);
lcd.setCursor(2, 0);
lcd.print(":");
lcd.print(alarm_minutes);
lcd.setCursor(0, 1);
lcd.print("ALARM");
if ( digitalRead(BUTTON_3) == LOW ) {
state = SETTING_STATE;
}
if ( digitalRead(BUTTON_1) == LOW ) {
alarm_hours = alarm_hours + 1;
if (alarm_hours == 24) {
alarm_hours = 0;
}
}
if ( digitalRead(BUTTON_2) == LOW ) {
alarm_minutes = alarm_minutes + 1;
if (alarm_minutes == 60) {
alarm_minutes = 0;
}
}
} else if(state==CLOCK_STATE){
while(b==1){
if ( digitalRead(BUTTON_4) == LOW ) {
b--;
state = SETTING_STATE;
}
lcd.setCursor(0, 0);
lcd.print(hours);
lcd.setCursor(2, 0);
lcd.print(":");
lcd.print(minutes);
lcd.setCursor(0, 1);
lcd.print("CLOCK");
minutes = minutes + 1;
delay(1000);
if (hours == 24) {
hours=0;
lcd.clear();
}
if (minutes == 60) {
hours=hours+1;
lcd.clear();
minutes = 0;
}
if ( (hours == alarm_hours) && (minutes == alarm_minutes) ) {
while(a!=60){
digitalWrite(2, HIGH);
tone(3,730);
delay(500);
noTone(3);
digitalWrite(2, LOW);
delay(200);
a++;
if ( digitalRead(BUTTON_3) == LOW ) {
a=60;
noTone(3);
state = CLOCK_STATE;
}
}
noTone(3);
state = CLOCK_STATE;
}
// if ( digitalRead(BUTTON_4) == LOW ) {
// b--;
// state = SETTING_STATE;
// }
}
}
delay(100);
}