ciao thecernius,
sì questo è un posto dove un principiante trova l'aiuto di esperti/professionisti che si prestano, appunto, per indirizzare e correggere gli errori di chi inizia (o di chi lo fa per hobby anche da tempo...come me
).
detto questo...se accetti interruzioni nell'arco di qualche microsecondo, o millisecondo a seconda del tuo sketch, ti basta fare (pseudocodice):
setup:
oldMillis=millis(); // salvo il tempo ad avvio programma...meglio se ultima riga subito prima di entrare nel loop
loop:
se(pin==low){
oldMillis=millis(); // ogni volta che il pin va giù salvo il tempo attuale in una variabile
}
se(pin==high){
se(millis()-oldMillis>=1800000){ // se il pin non va mai giù per 30 minuti (1000*60*30)
digitalWrite(allarme,HIGH); // allora alzo l'allarme
}
}
se invece non puoi permetterti nemmeno questo piccolissimo lasco di tempo
allora devi ricorrere all'uso di un interrupt....un passo alla volta.