Salve ragazzi, Vorrei fare un semplice antifurto con due led infrarossi (Emettitore e ricevitore). Il funzionamento è semplice, appena qualcosa passa fra i due led, un led ed eventualmente un buzzer si accendono e restano fermi su quel stato, per disattivare tutto, si usa un pulsante. Il seguente sketch funziona, ma lo stato d'allarme dura solo l'istante in cui passo fra i due led. Come dovrei modificarlo?
const int tx = 2;
const int buzzer= 3;
const int rx = 1;
const int ledrosso = 4;
void setup()
{
pinMode (tx,OUTPUT);
pinMode (rx,INPUT);
pinMode (buzzer,OUTPUT);
pinMode (ledrosso,OUTPUT);
digitalWrite(tx,HIGH);
}
void loop()
{
noTone(buzzer);
digitalWrite(ledrosso,LOW);
while (analogRead(rx) >500)
{
tone(buzzer,10);
digitalWrite(ledrosso,HIGH);
}
}
Il suo mi sembra molto complesso. A me bastano le funzioni elementari: memorizzare lo stato appena passo fra i due led e successivamente tornare alla situazione iniziale tramite un pulsante. La base da cui partire è quel codice.
Innanzitutto immagino che per LED RX tu ti riferisca ad un fotodiodo o fototransistor IR.
A parte questo, devi creare una variabile di stato (Allarme) che venga modificata non appena l'analogRead restituisce tale condizione.
Nel loop, nel caso Allarme sia true, viene ignorata la lettura successiva e viene letto lo stato del pulsante che, se premuto, riporta Allarme a false..
cyberhs:
Innanzitutto immagino che per LED RX tu ti riferisca ad un fotodiodo o fototransistor IR.
A parte questo, devi creare una variabile di stato (Allarme) che venga modificata non appena l'analogRead restituisce tale condizione.
Nel loop, nel caso Allarme sia true, viene ignorata la lettura successiva e viene letto lo stato del pulsante che, se premuto, riporta Allarme a false..
Detto in parole piú povere:
Predi una variabile. La metti a 1 quando rilevi un passagio tra i LED. La metti a 0 quando viene premuto il pulsante reset.
Quando questa variablie é 1 fai saonare l'alarme e accendi il LED Alarme.