Rendere un ciclo infinito

Salve a tutti, mi sono appena iscritto a questo fantastico forum perchè ho un problema con una programma per la scuola.
In pratica devo far sì che attraverso il monitor seriale quando digito le lettere 'a' 'b' 'c' si devono rispettivamente accendere led1-led2-led3, quando digito le lettere 'd''e''f' si devono spegnere rispettivamente led1-led2-led3. Mentre pigio 'g' si devono spegnere tutti e 3 i led. Fin qui nessun problema ma l'esercizio vuole anche che se pigio 'z' i 3 led si devono accendere/spegnere in sequenza con un ritardo di 100ms. Il ciclo son riuscito a farlo ma in pratica tutto questo avviene una sola volta ma non all'infinito, in pratica i led devono andare accendersi/spegnere all'infinito fino a quando non premo g per spegnere tutti i 3 led. Ho fatto il programma ma c'è appunto questo problema spero che qualcuno mi dica come risolverlo :roll_eyes:

Arduinoscuola.ino (1.13 KB)

Non avendo l'arduino sotto mano non ho potuto testarlo, ti do l'onore di provarlo! :stuck_out_tongue:
Se ti servono delucidazioni chiedi pure! :wink:

MA

Arduinoscuola.ino (1.16 KB)

Grazie mille per la risposta tempestiva.
L'ho provato avendo arduino già montato. E si il ciclo va all'infinito ma se premo 'g' non esce dal ciclo.

Scusami sto facendo un casino! Ecco il file corretto :wink:

Arduinoscuola.ino (1.12 KB)

La ringrazio, ma il ciclo va solo una volta.

Hai ragione ho sbagliato io, prova ora

Arduinoscuola.ino (1.1 KB)

Oppure potresti provare con il ciclo while
(si sto andando a tentativi ma cerco di imparare insieme a te :wink: )

MA

Arduinoscuola.ino (1.07 KB)

Ancora non esce dal ciclo :drooling_face: La ringrazio ancora dei vari tentativi

Puoi darmi tranquillamente del tu. :wink:
Hai provato anche con il 2° sketch?

Sisi ho provato anche quello con il ciclo while

Anche se è più "sporca" questa soluzione almeno proviamola. :slight_smile:

Arduinoscuola.ino (1.3 KB)

Siiiiiiiii funziona alla grande :slight_smile: :slight_smile: :slight_smile: Grazie mille!! Non so come ringraziarti

Di niente! :wink:

MA

for (;;){
        if (Serial.available() > 0){

Anche se è più "sporca" questa soluzione almeno proviamola. smiley

Infatti non è elegante, ma almeno funziona e c'è sempre tempo per trovare una soluzione più elegante.

Il codice mostrato sopra viene eseguito con un ritardo di almeno 600ms dovuto ai 6 delay(100) che se diventassero 1000 renderebbe il codice non funzionante.

Normalmente in questi casi di usa millis() per evitare delay() che si dice essere bloccante, ma se state seguendo un corso e possibile che ancora l'insegnante non vi abbia spiegato la funzione millis() e come usarla.

Ciao.

Grazie della dritta MauroTec! :slight_smile:
E quindi il codice con millis diventerebbe? (Almeno anticipo il prof quando lo spiegherà ]:smiley: )
Ho letto su internet un po' di informazioni ma ho notato che il codice si allungherebbe di molto usando millis(). O sbaglio?

MA

Usa la funzione "ricerca avanzata", spunta India->Software per cercare nella sezione Italia->Software
ps: c'è un bug nel forum.

http://forum.arduino.cc/index.php?PHPSESSID=g0jvas5gkuci37eft5ohq2f1a6&topic=222405.msg1614481#msg1614481

Ci sono altri post che descrivono millis() e i concetti chiave.

Ciao.

Si esatto non ci hanno ancora spiegato il millis ().
Il mio docente si fa sempre più esigente =( vuole che il reset avvenga con tutte le lettere dell'alfabeto, mi spiego meglio: se premo 'z' entra nel ciclo che va all'infinito fin qui tutto ok, poi se premo una lettera ad esempio 'u' o qualsiasi altra lettera della tastiera i led si devono deve resettare mentre se premo 'a' o 'b' o 'c' il ciclo si deve fermare e accendere rispettivamente i soli led1 \ led2 \led3 :drooling_face:

Non so se così funziona...

Arduinoscuola.ino (1.45 KB)

Ti ringrazio ancora e scusami per l'attesa della risposta.
No non va in pratica quando avvio il ciclo, se premo una qualsiasi lettera non si ferma e se premo 'a' o 'b' o 'c' i 3 led finisco il ciclo e rimangono accesi tutti e 3 contemporaneamente

Posso parlare francamente? sono contrario a questo genere di aiuti, chi lo deve fare il compito... tu o gli altri utenti del forum? :roll_eyes: In questo modo non impari di certo

Poi... hai ragione, non sono certo fatti miei, per cui se a te va bene così, a me va bene il doppio :sweat_smile: