Mille grazie di avermi risposto,
il programma che sto provando e il seguente
/*******************************
* PROVIAMO IL NOW
**********************************/
#include <Wire.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#define SET 12 //A1
#define PIU 11 //A2
#define MENO 10 //A3
void setMode();
char buffer[10];
unsigned long time = 0;
unsigned long timeSet = 0;
//int setModeTime=2000;
unsigned long setModeTime = 2000;
int _day; //Date = giorno
int _month; //mese
int _year; //anno
int DoW;
int _hour;
int _minute;
int _second;
RTClib RTC;
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin,
D7_pin);
void setup () {
Serial.begin(57600);
Wire.begin();
lcd.begin(20, 4, LCD_5x10DOTS);
lcd.home();
lcd.clear();
pinMode(SET, INPUT_PULLUP);
pinMode( PIU, INPUT_PULLUP );
pinMode( MENO, INPUT_PULLUP );
}
void loop () {
if (digitalRead(SET) == LOW) {setMode();}
DateTime now = RTC.now();
lcd.setCursor(0, 0);
lcd.print(now.day(), DEC); //giorno
lcd.setCursor(2, 0);
lcd.print('/');
lcd.setCursor(3, 0);
lcd.print(now.month(), DEC); //mese
lcd.setCursor(5, 0);
lcd.print('/');
lcd.setCursor(6, 0);
lcd.print(now.year(), DEC); //anno
lcd.setCursor(0, 1);
lcd.print(now.hour(), DEC);
lcd.setCursor(2, 1);
lcd.print(':');
lcd.setCursor(3, 0);
lcd.print(now.minute(), DEC);
// Serial.print(':');
// Serial.print(now.second(), DEC);
// Serial.println();
//
// Serial.print(" since midnight 1/1/1970 = ");
// Serial.print(now.unixtime());
// Serial.print("s = ");
// Serial.print(now.unixtime() / 86400L);
// Serial.println("d");
delay(1000);
}
/*************************************************/
void setMode() {
boolean setMode = true;
int setModeLevel = 0;
lcd.clear();
lcd.setCursor(0, 0);
sprintf(buffer, "%s: %02d", "Giorno", _day);
delay( 1000 );
timeSet = millis();
while (setMode) {
if ( digitalRead(SET) == LOW ) {lcd.clear(); setModeLevel++;}
if ( setModeLevel > 5){setModeLevel = 0;}
lcd.setCursor(0, 0);
if ( digitalRead(SET) == LOW || digitalRead(PIU) == LOW || digitalRead(MENO) == LOW ) {timeSet = millis();}
lcd.setCursor(0, 0);
// Set giorno
if ( setModeLevel == 0 ) {
if ( digitalRead(PIU) == LOW && _day < 31) {_day++;}
if ( digitalRead(MENO) == LOW && _day > 1) {_day--;}
sprintf(buffer, "%s:%02d", "Giorno", _day);
}
// Set mese
if ( setModeLevel == 1 ) {
if ( digitalRead(PIU) == LOW && _month < 12) {_month++;}
if ( digitalRead(MENO) == LOW && _month > 1) {_month--;}
sprintf(buffer, "%s:%02d", "Mese", _month);
}
// Set anno
if ( setModeLevel == 2 ) {
if ( digitalRead(PIU) == LOW && _year < 9999) {_year++;}
if ( digitalRead(MENO) == LOW && _year > 1900) {_year--;}
sprintf(buffer, "%s:%02d", "Anno", _year);
}
// Set ore
if ( setModeLevel == 3 ) {
if ( digitalRead(PIU) == LOW && _hour < 24) {_hour++;}
if ( digitalRead(MENO) == LOW && _hour > 1) {_hour--;}
sprintf(buffer, "%s:%02d", "Ora", _hour);
}
// Set minuti
if ( setModeLevel == 4 ) {
if ( digitalRead(PIU) == LOW && _minute < 60) {_minute++;}
if ( digitalRead(MENO) == LOW && _minute > 1) {_minute--;}
sprintf(buffer, "%s:%02d", "Minuti", _minute);
}
// Set secondi
if ( setModeLevel == 5 ) {
if ( digitalRead(PIU) == LOW && _second < 60) {_second++;}
if ( digitalRead(MENO) == LOW && _second > 0) {_second--;}
sprintf(buffer, "%s:%02d", "Secondi", _second);
}
lcd.setCursor(0, 2);
lcd.print( (buffer) );
if (timeSet > 0 && (setModeTime * 2) < (millis() - timeSet) ) {
DateTime now = RTC.now();
_day = now.day();
_month = now.month();
_year = now.year();
_hour = now.hour();
_minute = now.minute();
_second = now.second();
setMode = false;
lcd.clear();
}
delay(100);
}//while
}
Flavi71
interessante il codice, anche se non usa la libreria lo provo poi so dirti,
però io volevo usare la libreria che mi da la possibilità di settare dei allarmi