Suggerimenti per il mio progetto

Salve a tutti!

Scrivo questo thread per chiederevi dei suggerimenti in merito al mio progetto, ovvero un "orologio digitale".
Avrei in mente di aggiungere una sveglia o la data, ma purtroppo ci ho provato in molti modi, con esiti negativi. Qui di seguito lascio il codice, in modo tale che possiate quanto meno suggerirmi o darmi una mano

/*********Orologio digitale***********/
/*Progetto di dominio pubblico*/
/*Liberamente copiabile e modificabile*/
/********Written by Frarduino99********/


#include <LCD.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //impostazione indirizzo del display e pin del display LCD

int sec,mins,ora; 
char buf1[17];
int val1=0, val2=0;
int puls1=2, puls2=3; 


void setup() {
  lcd.begin(16,2); //Start the LCD I2C 16x2
  pinMode(puls1, INPUT);
  pinMode(puls2, INPUT);
}

void loop(){
lcd.clear();


for(ora=0; ora<24; ora++)
 for(mins=0; mins<60; mins++)
   for(sec=0; sec<60; sec++)
 {

 
 val1 = digitalRead(puls1);
 val2 = digitalRead(puls2);


 //Settaggio ora tramite apposito pulsante
 if(val1==1){
   lcd.clear();
   sprintf(buf1, "    %02d:%02d:%02d",ora++,mins,sec);
   lcd.print(buf1);
   lcd.setCursor(1,1);
   lcd.print("HAVE A NICE DAY"); 
   delay(100);}

  //Controllo ora
  if(ora > 23){
   ora = 0;
   lcd.clear();
   sprintf(buf1, "    %02d:%02d:%02d",0,mins,sec);
   lcd.print(buf1); 
   lcd.setCursor(1,1);
   lcd.print("HAVE A NICE DAY"); 
   delay(100);}

  
//Settaggio minuti tramite apposito pulsante
  if(val2==1){
   lcd.clear();
   sprintf(buf1, "    %02d:%02d:%02d",ora,mins++,sec);
   lcd.print(buf1);
   lcd.setCursor(1,1);
   lcd.print("HAVE A NICE DAY"); 
   delay(100);}

  //Controllo su i minuti
  if(mins > 59){
   mins = 0;
   lcd.clear();
  sprintf(buf1, "    %02d:%02d:%02d",ora++,0,sec);
  lcd.print(buf1);
  lcd.setCursor(1,1);
  lcd.print("HAVE A NICE DAY"); 
  delay(100);}

 //Mostra l'orario finale su schermo LCD
 lcd.setCursor(0, 0);
 sprintf(buf1, "    %02d:%02d:%02d",ora,mins,sec);
 lcd.print(buf1);
 lcd.setCursor(1,1);
 lcd.print("HAVE A NICE DAY");

 delay(1000); //Scorrere dei secondi
 }
 

}

I componenti utilizzati sono:

-Scheda arduino UNO
-Schermo LCD interfaccia I2C 16x2
-2 pulsanti
-2 resistenze da 10k ohm
-cavettatura varia

Frarduino99:
... lascio il codice, in modo tale che possiate quanto meno suggerirmi o darmi una mano

... ti evito subito cocenti delusioni ... DIMENTICA di fare un orologio (... degno di tale nome) utilizzando le funzioni del tempo di Arduino (delay() e millis()), ma comincia subito a prevdere un RTC esterno (... uno basato sul DS3231 che offre un'ottima precisione ad un costo irrisorio).

Purtroppo su tempi lunghi la precisione dell'oscillatore di Arduino lascia molto a desiderare e ... già dopo sole 24 ore rischi di trovarti l'orologio sballato di parecchi secondi/minuti ... figurati dopo alcuni giorni :wink:

Guglielmo

Infatti stavo pensando a comprarne uno esterno, però lei può immaginare come un neofita sia così impaziente di volersi approcciare alla programmazione di questa scheda, anche senza le componenti necessarie. Detto ciò provvederò a comprare un modulo RTC esterno (che come ho potuto notare girovagando per il web, è una soluzione molto rapida e veloce).
La ringrazio comunque per il suo interessamento. :wink:

> Frarduino99: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai già posto la stessa domanda QUI.

Fammi quindi sapere quale dei due thread tu vuoi che io cancelli dato che entrambi NON possono restare.

Attendo 24 ore e poi, in mancanza di indicazîoni, cancello questo è lascio quello in lingua inglese che è precedente a questo.

Guglielmo

P.S.: Per evitare futuri problemi ti chiedo di leggere con MOLTA attenzione il su citato REGOLAMENTO

... le 24 ore sono passate ... il thread viene chiuso e successivamente cancellato.

Se occorre prosegui quindi sul thread in lingua inglese che avevi già aperto.

Guglielmo