[PROGETTO]-PROGETTO OROLOGIO DIGITALE

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 :slight_smile:
grazie

--- cortesemente per il codice usa i tag CODE non i tag QUOTE. Ora ho corretto io, ma ricordalo per il futuro. - gpb01