Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

DS1307

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] DS1307

Messaggioda Foto UtenteAntonio2000 » 10 dic 2021, 19:25

ciao, a tutti, stavo cercando di fare un orologio, al momento solo su monitor seriale.
il codice e' alquanto loffio non riesce ad aggiornarmi l'orario.
anche i pulsanti non funzionano bene a volte entra nel menu altre no i secondi non riesco propio a vederli.
Codice: Seleziona tutto
[*]
#include <Wire.h>
#include <RTClib.h>

#define SET       A0
#define PIU       A1
#define MENO      A2

char buffer[9];
unsigned long time=0;
unsigned long timeSet=0;
int  setModeTime=2000;

RTC_DS1307 RTC;

void setup () {

    Serial.begin(115200);
    Wire.begin();
    RTC.begin();

   if (! RTC.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
     RTC.adjust(DateTime(__DATE__, __TIME__));
  }

    pinMode( SET, INPUT );
    pinMode( PIU, INPUT );
    pinMode( MENO, INPUT );
}

void loop () {
    if ( analogRead( SET ) < 1000) { time = millis(); }
    DateTime now = RTC.now();
    char buffer[19] = "";
    sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    Serial.println(buffer);
    if (time > 0 && setModeTime < (millis() - time) ) { setMode( now ); }
    delay(1000);
}

void setMode( DateTime now ) {

    boolean setMode = true;
    int setModeLevel = 0;
    int _hour = now.hour();
    int _min = now.minute();
    int _sec = now.second();

    delay( 1000 );
    timeSet = millis();

    while ( setMode ) {
      if ( analogRead(SET) > 1000 || analogRead(PIU) > 1000 || analogRead(MENO) > 1000 ) { timeSet = millis(); }

     
      // Set Hour
      if ( setModeLevel == 0 ) {
        if ( analogRead(PIU) > 1000 && _hour < 24) { _hour++; }
        if ( analogRead(MENO) > 1000 && _hour > 1) { _hour--; }
        delay(1000);
          sprintf(buffer,  "%s: %02d", "Ora", _hour);
          Serial.println(buffer);
         
      }
      // Set Minute
      if ( setModeLevel == 1 ) {
        if ( analogRead(PIU) > 1000 && _min < 60) { _min++; }
        if ( analogRead(MENO) > 1000 && _min > 1) { _min--; }
        delay(1000);
        sprintf(buffer,  "%s: %02d", "Minuti", _min);
        Serial.println(buffer);
       
      }
      // Set Second
      if ( setModeLevel == 2 ) {
        if ( analogRead(PIU) > 1000 && _sec < 60) { _sec++; }
        if ( analogRead(MENO) > 1000 && _sec > 0) { _sec--; }
        delay(1000);
        sprintf(buffer,  "%s: %02d", "Secondi", _sec);
        Serial.println(buffer);
       
      }

      if ( analogRead(SET) > 1000 ) {  setModeLevel++;  }
      if ( setModeLevel > 2 ) { setModeLevel=0; }

      if (timeSet > 0 && (setModeTime*2) < (millis() - timeSet) ) {
         RTC.adjust(DateTime(_hour,_min,_sec));
         setMode = false;
      }
      delay(200);
   }
}
Avatar utente
Foto UtenteAntonio2000
5 2
 
Messaggi: 29
Iscritto il: 3 set 2021, 11:17

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti