Go Down

Topic: domanda: come uscire da for e poi rientrare? (Read 2209 times) previous topic - next topic

Datman

while (pulsante non premuto)
{ciclo}

Quando premi il pulsante esce e salta alla funzione
while (pulsante premuto); // per attendere che venga lasciato
while (pulsante non premuto)
{altra operazione}

Quando premi: return
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

SukkoPera

#16
Mar 17, 2017, 05:20 pm Last Edit: Mar 17, 2017, 05:21 pm by SukkoPera
Ragazzi, questo thread è pieno di cose orripilanti e consigli fuorvianti.

Il punto chiave è che non si esce e rientra da un ciclo for a piacere. Se ti trovi a dover fare una cosa del genere, a meno di non sapere esattamente quel che stai facendo, c'è probabilmente un errore concettuale. Il ciclo for tipicamente si usa quando si deve ripetere qualcosa per un numero stabilito di volte. Può capitare di dover uscire prima, ma non dovrebbe essere una cosa troppo frequente.

Nel tuo caso bisogna ripensare tutto da capo, ricordando che il loop() e già un ciclo di per sé:
1. Usa un flag che indica se la modalità è automatica è manuale.
2. All'inizio del loop() leggi il pulsante, se è premuto cambia modalità.
3. A questo punto verifica se la modalità è automatica o manuale, e comportati di conseguenza. L'ideale sarebbe avere due funzioni, ma immagino sia precoce, non te ne preoccupare per ora.

Fine, senza né for né while ;).
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

fracchia

si lo so che è pieno di cose orripilanti, ma sono agli inizi e pian piano vorrei raggiungere il mio scopo, mi vien da ridere quando scrivono che arduino è semplice da usare, magari per uno che sa già programmare...eppure non devo fare nulla di complicato

SukkoPera

#18
Mar 17, 2017, 05:46 pm Last Edit: Mar 17, 2017, 05:46 pm by SukkoPera
Hai detto bene, Arduino è semplice per chi ha almeno un minimo di mente già orientata alla programmazione, altrimenti bisogna imparare, e le difficoltà non mancano di certo.

Comunque prova a riscrivere da capo lo sketch come ti ho suggerito, vedrai che è molto più semplice e lineare, senza salti, ingressi/uscite da cicli, ecc.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Etemenanki

... usare l'interrupt e' proprio cosi sbagliato ? ... se si, perche' ?
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

fracchia

Comunque prova a riscrivere da capo lo sketch come ti ho suggerito, vedrai che è molto più semplice e lineare, senza salti, ingressi/uscite da cicli, ecc.
[/quote]

appunto non ho proprio capito nulla di come de reimpostare (terza volta) il programma, vabbè che sbagliando si impara ma insomma............................

SukkoPera

A parte che a me non piace usare Interrupt per gestire i pulsanti (lo trovo "overkill" e complica il debouncing, se vuoi farlo in software), e che temo che il ragazzo non abbia idea di che cosa sia un Interrupt, qua il modo in cui leggere il pulsante è l'ultimo dei problemi. È la struttura del programma che è terribilmente ed inutilmente contorta.

Se noti, quel che deve mettere in piedi con i miei suggerimenti è praticamente la stessa cosa che hai postato tu, a meno dell'interrupt ovviamente, ma a quel punto anche volendo usarlo cambiano poche righe.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

brunello22

Non è sbagliato usare l'interrupt, ti eviti di dover controllare la pressione del pulsante, ma poi devi comunque controllare se hai settato un flag

Quindi alla fine cambia poco

SukkoPera

@fracchia: parti da uno sketch vuoto e metti in piedi i punti 1 e 2, se hai problemi posta qua una domanda precisa.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

fracchia

intendi una cosa così?
Code: [Select]
void loop(automatico)
{
valore_potenziometro=analogRead(pin_potenziometro);
tempo=map(valore_potenziometro, 1,1023 ,3,100);
analogWrite(b,255);
delay(tempo);
for (int i=0; i<=255; i=i+1) 
        {
        valore_potenziometro=analogRead(pin_potenziometro);
        tempo=map(valore_potenziometro, 1,1023 ,3,100);   
        analogWrite(v,i);
        delay(tempo);
        }


void loop(manuale)
{
potenzval=analogRead(pin_potenziometro2);
if (potenzval >=0 and potenzval <=341)
             {
             verde=map(potenzval,0,341,0,255);
             rosso=map(potenzval,0,341,255,0);
             analogWrite(v,verde);
             analogWrite(r,rosso);
             analogWrite(b,0);
             }
if (potenzval >341 and potenzval<=682)
             {
             verde=map(potenzval,341,682,255,0);
             blu=map(potenzval,341,682,0,255);
             analogWrite(v,verde);

SukkoPera

Non mi pare che i punti 1 e 2 dicessero di fare tutta quella roba. Sai cos'è un flag?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

... mi vien da ridere quando scrivono che arduino è semplice da usare, magari per uno che sa già programmare ...
... anche a me e, purtroppo, molto spesso la gente che viene qui ci crede veramente !

E' semplice far lampeggiare un LED, ma come ci si allontana da ciò ... o ci si metti di impegno a STUDIARE (... ed occorre dedicarci tanto tempo) o ... a forza di copia/incolla non si impara nulla e non si va da nessuna parte.

Lo dico sempre ... ma mi rispondono che "non ho capito nulla" e che "la filosofia di Arduino è quella" ... mah ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

fracchia

Non mi pare che i punti 1 e 2 dicessero di fare tutta quella roba. Sai cos'è un flag?
No non so cosa sia, avevo capito di dover fare una distinzione netta tra i due sketch che compongono il programma, maaaa eventualmente se qualcuno avesse un link con un buon libro da scaricare mi farebbe un favore..

gpb01

#28
Mar 17, 2017, 06:16 pm Last Edit: Mar 17, 2017, 06:16 pm by gpb01
... maaaa eventualmente se qualcuno avesse un link con un buon libro da scaricare mi farebbe un favore..
... puoi cominciare con leggere QUESTO proseguire con QUESTO e acquistare un buon libro (es. QUESTO) ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

SukkoPera

E allora potevi anche dirlo prima... I programmi si scrivono un passo alla volta, prima le cose di base, e poi ci si costruiscono sopra quelle più complicate. Documentati sui flag (variabili booleane) e poi ne riparliamo.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Go Up