DS1307
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.
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);
}
}