Sveglia Wired 2010 di Banzi

Salve forum,
chiedo aiuto per completare questo sketch che vado a descrivere.
Ho modificato lo sketch di Banzi relativo a una sveglia bomba pubblicata su Wired 2010.
Ho tolto i pezzi di codice relativi alla combinazione dei tasti per disattivare la sveglia e l'ho modificata per utilizzare l' RTC 1307.
Sembrerebbe funzionare il tutto.
In più ho aggiunto un ulteriore variabile (a_ss) che viene incrementata alla pressione del tasto 2 e che dovrebbe permettere di avere il pin 13 alto per tutto il tempo impostato su questa variabile.
Il tutto funziona e ottengo il risultato voluto utilizzando la funzione delay().
Mi chiedevo se ci fosse qualcosa di più "elegante" da utilizzare per ottenere lo stesso risultato....

Consigli od opinioni ?

Grazie a tutti!!

// Sveglia Tutorial Wired Settembre 2010


// libreria I2C per parlare con l'RTC
#include <Wire.h>

// Codice di gestione del RTC (Real Time Clock)
#include <DS1307RTC.h>
#include <Time.h>
// include the library code:
#include <LiquidCrystal.h>

// inizializza la libreria che gestisce gli LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Diamo un nome ai piedini connessi ai pulsanti
const int btn01Pin = 10;
const int btn02Pin = 9;
const int btn03Pin = 8;
const int btn04Pin = 7;


// variabili che contengono lo stato dei pulsanti
int btn01State = HIGH;
int btn02State = HIGH;
int btn03State = HIGH;
int btn04State = HIGH;

// variabli che contengono lo stato precedente del pulsante
int btn01Prev = HIGH;
int btn02Prev = HIGH;
int btn03Prev = HIGH;
int btn04Prev = HIGH;

// flag che segnale se un certo pulsante è stato effettivamente premuto
int btn01Pressed = false;
int btn02Pressed = false;
int btn03Pressed = false;
int btn04Pressed = false;


// Definizione stati 
const int NORMAL  = 0;
const int ALARM1  = 1;
const int ALARM2  = 2;
const int ALARM3  = 3;
const int ALARM4  = 4;


// partiamo con stato NORMAL
int state = NORMAL;

// cache ore e minuti
int a_hh = 0;
int a_mm = 0;
unsigned long a_ss = 0;


// stampa un numero aggiungendo uno zero prima
// dei valori inferiori a 10

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}


// legge i 4 pulsati 
void readButtons() {
  btn01State = digitalRead(btn01Pin);
  btn02State = digitalRead(btn02Pin);
  btn03State = digitalRead(btn03Pin);
  btn04State = digitalRead(btn04Pin);

  if ((btn01State == LOW) && (btn01Prev == HIGH)) {
    btn01Pressed = true;
  }
  btn01Prev = btn01State;

  if ((btn02State == LOW) && (btn02Prev == HIGH)) {
    btn02Pressed = true;
  }
  btn02Prev = btn02State;

  if ((btn03State == LOW) && (btn03Prev == HIGH)) {
    btn03Pressed = true;
  }
  btn03Prev = btn03State;

  if ((btn04State == LOW) && (btn04Prev == HIGH)) {
    btn04Pressed = true;
  }
  btn04Prev = btn04State;

}

// Dato il numero di un pulsante imposta il flag 
// corrispondente se è premuto
int buttonPressed(int btn) {
  int result = false;

  switch(btn) {

  case 1:
    if (btn01Pressed) result = true;
    break;
  case 2:
    if (btn02Pressed) result = true;
    break;
  case 3:
    if (btn03Pressed) result = true;
    break;
  case 4:
    if (btn04Pressed) result = true;
    break; 
  } 

  btn01Pressed = false;
  btn02Pressed = false;
  btn03Pressed = false;
  btn04Pressed = false;

  return result;
}

// inizializza la scheda
void setup()
{

  // mettiamo a INPUT gli ingressi dei pulsanti
  pinMode(btn01Pin,INPUT);
  pinMode(btn02Pin,INPUT);
  pinMode(btn03Pin,INPUT);
  pinMode(btn04Pin,INPUT);

  // LED 13 usato per il debug e per il cicalino
  pinMode(13,OUTPUT);

  
// Apre comunicazione con l'RTC e lo inizializza
  Wire.begin();    
  Serial.begin(9600);  // per debugging
      
  // imposta il display 
  // il nostro display è 1 riga di 16 caratteri ma internamente
  // crede di avere 2 righe di 8 caratteri
  // dovete aggiustare il codice in base al vostro display
  lcd.begin(8, 2);
  
}

void loop()
{
  tmElements_t tm;
  // Legge l'RTC
  RTC.read(tm);
  
  // legge i pulsanti
  readButtons();

  // visualizza l'ora o l'allarme in base al pulsante 1
  // se il pulsante 01 NON è premuto visualizzo l'ora
    if (btn01State == HIGH) {
      
      // se il pulsante 3 è premuto aumento le ore
      if (btn03Pressed) {
        tm.Hour++;
        // dopo 23 torna a 0
        if (tm.Hour  > 23) tm.Hour  = 0;
        // scrivi nell'RTC l'ora impostata
        RTC.write(tm);
        // dopo aver gestito l'evento azzero il flag
        btn03Pressed = false; 
      }

      // stessa cosa per i minuti      
      if (btn04Pressed) {
        tm.Minute++;
        if (tm.Minute  > 59) tm.Minute  = 0;
        RTC.write(tm);  
        btn04Pressed = false;
      }

      // visualizza ora
      lcd.setCursor(0,0);
      Serial.print("        ");
      lcd.setCursor(0,1);
      print2digits(tm.Hour);
      Serial.print(":");
     print2digits(tm.Minute);
      Serial.print(":");
      print2digits(tm.Second);
      Serial.println();
      delay(1000);
    } 
    else {
      // pulsante 1 premuto allora aggiorniamo l'ora
      // dell'allarme

        if (btn02Pressed) {
        a_ss++;     
        if (a_ss  > 1801) a_ss  = 0;
        btn02Pressed = false; 
      }
      
      if (btn03Pressed) {
        a_hh++;
        if (a_hh  > 23) a_hh  = 0;
        btn03Pressed = false; 
      }

      if (btn04Pressed) {
        a_mm++;
        if (a_mm  > 59) a_mm  = 0;
        btn04Pressed = false;
      }
      
      //visualizza l'allarme
      lcd.setCursor(0,0);
      Serial.print("Alarm   ");
      lcd.setCursor(0,1);
      print2digits(a_hh);
      Serial.print(":");
      print2digits(a_mm);
      Serial.print(":");
      print2digits(0);
      Serial.println();
      Serial.print("Duration   ");
       print2digits(a_ss);
       Serial.println();
      delay (1000);
    }

    // banale verifica se è l'ora di far partire l'allarme
    if ((tm.Hour == a_hh) && (tm.Minute == a_mm) && (tm.Second == 0)) {
      digitalWrite(13,HIGH);
      delay(a_ss*1000);
      digitalWrite(13,LOW);
     }
}