Problema di programmazione col ciclo IF

Salve a tutti ragazzi, questo è il mio primo messaggio e penso che non sarà l'ultimo.

Ho un problema col ciclo if. In pratica ho abbozzato un allarme laser su breadboard con un laser una fotoresistenza e un buzzer.

Quando interrompo il fascio laser il buzzer inizia a suonare ma appena rimuovo l'ostacolo tutto torna a tacere.

Mi interesserebbe che il buzzer continuasse a suonare fino a che io non resetti il sistema.

Potete aiutarmi?

Vi allego anche uno screen dello sketch che ho scritto così potete dirmi cosa ho sbagliato.

Cattura.PNG

Il codice NON si allega come immagine, ma si mette nel post (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra).

Altra cosa, usa il comando Tools -> Auto Format ... ti sistemerà le indentature del codice come si deve :slight_smile:

Grazie,

Guglielmo

fai cosi metti tone(buzzer,4000); senza il 300 dopo il 4000 e togli il noTone(buzzer); mettilo dopo scrivendo

else{
noTone(buzzer);
 }

Nel codice sei tu che fai la noTone() ... se non la metti, una volta fatta la tone(), suona sempre ...

Guglielmo

Sbagliato Kind3rin ...
... lui NON vuole che smetta di suonare mentre con il tuo else, appena il fascio non è più interrotto smette !

Guglielmo

gpb01:
Sbagliato Kind3rin ...
... lui NON vuole che smetta di suonare mentre con il tuo else, appena il fascio non è più interrotto smette !

Guglielmo

Ah ok allora basta che tu tolga il noTone ma anche il tempo perchè nel tuo codice è impostato

Perdonatemi per gli errori di formato nel post.

Per quanto riguarda lo sketch: i vari tone-noTone mi servono per simulare una "sirena di allarme" altrimenti diventa un fischio continuo.

Non c'è un modo per risolvere il problema lasciando il "pacchetto" dei tone così com'è?

Si, certo, crei all'interno del IF un loop infinito dove ripete sempre le stesse istruzioni ... se metti:

while(true) {
   ...
   ...
   ...
}

... tutto quello che c'è dentro viene ripetuto per sempre :wink:

Guglielmo

Grazie mille, ora funziona tutto come volevo.
Ultima domanda, il tasto reset sulla scheda non funziona quindi devo impostare un tasto per il reset

NelloCrescenzo:
Ultima domanda, il tasto reset sulla scheda non funziona quindi devo impostare un tasto per il reset

Come non funziona ? E' guasto ? Ti si è rotto ?

Comunque ... ti basta un pulsante che unisce il pin RESET con il pin GND :wink:

Guglielmo

non so perchè non funzioni.

Per quel tasto c'è bisogno di qualche comando o basta settarlo fisicamente?

Risolto, Ora funziona alla perfezione!

No per un secondo tasto di reset basta collegarlo tra massa e pin RESET.

Senó leggi un pulsante al interno del ciclo while(true) che ti esce con un return.

while ()
{
if (digitalRead(pin_uscita)==1) return();
}

oppure come condizione nel while:

while (digitalRead(pin_uscita)==0)
{
...
}

Ciao Uwe