Allora ragazzi in parte ho risolto il problema. Ho scritto una funzione che analizza la stringa di risposta al comando AT inviato, nell'esempio Il comando CSQ che fornisce il livello del segnale ricevuto.
char GSM::line(void)
{
char status;
if (CLS_FREE != GetCommLineStatus()) return (REG_COMM_LINE_BUSY);
SetCommLineStatus(CLS_ATCMD);
mySerial.println("AT+CSQ");
// 5 sec. for initial comm tmout
// 50 msec. for inter character timeout
status = WaitResp(5000, 50);
if (status == RX_FINISHED) {
//
if(IsStringReceived("0")) {
Serial.println("0");
}else if(IsStringReceived("1")) {
Serial.println("1");
}else if(IsStringReceived("2")) {
Serial.println("2");
}else if(IsStringReceived("3")) {
Serial.println("3");
}else if(IsStringReceived("4")) {
Serial.println("4");
}else if(IsStringReceived("5")) {
Serial.println("5");
}else if(IsStringReceived("6")) {
Serial.println("6");
}else if(IsStringReceived("7")) {
Serial.println("7");
}else if(IsStringReceived("8")) {
Serial.println("8");
}else if(IsStringReceived("9")) {
Serial.println("9");
}else if(IsStringReceived("10")) {
Serial.println("10");
}else if(IsStringReceived("11")) {
Serial.println("11");
}else if(IsStringReceived("12")) {
Serial.println("12");
}else if(IsStringReceived("13")) {
Serial.println("13");
}else if(IsStringReceived("14")) {
Serial.println("14");
}else if(IsStringReceived("15")) {
Serial.println("15");
}else if(IsStringReceived("16")) {
Serial.println("16");
}else if(IsStringReceived("17")) {
Serial.println("17");
}else if(IsStringReceived("18")) {
Serial.println("18");
}else if(IsStringReceived("19")) {
Serial.println("19");
}else if(IsStringReceived("20")) {
Serial.println("20");
}else if(IsStringReceived("21")) {
Serial.println("21");
}else if(IsStringReceived("22")) {
Serial.println("22");
}else if(IsStringReceived("23")) {
Serial.println("23");
}else if(IsStringReceived("24")) {
Serial.println("24");
}else if(IsStringReceived("25")) {
Serial.println("25");
}else if(IsStringReceived("26")) {
Serial.println("26");
}else if(IsStringReceived("27")) {
Serial.println("27");
}else if(IsStringReceived("28")) {
Serial.println("28");
}else if(IsStringReceived("29")) {
Serial.println("29");
}else if(IsStringReceived("30")) {
Serial.println("30");
}else if(IsStringReceived("31")) {
Serial.println("31");
}
//
}
SetCommLineStatus(CLS_FREE);
}
Ancora non ho capito come poter vedere la stringa di risposta dato che nel file .cpp non c'è una funzione vera e propria che fa questo lavoro.
Analizzando le altre funzioni ho capito che si confronta la stringa ricevuta con un testo campione e da qui la mia funzione.
Inviando il comando AT+CSQ si ottiene come risposta un numero da 0 a 31 che corrispondono ad un preciso livello di segnale.
Il problema è che se la risposta contiene uno zero ( 0,10, 20), dal confronto con la funzione isStringReceived ottengo sempre zero
Qualche consiglio!!!