Buonasera a tutti,
Vorrei implementare su una centralina antifurto una funzione che, una volta scattato l'allarme (piedino 13 a livello alto), faccia rimanere acceso un led anche quando l'evento allarme è cessato, per poi spegnerlo premendo un pulsante (reset). Questo per poter verificare se l'allarme è entrato in funzione in mia assenza o nel caso non abbia sentito il cicalino.
Ho pensato di inserire un flip flop set-reset esterno ad Arduino, ma vorrei sapere se per tale scopo sia possibile utilizzare Arduino stesso. Ho provato a scrivere il codice utilizzando la funzion "while", ma non riesco ad andare avanti.
Questo è il codice attuale, grazie a tutti:
/*
Centralina antifurto 5 ingressi
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensore_1 = 7;
int sensore_2 = 8;
int sensore_3 = 9;
int sensore_4 = A0;
int sensore_5 = A1;
int ill_disp = 10;
int uscita = 13;
void setup() {
pinMode(sensore_1, INPUT);
pinMode(sensore_2, INPUT);
pinMode(sensore_3, INPUT);
pinMode(sensore_4, INPUT);
pinMode(sensore_5, INPUT);
pinMode(ill_disp, OUTPUT);
pinMode(uscita, OUTPUT);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
}
void loop() {
int sensore_1 = digitalRead(9);
int sensore_2 = digitalRead(8);
int sensore_3 = digitalRead(7);
int sensore_4 = digitalRead(A0);
int sensore_5 = digitalRead(A1);
if (sensore_1 == HIGH && sensore_2 == HIGH && sensore_3 == HIGH && sensore_4 == HIGH && sensore_5 == HIGH) {
digitalWrite(uscita, LOW);
digitalWrite(ill_disp, LOW);
noTone(6);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Tutto bene");
lcd.setCursor(0, 1);
lcd.print("Sensori ok!");
lcd.setCursor(0, 3);
lcd.print("Zone:");
lcd.setCursor(6, 3);
lcd.print(sensore_1);
lcd.setCursor(9, 3);
lcd.print(sensore_2);
lcd.setCursor(12, 3);
lcd.print(sensore_3);
lcd.setCursor(15, 3);
lcd.print(sensore_4);
lcd.setCursor(18, 3);
lcd.print(sensore_5);
delay(1000);
}
else
{
digitalWrite(uscita, HIGH);
digitalWrite(ill_disp, HIGH);
tone(6,2000,2000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Allarme sensore!");
lcd.setCursor(3, 2);
lcd.print(sensore_1);
lcd.setCursor(6, 2);
lcd.print(sensore_2);
lcd.setCursor(9, 2);
lcd.print(sensore_3);
lcd.setCursor(12, 2);
lcd.print(sensore_4);
lcd.setCursor(15, 2);
lcd.print(sensore_5);
//mostra le zone attivate
lcd.setCursor(0, 3);
if(sensore_1==0) {
lcd.print( "Garage " );
}
else
lcd.print("");
if(sensore_2==0) {
lcd.print( "Cantina " );
}
else
lcd.print("");
if(sensore_3==0) {
lcd.print( "Terrazzo " );
}
else
lcd.print("");
if(sensore_4==0) {
lcd.print( "Mansarda " );
}
else
lcd.print("");
if(sensore_5==0) {
lcd.print( "Casa!! " );
}
else
lcd.print("");
delay(3000);
}
}