problema alba e tramonto led pwm

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

  }

Il setup piú lungo che io abbia mai visto

C'è anche il loop se guardi bene, cmq cosa posso fare per sistemare il problema?

Quello che @aster94 sta provando a farti vedere è che la chiusura del setup include anche tutto il resto del codice. Risulta difficile credere che quello è il codice in esecuzione, in quanto sicuramente non funziona e ti dirò anche di più non compila neppure (and in c non esiste), sembra un insieme di copia incolla un po' alla rinfusa.
Se metti il codice reale che sta girando su Arduino e ti sta causando il problema che descrivi nel primo post magari otterrai risposte sensate...

Si è un mio copia e incolla per non mettere tutto il cuore dice che è più e fa altre cose, ora ho. Messo la parentesi graffa che chiudi setup

Si ma il problema permane, da errore in compilazione... non capisco perché in molti si ostinano a non mettere il codice così com'è, come se ci fosse chissà quale segreto o implementazione che fa chissà cosa da non mostrare.
Ripeto stando così le cose non è possibile aiutarti

Eccolo :

ottobre_2016.ino (15.2 KB)

Errore in compilazione linea 565 il solito and già indicato in precedenza.
Così su due piedi direi che l'RTC ti restituisce l'ora nel formatp AM/PM e dopo la mezzanotte ti si attiva l'area dell'alba prova a verificare cosa ti stampa il serial monitor a ridosso delle 00 per verificare se dai conti impostati può essere un ipotesi corretta

Si potrebbe essere, quindi dovrei aspettare 00. E poi come controllo se è cosa? Se fosse così come potrei risolvere?

marco3020:
Si potrebbe essere, quindi dovrei aspettare 00. E poi come controllo se è cosa? Se fosse così come potrei risolvere?

No, setta l'orologio come Ti fa comodo.

Ciao Uwe

E come faccio a capire se sta partendo l'alba o no alle 00.?

pensavo di fare questo per risolvere:
mettere una variabile notte può funzionare?

tipo come nello sketch

sketch_GIUGNO-2016.ino (14.7 KB)

dopo vari tentativi ho capito il motivo che è quello menzionato da fabpolli, io se metto un orario di spegnimento dopo le 18 a 00 si accende la plafoniera pensando che sia albas, ma il mio problema è: vorrei mettere l'orario che voglio visto che io ho solo tempo di godermi l'acquario dalle 18 in poi come faccio?

posto qualche info in più

modello della scheda arduino arduino 2560r3

versione dell'IDE arduino 1.65

eventuali librerie esterne usate

#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>

Buongiorno non posso cambiare l'orario a piacimento perché poi non mi ricordo e mi confondo, ho provato alla riga 352 dove definisconalbas fare un *7200 invece è di 3600 ma non cambia il risultato che posso fare? Come configuro orario 12 - 22?

Scusa ma l'ora e la data odierna nello sketch dove la imposti?

Credo che tutta la parte che sovrintende gli orari andrebbe rivista, a partire dalla famosa linea 540 che ti ho già indicato almento tre volte che non hai ancora corretto. Fatti uno sketch che fa solo il controllo degli orari in modo corretto e quando ottieni il risultato sperato allora lo riporti nel programma generale

inizio_accensione_arduino= millis();
inizio_cibo= millis();

queste due var non assumono lo stesso valore?

if (millis() >= (quanto_tempo_deve_restare_spento_skim_avvio_arduino + inizio_accensione_arduino))    {
    digitalWrite(rele3, LOW);
    }

questo messo nel loop tra 42 giorni darà un calcolo sbagliato, quando il millis() raggiungera il suo numero massimo per poi resettarsi

pablos:
Scusa ma l'ora e la data odierna nello sketch dove la imposti?

pablos:
Scusa ma l'ora e la data odierna nello sketch dove la imposti?

con il set serial del ds3231,

Si quella del cibo è una mia prova per ora, come setto fabpolli un controllo orari come dici tu mi fai un esempio di codice che possa andare bene sul. Mio così lo provo grz