Scusate ho corretto il post #5, sono a casa e posso postare il mio codice:
//includo le librerie
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
//definisco modello rtc
RTC_DS3231 RTC;
//Definisco pin lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int accensione = 19;
const int spegnimento = 2;
#define luce 9
void setup() {
delay(3000); // wait for console opening
if (! RTC.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! RTC.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (RTC.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
RTC.adjust(DateTime());
// Mese, Giorno, Anno, Ora, Minuti, Secondi
// rtc.adjust(DateTime(2014, 2, 1, 22, 59, 0));
}
// setto il numero di righe e colonne lcd:
lcd.begin(20, 4);
pinMode(luce, OUTPUT);
}
void loop() {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(2000);
unsigned long currentMillis = millis();
//elapsedTime = now();
/////////////////////// LCD info //////////////////////////////////////////////////X
//////////////////////////////////////////////////////////////////////////////////////X
lcd.clear();
lcd.setCursor(0,3);
lcd.print(now.hour());
lcd.setCursor(3,3);
lcd.print(now.minute());
lcd.setCursor(2,3);
lcd.print(':');
lcd.setCursor(10,3);
lcd.print(now.day());
lcd.setCursor(13,3);
lcd.print(now.month());
lcd.setCursor(15,3);
lcd.print('/');
lcd.setCursor(12,3);
lcd.print('/');
lcd.setCursor(16,3);
lcd.print(now.year());
}
ora immaginiamo la linea temporale:
00:00-------19:00------00:00------02:00------19:00 e torniamo a mezzanotte,
sarebbe sensato dichiarare soltanto che la luce si trova sempre in stato di on e andra a spegnersi solo nell'intervallo tra le 02:00 e le 19:00?
per intenderci così:
if (now.hour() < accensione && now.hour() >=spegnimento){
digitalWrite(luce, LOW);
}
else{
digitalWrite(luce,HIGH);
}
credo di aver risolto così:
dichiaro che la luce va in HIGH se l'ora è uguale o superiore alle 19, percio si accende fino alle 23:59 in automatico
dichiaro che la luce va in HIGH se sono le ore 0
e resta accesa fino al comando luce LOW alle ore 2 e si ripete il ciclo
if( now.hour() >= 19 ){
digitalWrite(luce, HIGH);
delay (1000);
}
if( now.hour() >= 0 ){
digitalWrite(luce, HIGH);
delay (1000);
}
if( now.hour() == 2 ){
digitalWrite(luce, LOW);
delay (1000);
}
credo che per non andare dovrebbe mancare energia dalle ore 1:59 alle ore 3:00 giusto?