Buona sera a tutti ci sto sbattendo la testa ma non capisco perchè i led si accendono quando devono e poi anche dopo le 00 incominciano ancora ad accendersi fino le 4.00 posto il mio sketch sperando che qualcuno mi faccia capire
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <PCF8574_HD44780_I2C.h>
#include <Time.h>
#include <DS3232RTC.h>
#include <RTClib.h>
#include <SPI.h>
#include <Ethernet.h>
int oraAlba = 11;
int minAlba = 10;
long albas;
int durataAlbas = 720;
int oraTramonto = 21;
int minTramonto = 10;
int ora_cibo = 11;
int durata_cibo = 300000;
int minuti_cibo = 15;
long tramontos;
int durataTramontos = 720;
long nows;
int delayR = 0;
int delayG = 120;
int delayB = 240;
int delayUV = 360;
int delayW = 360;
void setup() {
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinW, OUTPUT);
pinMode(pinUV, OUTPUT)
Serial.begin(9600);
Wire.begin();
}
void loop() {
// prendo ora attuale
DateTime now = RTC.get();
sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0,0);
lcd.print( buffer1 );
sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());
lcd.setCursor(0,1);
lcd.print( buffer2 );
Serial.println(buffer1);
Serial.println(buffer2);
// Calcolo inizio alba in secondi
albas = oraAlba * 3600 + minAlba * 60;
// Calcolo inizio tramonto in secondi
tramontos = oraTramonto * 3600 + minTramonto * 60;
// Calcolo attuale in secondi
nows = now.hour() * 3600 + now.minute() * 60 + now.second();
// Notte
if (nows < albas || nows > tramontos + durataTramontos)
{
digitalWrite(pinR, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinUV, LOW);
digitalWrite(pinW, LOW);
}
// Alba
if (nows > albas && nows + delayR < albas + durataAlbas) {
analogWrite(pinR, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayR)));
}
if (nows > albas && nows + delayG < albas + durataAlbas) {
analogWrite(pinG, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayG)));
}
if (nows > albas && nows + delayB < albas + durataAlbas) {
analogWrite(pinB, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayB)));
}
if (nows > albas && nows + delayUV < albas + durataAlbas) {
analogWrite(pinUV, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayUV)));
}
if (nows > albas && nows + delayW < albas + durataAlbas) {
analogWrite(pinW, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayW)));
}
// Giorno
if ( temp1 > alertplafo + 0.2 and + 0.6 )
{
digitalWrite(pinR, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinUV, LOW);
digitalWrite(pinW, LOW);
}
//else
//(millis() >= (inizio_cibo + durata_cibo))
// digitalWrite(rele4, LOW);
else if ((nows > albas + durataAlbas) && (nows < tramontos))
{
digitalWrite(pinR, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinUV, HIGH);
digitalWrite(pinW, HIGH);
}
else if (millis() >= (quanto_tempo_deve_restare_accesa_la_pompa + durata_cibo)) {
digitalWrite(rele4, LOW);
}
// Tramonto
if (nows > tramontos && nows + delayR < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayR)));
analogWrite(pinR, v);
}
if (nows > tramontos && nows + delayG < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayG)));
analogWrite(pinG, v);
}
if (nows > tramontos && nows + delayB < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayB)));
analogWrite(pinB, v);
}
if (nows > tramontos && nows + delayUV < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayUV)));
analogWrite(pinUV, v);
}
if (nows > tramontos && nows + delayW < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayW)));
analogWrite(pinW, v);
}
}