AT+CMSS ERROR: Operation not allowed

Salut le forum,

Tout est dans le titre, je n’arrive pas à envoyer un SMS stocké en mémoire…
Je peux le lui mettre avec AT+CMGW
Je peux le voir avec AT+CMGL
Je peux l’effacer avec AT+CMGD
Mais il peux pas être envoyé par AT+CMSS, par contre il peux être envoyé par AT+CMGS

Merci pour votre aide

void GSM_Power_ON(){
   
    Serial2.begin(19200);
    
    uint8_t answer=0;
    //DEBUGG_PRINT("F(Power ON GSM)");
    // Cette commande vérifie si le module GSM est en marche.
    strncpy_P(ATCmd,PSTR("AT\0"),nATCmd);
    answer = sendATcommand( 2000);
    if (answer != ROK){
         // Mise en marche du module GSM
        digitalWrite(PIN_GSMON,HIGH);
        delay(3000);
        digitalWrite(PIN_GSMON,LOW);
        //*/
        // Envoie d'une commande AT toutes les deux secondes et attente d'une réponse.
        while((answer != ROK)&&(!digitalRead(PIN_INTER))){answer = sendATcommand( 2000);}
        delay(100); 
        DEBUGG_PRINT(F("\nPower ON GSM..."));DEBUGG_PRINTln(F("-------------------------------"));
        ;}
    Serial2.println(F("ATE0"));delay(100);AntiOverflow();//Fonction Echo off
    //Serial2.println("AT+CMEE=2\r");delay(100);AntiOverflow();
    //Serial2.println("AT&W\r");delay(100);AntiOverflow();
    if (!digitalRead(PIN_INTER)){Relais(10,LOW);}
    
}

void GSM_Ini(){
  
  byte Tentative=0;
  byte R;
  //Defini le mode de stockage des SMS
  //strncpy_P(ATCmd,PSTR("AT+CNMI=2,2,0,0\0"),nATCmd);//Direct sur le port serie
  strncpy_P(ATCmd,PSTR("AT+CNMI=1,1,0,0\0"),nATCmd);//Stocké en mémoire
  sendATcommand( 1000); 
  strncpy_P(ATCmd,PSTR("AT+CMGD\0"),nATCmd);//Stocké en mémoire
  sendATcommand( 1000); 
  
  
  DEBUGG_PRINTln(F("\nConnexion au reseau en cours .."));
  DEBUGG_PRINTln(F("---------------------------------"));
  strncpy_P(ATCmd,PSTR("AT+CREG?\0"),nATCmd);
  do{strncpy_P(ATAsw,PSTR("+CREG: 0,\0"),nATAsw);
     if (sendATcommand (500)==R1){R =atoi(ATAsw);//}
     /*Serial.print(F("\nStlen ATasw"));Serial.println(strlen(ATAsw));
     Serial.print(F("\nATasw"));Serial.println(ATAsw);
     Serial.print(F("\nATOI"));Serial.println(R);*/}
     delay(500); Tentative++;}
  while((R==0)&&(Tentative < 10)&&(!digitalRead(PIN_INTER)));
    
          
  DEBUGG_PRINTln(F("\nMode SMS en cours d'activation .."));
  DEBUGG_PRINTln(F("-----------------------------------"));
  //Efface tampon2
  strncpy_P(ATAsw2,PSTR("\0"),nATAsw2);
  //Demande quel est l'emplacement memoire utilisé
  strncpy_P(ATCmd,PSTR("AT+CPMS=\"SM\"\0"),nATCmd);
  //strncpy_P(ATAsw,PSTR("+CPMS: "),nATAsw);
  sendATcommand (500);  
 
  // Activation du mode texte pour les SMS.
  strncpy_P(ATCmd,PSTR("AT+CMGF=1\0"),nATCmd);//Text Mode
  sendATcommand (1000);//, "OK", 1000);
  delay(1000);
  strncpy_P(ATCmd,PSTR("AT\0"),nATCmd);
  strncpy_P(ATAsw,PSTR("\0"),nATAsw);
  //AntiOverflow();
  if (sendATcommand(1000)){
     lcd.clear();lcd.setCursor(0,1);lcd.print(F("SMS OK"));delay(1200);
     Serial.println(F("\nSMS OK"));DEBUGG_PRINTln(F("-------------------------------"));
     strncpy_P(Msg,PSTR("Allo la LUNE? Ici la SERRE!\0"),nMsg); if (SMS_S(false)){GrattageFiltre(true,500);};}
  else{lcd.clear();lcd.setCursor(0,1);lcd.print(F("!SMS"));delay(1200);}
  //strncpy_P(ATCmd,PSTR("AT+CMGF\0"),nATCmd);
  strncpy_P(ATAsw,PSTR("\0"),nATAsw);
  //strncpy_P(ATAsw2,PSTR("\0"),nATAsw2);
  
  
  
} 

bool SMS_S(boolean Direct){
  
  byte AdressSMS=0;
  //strncpy_P(ATCmd,PSTR("AT+CNMI=2,2,0,0\0"),nATCmd);//Direct sur le port serie
  //sendATcommand( 1000);delay(1000);
  
  //const char OK PROGMEM = "OK";
  
  // Txt = "Mme RIVAIRAN avez été flashée 8 km/h au dessus de la vitesse légale. Veuillez apuyer sur enregistrer pour vous aquiter de L_Choix'amande" 
  // Le 12/02/2016: Ecrit le soir à22h, le lendemain 11h elle est flaschée 9 km/h au dessus de la vitesse!!! Et mon pot Nico 2h avant sur le m^me radar...
  //DEBUGG_PRINT("Début fct SMS");
  int8_t answer;
  //int onModulePin= 4; // Il s'agit du port DTR (ou PWR) du module SIM900.
  //char aux_string[34];
  AntiOverflow();
  DEBUGG_PRINTln(F("\n<<[SMS]"));DEBUGG_PRINTln(F("\n-------------"));DEBUGG_PRINT(Msg);DEBUGG_PRINTln(F("\n-------------"));
  
  if (Direct) {// pour la classe 0 message alerte
    strncpy_P(ATCmd,PSTR("AT+CSMP=17,167,0,240\0"),nATCmd);delay(500); 
    sendATcommand( 1000);}
    
  // Inscrivez ici le numéro de téléphone pour L_Choix'envoie du SMS.// N_Tel = "0620353141";//"0611224381";
  ///sprintf_P(ATCmd,PSTR("AT+CMGS=\"%s\"\0"), N_Tel);delay(500);//Mode flottant
  sprintf_P(ATCmd,PSTR("AT+CMGW=\"%s\"\0"), N_Tel);delay(500);//Mode SMS en memoire
  //"0614939304");//"0620353141");//N_Tel);AT+CWITHELIST pour stoker les num ds la carte
  //Ou AT+CPBR
  //Envoi du numéro de téléphone au module GSM.
  answer = sendATcommand( 2000);delay(500);
  
  if (answer == RVAS){
     delay(200);
     // Recupére le coprs du message.
     byte i=0;
     do{Serial2.print(Msg[i]);i++;}while((Msg[i]!='\0')&&(i<158));
     
     if (i>158){DEBUGG_PRINTln("\n Message SMS trop long!");}
     ATCmd[0]='\n'; ATCmd[1]=(char)26; ATCmd[2]='\0';
     strncpy_P(ATAsw,PSTR("+CMGW: \0"),nATAsw);
     // Mise en mémoire du SMS
     if (sendATcommand( 3000) == R1){
        AdressSMS = atoi(ATAsw);
        DEBUGG_PRINT(F("\nSMS en memoire "));DEBUGG_PRINTln(AdressSMS);}
     else{
        DEBUGG_PRINT(F("\nSMS erreur mise en memoire"));}
     delay(500);
     memset(Msg,'\0',nMsg);//Reset du tanpom
     /*strncpy_P(ATCmd,PSTR("AT+CMGL=\"ALL\"\0"), nATCmd);
     //sendATcommand (500);
     delay(500);*/
     //Envoi du SMS stocké en mémoire
     for(byte i =1;i<3;i++){
     sprintf_P(ATCmd,PSTR("AT+CMSS=%d, %s\0"), i,N_Tel);
     strncpy_P(ATAsw,PSTR("+CMSS: \0"),nATAsw); 
     answer = sendATcommand( 30000);delay(500);}
     
     
     
     //Efface le SMS stocké en mémoire
     /*
     sprintf_P(ATCmd,PSTR("AT+CMGD=%d\0"), AdressSMS);
     answer = sendATcommand( 30000);delay(500);*/
     lcd.noBlink();
     delay(500);AntiOverflow();
     if (answer == ROK){DEBUGG_PRINT(F("\nSMS envoyé!"));return true;}
     else{DEBUGG_PRINT(F("\nErreur Envoi SMS!"));return false;}
   ;}
   //strncpy_P(ATCmd,PSTR("AT+CNMI=0,1,0,0\0"),nATCmd);//Stocké en mémoire
   sendATcommand( 1000); 
 
 }

bonjour, de mémoire, il faut passer le gsm en mode sms via AT+CMGF=1 après on peut envoyer un sms

infobarquee: bonjour, de mémoire, il faut passer le gsm en mode sms via AT+CMGF=1 après on peut envoyer un sms

Merci, pour le regard. En principe, c'est OK de ce coté là AT+CMGF est envoyé dans GSM_ini().

Si je fais AT+CMSS=1 la réponse est +CME ERROR: operation not allowed pour AT+CMSS=1, 0620XXXX la réponse est +CME ERROR: invalid input value

Cela vous inspire t'il?

si tu mettais tout le code au lieu de quelques parties.

as tu sélectionné via la command AT l’endroit pour stocker le sms?
AT+CPMS= : Sélection de la mémoire.

http://www.technologuepro.com/gsm/commande_at.htm

Alors oui/non il me répond

AT+CPMS?

+CPMS: ("SM"),("SM"),("SM") (ou du genre)

donc à priori que la carte SIM dispo

(A oui, c'est un module SIM900A flashé en SIM900)

Si je lui envoi

AT+CPMS="SM"

La réponse est +CPMS: 9,100,9,100,9,100

Je doit avoir 9 messages en mémoire pour 100 max

que donne

AT+CMGW = "STO UNSENT" et AT+CMGW = "STO SENT"

Je vais tester AT+CMGW = “STO UNSENT”
Mais AT+CMGW = “ALL”, me permet de voir mon msg en mémoire 1 avec le status STO UNSENT.
Par contre il est un peut cracra, j’essaye de diminure la vitesse de dictée…

Vu que la fin du message est altéré, je teste un plus court... Peut être la mémoire de la SIM est un peu nase pour l'emplacement1? Du coup pas de bit de fin de chaine et du coup ERROR?