Invio sms con siemens TC35

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! :slight_smile: