problem sketch

Buongiorno a tutti ho questo sketch:

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 rtc;

int oraAlba=8;
int minAlba=0;
long albas;
int durataAlbas=720;
int oraTramonto=16;
int minTramonto=0;
long tramontos;
int durataTramontos=720;
long nows;
int delayR=0;
int delayG=120;
int delayB=240;
int delayUV=360;
int delayW=360;

int pinR=2;
int pinG=3;
int pinB=4;
int pinW=5;
int pinUV=6;

void setup(){
Serial.begin(57600);
Wire.begin();
rtc.begin();
pinMode(pinR,OUTPUT);
pinMode(pinG,OUTPUT);
pinMode(pinB,OUTPUT);
pinMode(pinW,OUTPUT);
pinMode(pinUV,OUTPUT);
}

void loop(){

albas=oraAlba3600+minAlba60;
tramontos=oraTramonto3600+minTramonto60;
DateTime now=rtc.now();
nows=now.hour()3600+now.minute()60+now.second();
if (nows<albas||nows>tramontos+durataTramontos){
digitalWrite(pinR,LOW);
digitalWrite(pinG,LOW);
digitalWrite(pinB,LOW);
digitalWrite(pinUV,LOW);
digitalWrite(pinW,LOW);
}
if (nows>albas && nows+delayR<albas+durataAlbas){
analogWrite(pinR,255
(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayR)));
}
if (nows>albas && nows+delayG<albas+durataAlbas){
analogWrite(pinG,255
(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayG)));
}
if (nows>albas && nows+delayB<albas+durataAlbas){
analogWrite(pinB,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayB)));
}
if (nows>albas && nows+delayUV<albas+durataAlbas){
analogWrite(pinUV,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayUV)));
}
if (nows>albas && nows+delayW<albas+durataAlbas){
analogWrite(pinW,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayW)));
}

if (nows>albas+durataAlbas && nows<tramontos){
digitalWrite(pinR,HIGH);
digitalWrite(pinG,HIGH);
digitalWrite(pinB,HIGH);
digitalWrite(pinUV,HIGH);
digitalWrite(pinW,HIGH);
}
if (nows>tramontos && nows<tramontos+durataTramontos-delayR){
analogWrite(pinR,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayR))));
}
if (nows>tramontos && nows<tramontos+durataTramontos-delayG){
analogWrite(pinG,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayG))));
}
if (nows>tramontos && nows<tramontos+durataTramontos-delayB){
analogWrite(pinB,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayB))));
}
if (nows>tramontos && nows<tramontos+durataTramontos-delayUV){
analogWrite(pinUV,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayUV))));
}
if (nows>tramontos && nows<tramontos+durataTramontos-delayW){
analogWrite(pinW,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayW))));
}

}

i miei problemi sono molteplici:

1 se attacco la corrente direttamente ad arduino dopo aver caricato lo sketch, lo sketch non eseggue nulla, devo attacarlo con usb per farlo funzionare,
2: dovrebbe accendersi alle 8 e invece alle 8 inizia a lampeggiare poi si spegne e io devo staccare usb e riattaccarla per farlo andare e poi fa il iciclo giusto fino a spegnimento poi al mattino solita storia, aiutatemi a capire per favore cosa non va, rtc funziona bene da la dat corrente del pc

Visto che nel loop non usi mai la seriale (che poi è la porta USB) inizierei ad eliminare nel setup la serial.begin().

come fa la scheda arduino ad accendersi alle 8 ? c'è un temporizzatore forse ?
considera che arduino non è come un PC che lo puoi lasciare in stand-by, se vuoi che esegua il programma lo devi lasciare acceso, o lo devi collegare ad un temporizzatore che lo accende per te all'ora prefissata.

grazie di avermi risposto provo a togliere il serial begin e vediamo se migliora,
ho Rtc per farli sapere che data e ora sia

Innanzitutto utilizza i tag code per postare uno sketch.

marco3020:
Buongiorno a tutti ho questo sketch:

#include <Wire.h>

#include <RTClib.h>

RTC_DS1307 rtc;

int oraAlba=8;
int minAlba=0;
long albas;
int durataAlbas=720;
int oraTramonto=16;
int minTramonto=0;
long tramontos;
int durataTramontos=720;
long nows;
int delayR=0;
int delayG=120;
int delayB=240;
int delayUV=360;
int delayW=360;

int pinR=2;
int pinG=3;
int pinB=4;
int pinW=5;
int pinUV=6;

void setup(){
Serial.begin(57600);
Wire.begin();
rtc.begin();
pinMode(pinR,OUTPUT);
pinMode(pinG,OUTPUT);
pinMode(pinB,OUTPUT);
pinMode(pinW,OUTPUT);
pinMode(pinUV,OUTPUT);
}

void loop(){

albas=oraAlba3600+minAlba60;
tramontos=oraTramonto3600+minTramonto60;
DateTime now=rtc.now();
nows=now.hour()3600+now.minute()60+now.second();
if (nows<albas||nows>tramontos+durataTramontos){
  digitalWrite(pinR,LOW);
  digitalWrite(pinG,LOW);
  digitalWrite(pinB,LOW);
  digitalWrite(pinUV,LOW);
  digitalWrite(pinW,LOW);
}
  if (nows>albas && nows+delayR<albas+durataAlbas){
  analogWrite(pinR,255
(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayR)));
}
  if (nows>albas && nows+delayG<albas+durataAlbas){
  analogWrite(pinG,255
(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayG)));
}
  if (nows>albas && nows+delayB<albas+durataAlbas){
  analogWrite(pinB,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayB)));
}
  if (nows>albas && nows+delayUV<albas+durataAlbas){
  analogWrite(pinUV,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayUV)));
}
  if (nows>albas && nows+delayW<albas+durataAlbas){
  analogWrite(pinW,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayW)));
}

if (nows>albas+durataAlbas && nows<tramontos){
  digitalWrite(pinR,HIGH);
  digitalWrite(pinG,HIGH);
  digitalWrite(pinB,HIGH);
  digitalWrite(pinUV,HIGH);
  digitalWrite(pinW,HIGH);
}
  if (nows>tramontos && nows<tramontos+durataTramontos-delayR){
  analogWrite(pinR,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayR))));
}
  if (nows>tramontos && nows<tramontos+durataTramontos-delayG){
  analogWrite(pinG,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayG))));
}
  if (nows>tramontos && nows<tramontos+durataTramontos-delayB){
  analogWrite(pinB,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayB))));
}
  if (nows>tramontos && nows<tramontos+durataTramontos-delayUV){
  analogWrite(pinUV,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayUV))));
}
  if (nows>tramontos && nows<tramontos+durataTramontos-delayW){
  analogWrite(pinW,255*(1-(float)(((tramontos+durataTramontos)-nows)/(durataTramontos-delayW))));
}

}




i miei problemi sono molteplici:

1 se attacco la corrente direttamente ad arduino dopo aver caricato lo sketch, lo sketch non eseggue nulla, devo attacarlo con usb per farlo funzionare,

Con cosa alimenti arduino? Attacchi l'alimentatore al jack?
Si accende il led onboard "ON"?
Caratteristiche elettriche di questo alimentatore?

marco3020:
2: dovrebbe accendersi alle 8 e invece alle 8 inizia a lampeggiare poi si spegne e io devo staccare usb e riattaccarla per farlo andare e poi fa il iciclo giusto fino a spegnimento poi al mattino solita storia, aiutatemi a capire per favore cosa non va, rtc funziona bene da la dat corrente del pc

Dovrebbe essere qua l'arcano. Tu fai

 if (nows<albas||nows>tramontos+durataTramontos){
   digitalWrite(pinR,LOW);
   digitalWrite(pinG,LOW);
   digitalWrite(pinB,LOW);
   digitalWrite(pinUV,LOW);
   digitalWrite(pinW,LOW);
 }

e poi al mattino seguente vai ad agire in PWM.

Prova a fare questa modifica

 if (nows<albas||nows>tramontos+durataTramontos){
   analogWrite(pinR,0);
   analogWrite(pinG,0);
   analogWrite(pinB,0);
   analogWrite(pinUV,0);
   analogWrite(pinW,0);
 }

si allimentatore jack, ma non funziona il ciclo, va solo con seriale(usb)
il led si accende e rimane verde

OUTPUT +5 1.0 A max

Al jack devi dare un'alimentazione fra 7 e 12V, in quanto il regolatore di tensione presente richiede un minimo di 7V per poter alimentare correttamente la scheda. Cambia alimentatore.

Sempre se hai una UNO, perchè le cose cambiano con altre board arduino!

Dati reperibili nelle specifiche tecniche ufficiali di arduino:

Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V

The board can operate on an external supply of 6 to 20 volts. If supplied with less than 7V, however, the 5V pin may supply less than five volts and the board may be unstable. If using more than 12V, the voltage regulator may overheat and damage the board. The recommended range is 7 to 12 volts.

ho il mega 2560

marco3020:
ho il mega 2560

Stessa cosa: LINK

Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V

cambiato con uno da OUTPOUT 7.0 v e 600 ma questo va bene?

Buongiorno ho fatto le modifiche allo sketch , stamattina non si è acceso nulla la spia verde è su on, e se attacco anche usb non va cmq che devo fare?

Ma l' ora del RTC é giusta?

A cosa serve il float qua?
"analogWrite(pinR,255*(float)(((albas+durataAlbas)-nows)/(durataAlbas-delayR)));"

Usa un po di Serial.print per vedere i valori calcolati e l'ora.

Ciao Uwe

Un po' tirato, soprattutto in corrente.
Controlla che il positivo sia al centro del jack.

Annulla l'ultima modifica, e vedi se funziona almeno quanto funzionava prima.

L'RTC ha la batteria tampone carica?
L'ora la prende dal PC ogni volta, o gli hai già impostato con altro sketch data e ora corrente?

Perché se ad ogni riaccensione l'RTC necessita l'inserimento exnovo dell'ora, avrai comunque sempre bisogno del pc.

ho annulato ultima modifica ho caricato e ora rimane acceso vediamo se fa il cilo completo e domani si riqaccende giusto, si rtc ha la batteria a tampone nuova, si l'ora prende sempre quella corrente

Credo che parte del problema possa essere proprio questo (il fatto che non possa utilizzare un'alimentazione esterna).
Non ho mai usato un RTC, ma da quel che so è possibile impostare una volta sola data/ora, e lui con la batteria tampone la mantiene, in modo da cambiare poi lo sketch ed utilizzare il tutto senza PC, altrimenti sei legato ad avere il PC acceso e collegato, rendendo quasi inutile la presenza dell'RTC.

rtc mi da la data corrente provandolo, ora ho impostato che si spenga alle 11.00 vediamo se va

ok alle 11.10 e 20 secondi si è spento come l'ho programmato, ho provato a dirli accenditi alle 12.00 ma lui rimane acceso anche se sono le 11.15 quale può essere il problema?

A questo punto, ti conviene inserire delle stampe seriali di debug e controllare che quei calcoli float siano corretti.
Inoltre diciamo che uno sketch senza commenti non aiuta per nulla il debug fatto da terzi.

ho provato ecco cosa esce.

Ti stampa ne più ne meno la pinnatura dei led ... 8)

Sono corretti i valori che leggi?
Cioè, in base a come l'hai programmato, assumono dei valori che ti aspettavi di trovare?