problème de lecture des SMS

bonjour je souhaiterais lire des SMS provenant d'un shield GSM
voici mon code:

#include <GSM.h>
#define PINNUMBER ""
GSM gsmAccess;
GSM_SMS sms;


int DIMSPin = 53;  //capteur de mvts infrarouge branché au pin 53
int DIMS;
int PortePin = 4;  //capteur de contacte de la porte branché au pin 4
int porte;
int detection = 1;
char senderNumber[20];
boolean etatalarme = false;
int pinordi1 =12;
void setup()
{
  Serial.begin(9600);
  pinMode(PortePin, INPUT);
  pinMode(DIMS, INPUT);
  pinMode(pinordi1, OUTPUT);
  Serial.print("initialisation");
  boolean notConnected = true;

  while(notConnected)
  {
    Serial.print(".");
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      // Serial.println("Not connected");
      delay(1000);
    }
  }
  Serial.print("\n");
  Serial.println("GSM initialized");
  tone(6,500,1000);
}


void loop()
{
  if (etatalarme == true)
  {
    /****************************PARTIE 1*****************************/
    porte = digitalRead(PortePin);
    delay(1000);
    DIMS = digitalRead(DIMSPin);

    if (DIMS==1 && porte==1 && detection==1)
    {
      Serial.println("detected"); 
      tone(6,900,1000);
      sms.beginSMS("0609732367");
      sms.print("un intru est rentré dans ta chambre");
      sms.endSMS();
      detection=0;    
    }
    if (porte == 0)
    {
      detection=1;
    }
  }
  /****************************PARTIE 2*****************************/
  char c[10];

  if (sms.available())
  {
    tone(6,900,1000);


    if(sms.peek()=='#'||sms.available()>10)
    {
      Serial.println("Discarded SMS");
      sms.flush();
    }


    sms.remoteNumber(senderNumber, 20);
    
    
    
    
   for (int i=1; i<=sms.available();i++)                         //  <----- le problème se trouve ici !
    {
    c[i]=sms.read();   
    Serial.println("lecture");
    }





    sms.flush();
    Serial.println("test");
    if (strcmp(senderNumber,"+33609732367")==0)
    {
      Serial.println("bon numero");
      Serial.println(c);
      if (strcmp(c,"AA")==0)
      {
        Serial.println(1);
        etatalarme = true;  
      }
      else if (strcmp(c,"EA")==0)
      {
        Serial.println(2);
        etatalarme = false;
      }
      else if (strcmp(c,"AP")==0)
      {
        Serial.println(3);
        digitalWrite(pinordi1, HIGH); 
        delay(500);
        digitalWrite(pinordi1, LOW);
      }
      else if (strcmp(c,"EP")==0)
      {
        Serial.println(4);
        digitalWrite(pinordi1, HIGH); 
        delay(500);
        digitalWrite(pinordi1, LOW);
      }  
    }
  }
}

inutile de vous intéresser à la partie 1 car elle fonctionne mon problème vient de la partie 2 à l'endroit indiqué
peu importe la taille du message seul la première lettre est lu

voici le moniteur série

j'ai par la suite remplacé le "for" par ce code

int i=0;
while (sms.available())
    {
    c[i++]=sms.read();   
    }

mais impossible de sortir de la boucle !

si quelqu'un a une idée surtout n’hésitez pas

merci d'avance

Salut,

De mémoire sms.available() ne fonctionne pas exactement comme Serial.available(), il faut faire un flush() avant de retester. En reprenant simplement l'exemple du site Arduino http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS :

 if (sms.available())
  {

   char c[50];
   int i=0;

    while(c[i++]=sms.read());

    sms.flush();

  }

Merci cela à l'air de fonctionner