Salve è da un po che avevo i mente di creare una sveglia, solo che online si trovano sketch fatti con moduli RTC ecc... e personalmente non ho soldi da spende x ste cose, perciò sono riuscito a creare una sveglia programmabile con data o ora e ovviamente sveglia....
ecco lo sketch :
// Orologio digitale con Sveglia
// by Davide Rappa
#include <LiquidCrystal.h>
int speker=A5,fz=500;
int o=0,m=0;
int sec;
int minuto = 59;
int ora = 1;
int giorno = 5; // 0=Lun 1=Mar ecc.
LiquidCrystal LCD (5, 4, 3, 2, 1, 0);
void setup() {
LCD.begin(16, 2);
pinMode(speker, OUTPUT);
pinMode(13, INPUT);
pinMode(12, INPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
pinMode(9, INPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
}
void loop() {
for(sec=0; sec<60; sec++) {
LCD.clear() ;
if (ora<10) {LCD.print(" ");}
LCD.print(ora);
LCD.print(":");
if (minuto<10) {LCD.print("0");}
LCD.print(minuto);
LCD.print(":");
if (sec<10) {LCD.print("0");}
LCD.print(sec);
////////////////////////////////////////////// bottoni
// data e ora
int a = digitalRead(13);
int b = digitalRead(12);
int c = digitalRead(11);
int d = digitalRead(10);
// sveglia
int a1 = digitalRead(9);
int b1 = digitalRead(8);
int c1 = digitalRead(7);
int d1 = digitalRead(6);
////////////////////////////////////////// data e ora
if (a == HIGH) {
ora+=1; // ora
}if (b == HIGH){
ora-=1;
}if (c == HIGH){
minuto+=1; // minuti
}if (d == HIGH){
minuto-=1;
}if (a == HIGH && b == HIGH){ // incremento giorno
giorno+=1;
}if (c == HIGH && d == HIGH){ // decremento giorno
giorno-=1;
}
///////////////////////////////////////// sveglia
LCD.setCursor(8,0);
LCD.print("|sveglia");
LCD.setCursor(8,1);
LCD.print("|");
LCD.setCursor(10,1);
LCD.print(o);
LCD.setCursor(12,1);
LCD.print(":");
LCD.setCursor(13,1);
LCD.print(m);
if (a1 == HIGH){
LCD.setCursor(10,1);
LCD.print(o);
o+=1;
}if (b1 == HIGH){
LCD.setCursor(10,1);
LCD.print(o);
o-=1;
}if (c1 == HIGH){
LCD.setCursor(13,1);
LCD.print(m);
m+=1;
}if (d1 == HIGH){
LCD.setCursor(13,1);
LCD.print(m);
m-=1;
}
///////////////////////////////////////////// allarme
if (ora == o && minuto == m){
tone(speker,fz);
if (c1 == HIGH && d1 == HIGH){
noTone(speker);
o-=1;
}else if (a1 == HIGH && b1 == HIGH){
noTone(speker);
o-=1;
}
}
/////////////////////////////////////////////
switch (giorno) {
case 0:
LCD.setCursor(0,2);
LCD.print("Lunedi");
break;
case 1:
LCD.setCursor(0,2);
LCD.print("Martedi");
break;
case 2:
LCD.setCursor(0,2);
LCD.print("Mercoledi");
break;
case 3:
LCD.setCursor(0,2);
LCD.print("Giovedi");
break;
case 4:
LCD.setCursor(0,2);
LCD.print("Venerdi");
break;
case 5:
LCD.setCursor(0,2);
LCD.print("Sabato");
break;
case 6:
LCD.setCursor(0,2);
LCD.print("Domemica");
break;
}
delay(1000); //Provare con tempi minori per aumentare la precisione
}
minuto=minuto+1;
if(minuto>59) {minuto=0; ora=ora+1;}
if(ora>23) {ora=0; giorno=giorno+1;}
if(giorno>6) {giorno=0;}
}
fatemi sapere che ne pensate e se posso migliorare qualcosa ![]()
grazie
--- cortesemente per il codice usa i tag CODE non i tag QUOTE. Ora ho corretto io, ma ricordalo per il futuro. - gpb01