neofita - info su multiprocesso

Ciao a tutti,

sono ai primi passi con Arduino grazie ad uno Starter Kit. Vorrei fare una gestione delle piante della casa formato sia da controllo umidità terreno sia della luce artificiale. (ho visto che è già stato trattato)

ho visto molti sensori di umidità per terreno i quali forniscono una tensione proporzionale al livello di umidità del terreno, quindi userei un ingresso analogico, dove dovrei verificare un valore e di conseguenza pilotare un relè in uscita.

La luce artificiale va data in modo alternato 12 ore di luce e di buio e userei un delay() ma da quello che ho capito Arduino esegue il programma in modo sequenziale quindi se sta in delay() per 12 ore la funzione di monitoraggio dell'ingresso analogico non funzionerebbe poiché non è multi processo.

ho capito bene? se si come potrei risolvere?

Grazie a tutti

Prima di tutto, essendo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO

… poi, NON devi usare la delay(), ma devi studiarti come si usa la millis() prima QUI, poi QUI ed infine leggi anche QUI … vedrai che ti sarà tutto più chiaro :wink:

Guglielmo

Per brevissimi intervalli di tempo puoi usare delay(), per tempi un po' più lunghi che non blocchino il processo usi il millis(), ma nel tuo caso dato che va a lavorare sugli orari perchè non usare un orologio RTC?

ciao

Ciao e benvenuto,

intanto passa nell'apposita sezione e fai la presentazione di rito, poi magari dai anche una letta al regolamento del forum :D :D

Per quanto riguarda il tuo problema è sufficiente usare millis() al posto di delay().

Dai una occhiata a questo link http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

Attilio

Edit: @gpb01 & pablos scusate ma ho praticamente replicato le vostre risposte :-[

... e che facciamo ? :o Rispondiamo tutti assieme le stesse cose ? :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

E si che il sistema vi avverte che qualcuno ha già risposto mentre voi scrivete ... ... almeno una letta dategliela :smiling_imp: :smiling_imp: :smiling_imp:

Guglielmo

io ho aggiunto l'opzione RTC voi no .... ahahahhaha :grin:

pablos: io ho aggiunto l'opzione RTC voi no .... ahahahhaha :grin:

Ahahahahahahah .... :D :D :D :D

Guglielmo

Voce di popolo, voce di Dio :grin: :grin: :grin: :grin:

O come dicevano i latini: repetita iuvant

Attilio

Pur essendo "novizio", appoggio l'idea rtc, anche se per un neofita è forse "presto".

beh che dire, intanto grazie a tutti per l'aiuto !!!

mi sono presentato e ho letto millis() ho trovato molto utile l'articolo di Leonardo Miliani in particolare:

void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; //save the last time you blinked the LED //if the LED is off turn it on and vice-versa: ledState ^= 1; digitalWrite(ledPin, ledState); } }

infatti farebbe già al caso mio, non solo potrei mettere un paio di interval diversi dove quello più lungo delle 12 ore accende e spegne la luce e uno più corto fa muovere un servo per cambiare orientamento alla lampada.

la cosa che mi piace di Arduino è che con pochi soldi si posso fare cose carine, ad esempio con un display potrei stampare " sto irrigando " altrimenti " Umidità ok " o altro ancora :-)