Gestire una condizione di allarme

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
 }
}