Ciao a tutti.... eccomi di nuovo qua dopo aver letto meta' delle pagine internet mondiali per due giorni senza purtroppo non venirne fuori.
Sto creando un sistema per gestire una serra composto da...
arduino due,
shield 16 relè
breakout shift register 74HC595
sensore umidità e temperatura DHT11
RTC3231
LCD 20X4 I2c
per quanto riguarda la parte relè, ora, temp. hum. ed LCD, grazie ai molti rosari è ok
SOLITO ODORE SOLITO COLORE viene nella parte che non mi aspettavo.
Dalla riga 29 alla riga 43, ho delle variabili che settano il valore dei PWM.
Dalla riga 47 alla riga 54 ho le variabili di accensione delle int di cui sopra.
Queste const, vengono confrontate con l'orario dell RTC (riga 413 (void timinglight()) e lo stato delle variabili delle righe 33/54.
Attraverso uno switch case si dovrebbe scrivere il valore della variabile int night (riga 45).
Abilitando serial monitor (riga 96/99) per visualizzare le variabili in base al tempo che trascorre (sunrise...day...sunset...night...)inizia correttamente nello stato night, passa allo stato sunrise all Hoursunrise 05 Minsunrise 35 ......e poi.....(PORCA PALETTA) non passa allo stato Hourday Minday........ MA PERCHEEEEEE?
Poi, continuando...entra nello stato successivo sunset alle 05.37 e non rientra piu' nello stato night alle 05.38 restando in sunset.
non ho piu' spigoli dove battere la testa. Un suggerimento sarebbe gradito
ti serve di ripensarlo a partire dalla sue specifiche
un generatore di albe e tramonti non può essere così complicato, i presepi costerebbero semplicemente troppo
comincia con lo scrivere "cosa" deve fare il tuo programma
e mi raccomando: "cosa" non "come"
Il prblema credo sia tutto localizzato nella funzione timingLight, non mi spiego perché in una funzione che determina in che stato deve essere posto il sistema in base all'orario tu faccia anche verifiche sullo stato delle luci, crea solo confusione, se dalla luce blu della notte passi alla gialla dell'alba e poi alla verde del giorno ed infine all'arancione del tramonto lo fai dal programma in base allo stato impostato che vantaggio o necessità hai di verificare il valore che tu hai impostato prima?
Comunque io ti proporrei di epurare tutta la funzione per farle fare solo lo stretto necessario, ovvero verificare l'ora per impostare lo stato, una soluzione possibile potrebbe essere questa:
Controlla se può adattarsi alle necessità del tuo progetto, se invece qualcosa mi è sfuggito dettaglia meglio lemotivazioni e le necessità.
Poi piccolo consiglio, di solito si consiglia di dare un nome alle variabili in modo che sia semplice ricondurle al loro scopo e anche utilizzare delle define o delle costanti al posto di valori fissi poco "parlanti", es:
#define NIGHT_MODE 0
modoIlluminazione = NIGHT_MODE;
...
switch(modoIlluminazione)
case NIGHT_MODE:
Ciao fabpolli, grazie per l aiuto.
Ho provato a farlo solo confrontando i tempi, io ho usato maggiore di && minore di cioè maggiore dell orario di inizio e minore dell orario della fase successiva. Non funziona ugualmente. Credo che lo switch case non aggiorni la variabile che indica la fase in cui ci si trova. Non riesco però a verificare se quello che dico è vero.... sarò in tilt, oggi magari mi ci rimetto. Grazie ancora.
Non è un problema di maggiore o maggiore e uguale è che quela funzione è infarcita di mille mila controlli a mio parere innutili, intuisco cosa vuoi ottenere, ovvero cambiare lo stato solo se è arrivata l'ora e la luminosità impostata è quella desiderata, ma IMHO è un errore grosso come una casa.
Da quel che si può inuire tu vuoi fare un effetto di fading dei vari led quando sei in una certa modalità, il loop gira così veloce che anche se sei in test e controlli dopo un minuto la luminosità sarà già arrivata al massimo o al minimo.
In ogni caso una funzione che dato un tempo deve settare una modalità operativa non deve curarsi della luminosità dei led, della temperatura, ecc. deve fare confronti sulle tempistiche punto.
In ogni caso anche il loop andrebbe rivisto, non so cosa ti ha portato a quella stesura, ma molte operazioni dono quantomeno "strane" o poco utili.
Io francamente penserei di seguire il suggerimento di Standardoil e prevederei di ripensare da zero il programma partendo per gradi e inserendo le varie funzioni aggiuntive quando quelle prima sono perfettamente funzionanti
Salvorhardin:
come si disinstallano le librerie da Arduino?
da gestione librerie non è possibile, o sbaglio?
No, dal "library manager" puoi solo installarle/aggiornarle ...
... per disinstallarle, vai nella cartella delle librerie e, semplicemente, cancelli la cartella relativa alla libreria che vuoi togliere.
Però è un buon suggerimento che potresti dare su GitHub ...
Risolto,
grazie per le vostre considerazioni sempre molto utili.
siccome piu' che un …..programmatore sono un sarto…..
leggendo ho visto che certe librerie non andavano bene su arduino due.
Ho trovato queste che mi funzionano, per il resto se mi dite come vedere quali uso dall'ide,
ve le dico
Secondo me non ci siamo
Cavalli troppo malati vanno abbattuti
se lo OP ci sta a dettagliare le sua "necessità" io, ma sono sicuro di non essere il solo, lo aiuto a ri-partire da capo
ma quel programma non si può più salvare
Voglio dire che non e' il mio lavoro la compilazione di programmi,
e' solamente un passatempo, magari costruttivo.
Purtroppo le mie basi sono quelle che sono e, a volte, trovo complicato anche spiegarmi,
sicuramente riesco meglio in altre cose.
Premesso quanto sopra, capisco che le persone non abbiano il tempo per stare a guardare i problemi degli altri piu' di tanto.
Volevo solo sapere se, a vostro parere, era un problema risolvibile semplicemente o meno,
basandomi sul fatto che le persone con esperienza a volte necessitano anche solo di un colpo d'occhio.
Se cosi' non fosse, e pare che sia cosi, non e' un problema rottamare tutto e amen.
Grazie ancora.
Guglielmo, ho cercato di trovare le librerie in uso dal gestore librerie….. ne ho almeno un paio per LCD e un paio per il DHT. Anche guardando i dettagli, apertura pagina internet della libreria…. non la trovo.
Questa sera, dopo cena, guardo ancora.
Ciao
Grazie a tutti, ho già risolto.
Ho riscritto la parte di controllo di accensione led rispetto all RTC. Però invece si usare degli else if ho usato solo if. Non so se garbato, ortodosso, fine o altro. Però funziona e può bastare. A mio avviso non conta il mezzo per arrivare, basta arrivare.
Mi riprometto di rispondere a Guglielmo per le librerie, giusto per correttezza.
LiquidCrystal built-inversione 1.0.7
RTClib by adafruit versione 1.3.3.3
ShiftRegister74HC595 by Timo Denk versione 1.2.0
SimpleDHT by Winlin versione 1.0.12
DHTsensor library for ESPx by beegee_tokyo versione 1.17.0
DHT sensor library by Adafruit versione 1.2.8
in uso credo
LiquidCrystal built-inversione 1.0.7
DHT sensor library by Adafruit versione 1.2.8
RTClib by adafruit versione 1.3.3.3