Ciao a tutti! Sto cercando di realizzare una sorta di cassetta delle lettere intelligente che tramite un sensore ad infrarossi individua la lettera imbucata e che per ogni lettera inserita invia un SMS. Il progetto è banale solo che ho problemi con l'invio del messaggio SMS. Utilizzo un modem SIEMENS TC35. Premettendo ha il normale di invio di un SMS utilizzando la funzione sendTextMessage() nel seguente sketch non mi crea nessun problema.
#include <SoftwareSerial.h>
void setup()
{
Serial.begin(9600);
delay(2000);
sendTextMessage();
}
void loop() {
}
void sendTextMessage() {
Serial.println("AT");
delay(100);
Serial.println("AT+CSCA=\"+393359609600\""); // Centro Messaggi TIM
delay(100);
Serial.println("AT+CMGF=1\r");
delay(100);
Serial.println("AT+CMGS=\"+3937XXXXXXXX\"");
delay(100);
Serial.print("Hello world Hello world Hello world ");
delay(100);
Serial.println((char)26);
Ho notato che l'invio del messaggio non avviene in seguito ad un certo evento. Ho dovuto, per cercare di capire dove fosse il problema, modificare leggermente il mio progetto:
Ogni volta che una lettera viene imbucata (ossia appena il sensore rivela un ostacolo) il modulo GSM inoltra una telefonata (che ricevo regolarmente), incrementa un contatore delle lettere imbucate e quando "capisce che la cassetta è piena mi informa della situazione con un SMS. il listato è il seguente.
int pir = A0; // PIR connesso al pin A0
long value = 0; // Lettura PIR
int i = 0; // contatore lettere
boolean no_space=0;
// no_space = 0 c'è ancora posto nella cassetta ;
// no_space = 1 spazio esaurito
char phone_no[] = "+3937XXXXXXXX"; // NUMERO DI CELLULARE
void setup()
{
Serial.begin( 9600 );
pinMode( pir,INPUT );
delay(2000);
Serial.println("ready");
}
void loop()
{
while(no_space!=1){ // finchè la cassetta non è piena...
value = analogRead(pir);
if (value > 350){ // Distanza ostacolo superiore a 350
i++; // incrementa contatore lettere
// Chiamata di 20 secondi per ogni lettera imbucata
Serial.println("AT");
Serial.print("ATD");
Serial.print(phone_no);
Serial.println(";");
delay(20000);
Serial.println("ATH"); // Interrompe chiamata dopo 20s
delay (3000);
// se dopo 3 secondi il sensore rivela ancora
// un ostacolo la cassetta è piena
value = analogRead(pir);
if (value > 350){
no_space = 1; // cassetta piena
// function che tramite sms
// informa l'utente che la cassetta è piena,
// riferendo il numero di lettere ricevute.
sendTextMessage();
// Serial.println("pieno");
}
}
}
}
// function per l'invio di sms
void sendTextMessage() {
Serial.println("AT");
delay(100);
Serial.println("AT+CSCA=\"+393359609600\""); // Centro messaggi TIM
delay(100);
Serial.println("AT+CMGF=1\r");
delay(100);
Serial.println("AT+CMGS=\"+3937XXXXXXXX\"");
delay(100);
Serial.print("Cassetta piena. Hai ");
Serial.print(i); // numero lettere ricevute
Serial.println(" lettere");
delay(100);
Serial.println((char)26);
}
Bene, il messaggio non arriva MAI. Non capisco dove sbaglio, qualcuno saprebbe darmi qualche suggerimento? Grazie a tutti!