GSM Shield : smette di funzionare per troppi SMS?

Salve a tutti!
Ecco il mio problema: sms.flush() secondo me non funziona.

Una volta che ricevo un sms, controllo se il numero del mittente appartiene ad una lista di persone autorizzate, e se la cosa và a buon fine, comando dei relè.
Sia nel caso di autorizzazione concessa, sia negata, cancello l’sms con il comando sms.flush().

L’altra settimana Arduino ha smesso di funzionare con gli sms, ma le chiamate funzionavano (ho implementato l’apertura di un cancello con la chiamata).

Ho preso la sim, l’ho messa in un telefono e ho cancellato degli sms.
Reiserita nell’Arduino il sistema è impazzito: tutti gli sms pendenti sono stati ricevuti, eccitando i relativi Relè del modulo.

Il comando sms.flush() cancella la memoria dello shield. Ma la SIM sembra non essere toccata!
Come faccio ad eliminare gli SMS anche sulla SIM?

Ho incluso un file.h personale in cui ci sono dei parametri per il funzionamento.
Posto solo lo sketch per avere un minimo di riferimento!

#include <GSM.h>
#include "FloRoBa.h"

GSM gsmAccess;
GSMVoiceCall gsmCall;
//GSMScanner gsmNetwork;
GSM_SMS  gsmSMS;

//-----------------------------------------------------------------------------------------------------CONFIGURAZIONE----------------------------------------------------------------------
void setup()
{
  pinMode(intPinGSMCom,OUTPUT);
  digitalWrite(intPinGSMCom,HIGH);  //Led di stato a uno
  IniRelays();
  
  while(!blnGSMConnection)  
  {
    Serial.println(gsmAccess.getStatus());
    if (gsmAccess.begin("")==GSM_READY)  //gsmAccess.begin("",true,false), Inizializzazione Scheda SIM : PIN, Restart, Async
      blnGSMConnection = true;
    else
    {
      delay(1000);
    }  
  }
  
  gsmCall.hangCall();
  gsmSMS.flush(); //cancello l'sms
  
  digitalWrite(intPinGSMCom,LOW); //Set Up OK
}

//--------------------------------------------------------------------------------------------------------LOOP------------------------------------------------------------------------------------------      
void loop()
{
  lngScanTime = millis();
  
  strActionType ActionFromGSM = CheckGSMAction();
    switch (ActionFromGSM)
  {
    case NoActionFromGSM:
      break;
    case OpenSmallGate:
      SendCommand(intPinSmallGate);
      break;
    case OpenGate: 
      SendCommand(intPinGate);  
      break;
    case OpenDoor: 
      SendCommand(intPinDoor);
      break;  
    case OpenHome: 
      SendCommand(intPinDoor);
      SendCommand(intPinSmallGate);
      break; 
  }
  //gsmNetwork.getSignalStrength()); //Leggo la qualità del segnale [0-31]
}

//----------------------------------------------------------------------------------------------------------------SCANSIONE CHIAMATA/SMS----------------------------------------------------------------------------
strActionType CheckGSMAction()
{
  strActionType Result = NoActionFromGSM;
  if (lngScanTime-lngLastTimeGSM>lngNextTimeToCheckGSM)
  {
    lngLastTimeGSM = lngScanTime; 
    boolean blnNumAllowed = false;
    char InComingNumtel[20]; //Contiene il numero del telefono chiamante o il mittente dell'sms
    
    if (gsmSMS.available())
    {
      gsmSMS.remoteNumber(InComingNumtel, 20);
      blnNumAllowed = blnCheckNumer(InComingNumtel);
       if (blnNumAllowed)
       {
         boolean blnFind = false;
         char chrSMSText; 
         char chrArraySMSText[255];
         String strSMS;
         int intIndex=0;    
         
         memset(chrArraySMSText, 0, sizeof(chrArraySMSText)); //potrei trovarmi l'array sporco. Conviene pulirlo!
         
         while (chrSMSText = gsmSMS.read()) //devo compormi il messaggio, leggendo carattere per carattere
         {
           chrArraySMSText[intIndex] = chrSMSText;
          intIndex = intIndex +1; 
         } 
         
         strSMS = strlwr(chrArraySMSText); // trasfromo la stringa in minuscolo
         Serial.println(strSMS);
         if (strSMS =="cancelletto" || strSMS == "portina")
           Result = OpenSmallGate;
         else
         { 
           if (strSMS =="cancello")
           {
             Result = OpenGate;
           }
           else
           {
             if (strSMS =="porta" || strSMS == "portone")
               Result = OpenDoor;
             else
             {
               if (strSMS =="casa")
                 Result = OpenHome;             
             }  
           }  
         } 
       }
       gsmSMS.flush(); //cancello l'sms
    }
    else
    {
      switch (gsmCall.getvoiceCallStatus()) 
      {
        case IDLE_CALL: // Nothing is happening   
          break;
          
        case RECEIVINGCALL: // Yes! Someone is calling us     
            gsmCall.retrieveCallingNumber(InComingNumtel, 20);  //Recupero il numero chiamante     
            blnNumAllowed = blnCheckNumer(String(InComingNumtel));
            if (blnNumAllowed)
              Result = OpenGate;             
            gsmCall.hangCall();  //Per rispondere alla chiamamta : gsmCall.answerCall()    
          break;
          
        case TALKING:  // In this case the call would be established  
          break;
      }
    }   
  }
  
  return Result;
}


//-----------------------------------------------------------------------------------------AUTORIZZAZIONE UTENTE-----------------------------------------------------------------------------------
boolean blnCheckNumer(String chNumber)
{
    boolean blnFind = false;
    if (chNumber.startsWith("+39")) //Se il numero di telefono inizia per + devo togliere i primi 3 caratteri per eliminare il prefisso (ad esempio "+39")
      chNumber = chNumber.substring(3,chNumber.length());
      
    if (chNumber.startsWith("39")) //Se il numero di telefono inizia per 39 devo togliere i primi 2 caratteri per eliminare il prefisso (ad esempio "39")
      chNumber = chNumber.substring(2,chNumber.length()); 
    
    for (int intIndex = 0; intIndex < sizeof(strAllowedPhone)-1; intIndex++)
    {             
      if(chNumber == strAllowedPhone[intIndex])
      {
        blnFind = true;
        break;
      }        
    }
    
    return blnFind;    
}

Grazie

Ho lo stesso problema anche io ! help !!

Ho già risposto QUI
… armatevi di santa pazienza, di tanto tempo, di buona volontà e … studiatevi i comandi AT che potete dare al Quectel M10 (il chip montato su quella scheda) ed a parlarci direttamente senza l’ausilio della libreria.

Guglielmo

P.S: Come indicato di la, quello per cancellare gli SMS è AT+CMGD … trovate tutta la sintassi sul manuale.