prova sketch antifurto

ciao a tutti! sto facendo un piccolo antifurto con tidigino. ora ho provato a mandare un sms quando un contatto viene aperto e tutto funziona. però finchè il contatto non viene chiuso il gsm manda sms in continuo. io devo far in modo che mandi un solo sms quando il contatto viene aperto. non so se mi sono spiegato bene. che soluzioni ho? un ciclo for? questo è un programmino di prova funzionante:

//==================DEFINE=========================

#define contatto1 7 // Il Pin di Input dove è collegato il contatto1
#define rele1 37   //il pin di output dove è collegato rele1

//==================DICHIARAZIONE VARIABILI===================

int stato_contatto1 = 0;    // Si userà Valore per conservare lo stato del Pin di Input

 
//======================SETUP===================
void setup()
{
Serial.begin(9600);   //imposta comunicazione seriale a 9600 baud

//=====================PIN OUTPUT============================

pinMode(rele1, OUTPUT); //pin relè1 come output

//===================PIN INPUT==========================

pinMode(contatto1, INPUT); // pin contatto1 come Input

}

 
//====================LOOP======================
void loop(){

stato_contatto1 = digitalRead(contatto1); // Legge il valore dell'input e lo conserva

if (stato_contatto1 == LOW) // Controlla che l'Input sia LOW (contatto violato )

{
Serial.println("contatto1 violato");
digitalWrite(rele1,HIGH);
gsm.SendSMS("num telef, "contatto1 violato");
delay(100);
}

else

{

Serial.println("contatto1 NON violato");

}
digitalWrite(rele1,LOW);

}

Grazie per l'attenzione!
Luca

edit by mod: per fare includi il codice usando gli appositi tag, grazie.

O forzi lo stato ad HIGH anche se il contatto è ancora aperto alla fine dell'invio del messaggio (funziona, ma meglio evitare), oppure dopo che mandi l'sms metti qualcosa come while(stato==LOW){} che non fa nulla attendendo che il contatto venga chiuso..