ridotto ancora e risparmiato 14byte XD
/*
Scopo: Memorizzazione ingresso e azzeramento/tacitazione
quando ingresso cambia stato, si accende il LED e suona il cicalino
se ingresso ritorna normale, il LED e cicalino sono acceso
alla pressione del tasto di azzeramento, il cicalino cessa di suonare, il
LED si spegne a meno che la causa di allarme sia ancora presente
*/
// variabili par checkInputChange
boolean inputState, lastInputState, risultato;
boolean checkInputChange (int inPin) // funzione controlla cambio stato ingresso
{
inputState = digitalRead(inPin);
if (inputState != lastInputState) {
lastInputState = inputState;
risultato = 1; }
else risultato = 0;
return risultato;
}
// costanti
//const int AlarmPin = 2; // ingresso allarme
//const int AlarmLedPin = 13; // uscita al LED
//const int AlarmBuzzerPin = 12; // uscita al Cicalino
//const int AckPin = 3; // pulsante tacitazione
// variabili
byte alarmState = 0; // attuale stato dell'ingresso
byte lastAlarmState = 0; // precedente stato dell'ingresso
byte alarm = 2;
byte ack = 0;
byte ackState = 0;
byte lastAckState = 0;
//============================================
void setup() {
pinMode(2, INPUT); // ingresso contatto allarme, normalmente Alto, Basso=Allarme
pinMode(3, INPUT); // pulsante tacitazione
pinMode(13, OUTPUT); // uscita LED
pinMode(12, OUTPUT); // uscita cicalino
}
//============================================
void loop() {
if (checkInputChange (2) && (!(alarm % 2))) {
alarm++;
if (alarm % 2) digitalWrite(13, 1); // se Alrm=dispari suona cicalino
else digitalWrite(13, 0);
}
if (alarm >= 9) alarm = 2;// riporta alarm entro la prima decina
if (checkInputChange (3) && (!(alarm % 2)))
{
alarm-- ; // se in allarme, azzera
}
}