Arduino Uno + Icomsat 1.1 SIM900

Bom olhando ao teu codigo encontrei algo que penso estar errado:

void checksms(){
  if(gsm.available() > 0){
    Serial.println("--------Nova SMS----------");
 gsm.flush();
    delay(1000);
    lesms();
    vadidacodigo();
  }
};

//--------------------------------------------------------------------------------------------------------------------------------------------------------------

void lesms(){
  Serial.println("-----------------------Lendo SMS---------------------");
  delay(2000);
  gsm.println("AT+CMGR=1\r");
 gsm.flush();
  for( x=0; x<255; x++){
    data[x]='\0';
  }
  x=0;

Se invocas o comando para ler a sms com o AT+CMGR=1 logo apos ele, o modem devolve te para a porta Serie o corpo da SMS que ira ser carregada no Buffer a espera de ser descarregado.O teu problema penso que seja logo a seguir quando corres o gsm.flush !! Sabes o que o flush faz?
Limpa o buffer :stuck_out_tongue:
Logo nada depois sera lido

Flush

The new library supports the flush() method, which works the same way that HardwareSerial’s flush() does.

void flush(); // discard the contents of the RX buffer.

Posso estar errado mas ...
Depois podes explicar o que pretendes fazer neste ciclo if?

for( x=0; x<255; x++){
    data[x]='\0';
  }