Una curiosità di programmazione sul ciclo loop

Ciao a tutti,
durante un esperimento dovevo controllare il valore di una fotoresistenza, se questa scendeva sotto un certo valore attivavo un motore, che doveva girare fino al raggiungimento di un sensore di posizione.

Quindi ho pensato di inserire il tutto nel ciclo loop:

[…]

Void loop ()

If ( Luce < LuceMin ) {

while(analogRead(SensoreP)>SensMax){
digitalWrite(motore, HIGH);
}

digitalWrite(inhum, LOW);

}

[…]

Con questa soluzione non funziona… a volte il motore faceva piccoli scatti e basta…

Invece se esternalizzo il while:

[…]

Void loop ()

If ( Luce < LuceMin ) {

apri();

}

[…]

Void apri()
{

while(analogRead(SensoreP)>SensMax){
digitalWrite(motore, HIGH);
}

digitalWrite(inhum, LOW);

}

Funziona correttamente… sarebbe interessante capire il perché… cosa sbaglio nel mio ragionamento? :grin:

Grazie!!

Ciao an_je
A me salta nel occhio che non c'é la parentesi graffa della funzione loop().
Non so se questo é il problema.
Non so se in una funzione si puó omettere le parentesi graffe nel caso che ci sia un unica riga dopo la funzione ( analogia al if).

commento:
Non realizzerei la cosa con un while ma aggiungerei la condizione nel if:

if ( Luce < LuceMin && analogRead(SensoreP)>SensMax) 
{  digitalWrite(motore, HIGH);}
else
{  digitalWrite(motore, LOW);}

In questo modo il programma non viene bloccato nel ciclo while nel caso che il motore non raggiunge il finecorsa.

Ciao Uwe

uwefed:
Ciao an_je
A me salta nel occhio che non c'é la parentesi graffa della funzione loop().
Non so se questo é il problema.
Non so se in una funzione si puó omettere le parentesi graffe nel caso che ci sia un unica riga dopo la funzione ( analogia al if).

commento:
Non realizzerei la cosa con un while ma aggiungerei la condizione nel if:

if ( Luce < LuceMin && analogRead(SensoreP)>SensMax) 

{  digitalWrite(motore, HIGH);}
else
{  digitalWrite(motore, LOW);}



In questo modo il programma non viene bloccato nel ciclo while nel caso che il motore non raggiunge il finecorsa.

Ciao Uwe

..grazie, la graffa manca sicuramente, ho scritto il codice di "getto" non avendo l'originale su questo PC...

...con gli IF sono riuscito a gestirlo , come da te suggerito, ma sono curioso di sapere se è successo solo a me un problema con while,

ho provato anche il do... while ma sempre uguale...

forse un loop inserito in un altro loop può dare fastidio?

ho provato anche il do... while ma sempre uguale...
forse un loop inserito in un altro loop può dare fastidio?

Dovrebbe funzionare.

Forse sarebbe meglio se ci mandi il codice originale che Ti da i problemi e non una copia scritta per questa richiesta.
Ciao Uwe

uwefed:

ho provato anche il do... while ma sempre uguale...
forse un loop inserito in un altro loop può dare fastidio?

Dovrebbe funzionare.

Forse sarebbe meglio se ci mandi il codice originale che Ti da i problemi e non una copia scritta per questa richiesta.
Ciao Uwe

ok... lo riscrivo e lo posto.. tanks..