#include <LiquidCrystal.h>
#include "pitches.h"
#include "TimerOne.h"
// melodia ca lista de note
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
//introducem durata pentru fiecare nota din melodie
int noteDurations[] = {4, 8, 8, 4,4,4,4,4};
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
volatile unsigned long x=0;
volatile unsigned long xA=0;
unsigned long cm = 0;
unsigned long pm = 0;
unsigned long interval = 1000;
char ora_min[7];
char ora_minA[7];
char show[10];
volatile unsigned int minute, secunde, ora, minuteA, oraA = 0, flagAlarma = 0;
#define PIN20 20
#define PIN21 21
#define PIN19 19
void display_time() {
if (ora < 10 && minute < 10) {
sprintf(ora_min, "0%d:0%d:", ora, minute);
}
else if (ora > 9 && minute > 9) {
sprintf(ora_min, "%d:%d:", ora, minute);
}
else if (ora < 10 && minute > 9) {
sprintf(ora_min, "0%d:%d:", ora, minute);
}
else if (ora > 9 && minute < 10) {
sprintf(ora_min, "%d:0%d:", ora, minute);
}
if (secunde > 9) {
sprintf(show, "%s%d", ora_min, secunde);
} else {
sprintf(show, "%s0%d", ora_min, secunde);
}
lcd.setCursor(0, 0);
lcd.print(show);
}
void display_alarm() {
if (oraA < 10 && minuteA < 10) {
sprintf(ora_minA, "0%d:0%d", oraA, minuteA);
}
else if (oraA > 9 && minuteA > 9) {
sprintf(ora_minA, "%d:%d", oraA, minuteA);
}
else if (oraA < 10 && minuteA > 9) {
sprintf(ora_minA, "0%d:%d", oraA, minuteA);
}
else if (oraA > 9 && minuteA < 10) {
sprintf(ora_minA, "%d:0%d", oraA, minuteA);
}
lcd.setCursor(0, 1);
lcd.print(ora_minA);
}
void fctH()
{
if(flagAlarma==1){
xA+=3600;
}else{
x+=3600;}
}
void fctM()
{
if(flagAlarma==1){
xA+=60;
}else{
x+=60;}
}
void fctA() {
flagAlarma = 1-flagAlarma;
}
void setup()
{
Timer1.initialize(1000000);
Timer1.attachInterrupt(fct_exec);
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(PIN19, INPUT_PULLUP);
pinMode(PIN20 , INPUT_PULLUP);
pinMode(PIN21, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(21), fctH, RISING);
attachInterrupt(digitalPinToInterrupt(20), fctM, RISING);
attachInterrupt(digitalPinToInterrupt(19), fctA, RISING);
}
void fct_exec(){
x++;
secunde = x % 60;
minute = (x / 60) % 60;
ora = (x / 3600) % 24;
minuteA = (xA / 60) % 60;
oraA = (xA / 3600) % 24;
display_time();
display_alarm();
}
void loop()
{
if(x==xA && x>59){
Serial.println("Suna");
for (int thisNote = 0; thisNote < 8; thisNote++) {
//calculam durata de afisare a notei
int noteDuration = 1000 / noteDurations[thisNote];
//apelam functia de tone pentru difuzorul atasat la pinul 8 si durata specificata
tone(6, melody[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(8);}
}
}