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 ![]()
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';
}