Spiega bene perché dire "ho bisogno di fare un loop in questo codice" ha la stessa utilità di dire "ho bisogni di andare al bagno" ...
... quindi descrivi esattamente cosa intendi, quali sono le fasi del programma e quali le sequenze temporali.
... inoltre, SE (e solo SE) durante quelle istruzioni che hai scritto, hai anche la necessità di fare altre cose, ovvero, NON puoi permetterti di stare fermo per il tempo delle delay() che hai messo, ma in quel tempo devi fare altro, allora NON puoi usare la delay() e devi ristrutturare il tutto.
Ti rammento che l'istruzione delay() ferma il flusso del programma per il tempo indicato. SE c'è invece la necessità di NON fermare il programma, occorre usare la millis().
Per imparare ad usare la millis() devi studiare prima QUI, poi QUI ed infine leggere anche QUI e QUI.
in pratica c è un led collegato e quando arriva il comando "X" deve lampeggiare, in questo caso lampeggia solo una volta, ma io ho bisogno che lampeggi in continuazione, anche all infinito, finche non arriva il comando "y" a stoppare, ma siccome nel frattempo ad arduino invio altre informazioni non si deve bloccare per eseguire il loop
il programma è lo stesso di clash230, stiamo lavorando insieme ecco perche, nel caso vogliate vederlo andate su un suo topic, avrebbe scritto lui il post ma ha dimenticato la password:stuck_out_tongue_closed_eyes:
in questo caso conviene usare un sistema a stati e millis
Inizia facendo lampeggiare il LED come nel famoso blink without delay, poi piano piano introduci il resto, è meglio andare per gradi.
Crea una variabile in cui memorizzi uno stato, true se devi farlo lampeggiare, false se lo devi lasciare sempre spento.
Ad ogni loop, verifica se giunge il comando via seriale per portare la variabile di stato a true o a false.
Ad ogni loop, se questa variabile di stato è true, verifica se sono trascorsi i millisecondi del tempo di on-off del led, se sono trascorsi, inverti l'alimentazione del LED acceso-spento.
Ricordati di mettere comunque OFF il led quando porti a false la variabile di stato, altrimenti potrebbe rimanere acceso.
Appena questo sistema ti funziona, potrai passare ad inserire altre cose.
Sempre senza mai usare il delay e demandando i compiti a funzioni specifiche.
paulus1969:
in questo caso conviene usare un sistema a stati e millis
[... omissis ...]
era quanto era stato già spiegato a clash230 in passato a qualcuno qui sul forum... in giro, in qualche thread, ci deve essere già fatto il codice proprio come tu lo hai indicato ... visto che avevamo adottato esattamente quanto da te suggerito
Ti do un esempio (... gia presente in altro thread) di come far lampeggiare o meno un LED tramite una flag di stato (lampeggia/non lampeggia) senza mai fermare il loop().
Naturalmente aumentando il numero di flag di stato e funzioni attivate .. lo si espande a diverse temporizzazioni
Prendi spunto da questo, studiatelo e adattalo a quello che devi fare tu ...
anche se dopo tutto questo tempo, ho provato il programma, ma non va, rimane bloccato, o meglio, lampeggia quando richiesto, ma non segue gli altri comandi.
ecco cosa potrebbe essere, in pratica nel tuo programma il lampeggio era descritto in una funzione, io l ho tolta, ma ho dimenticato di togliere questo dettaglio, vedo se è questo il problema, per il resto tutto ok?
... il mio metodo è molto flessibile perché solo usando delle semplici flag e delle funzioni puoi gestire molte cose asincrone in modo estremamente semplice e LEGGIBILE.
Il tuo metodo di mettere tutto nel loop() funziona, ma la leggibilità e la semplicità in caso di una modifica ... vanno a farsi benedire
Se hai varie cose, il sistema migliore è rendere il tutto modulare, NON monolitico
Scusami. I led sono led normali, quelli che ho trovato nello starter kit. Collegati senza resistenze. Ma con il codice BLINK dell IDE di arduino arriva correttamente corrente al led. Solo con quello sketch non va.
I pin te li ho scritti. Lo schema elettrico non so fartelo
Ecco ... MAI E POI MAI collegarli così ... è il sistema migliore per danneggiare/bruciare Arduino !
Ti rammento che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.
Quindi ... mettici in serie una resistenza da 220Ω, o giù di li, su ciascun LED che colleghi !