Buonasera
Ho comprato un modulo simcom 7600G+H
Ho testato la comunicazione con realterm e riesco
Ho impostato il baudrate a 9600
Il problema e' che il nano non comunica
Sotto lo sketch lungo ma ripetitivo
Il nano riusciva a comunicare con il vecchio wavecom
I comandi AT hanno fondamentalmente la stessa sintassi
Il datasheet del modulo dice di attendere un po dopo il comando AT, ho provato diversi valori di delay ma senza successo
Ogni suggerimento benvenuto
Un ultima cosa ho scaricato realterm da
Blockquote](RealTerm: Serial/TCP Terminal download | SourceForge.net)
dopo qualche ora mi appare un messaggio di avviso dall antivirus, preoccupato perche' sono vermente rari ho disintallato, avete un terminale alternativo
Grazie
/*
per testare i comandi AT
v55
*/
//comunicazione con modem GSM
#include <AltSoftSerial.h> // AltSoftSerial - Version: Latest rx 8 tx 9
AltSoftSerial Modem; // pin 8 arduino -> Modem TX Pin, pin 9 arduino -> Modem RX Pin
char incoming_char;
char stringOne[200] = " ";
char substringa[50] = " ";
char response[200] = " ";
char creg[] = "0,2";
char PhoneNumber1[] = "ATD+39xxx11;\r\n";
char PhoneNumber2[] = "ATD+39xxx22;\r\n";
char PhoneNumber3[] = "ATD+39xxx33;\r\n";
char PhoneNumber4[] = "ATD+39xxx44;\r\n";
char casoSingolo[] = " ";
int comando;
byte i, j, k; //contatore
void setup() {
delay(100);
Serial.begin(9600); //Initialize serial ports for communication.
Modem.begin(9600); //Initialize serial ports for communication.
i = 0;
j = 0;
k = 0;
comando = 0;
Serial.println("inizio programma"); //stampa di controllo
delay(1000);
}
void loop() {
ReadSerial();
delay(1000);
switch (casoSingolo[0]) {
//switch (comando) {
case '1':
Serial.println("caso 1 Manufacturer identification +CGMI");
Serial.println("AT+CGMI");
Serial.println("scrivo sul modem");
Modem.print("AT+CGMI;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(100);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
comando = 0;
break;
case '2':
Serial.println("caso 2 Request model identification +CGMM");
Serial.println("AT+CGMM");
Serial.println("scrivo sul modem");
Modem.print("AT+CGMM;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '3':
Serial.println("caso 3 Product Serial Number +CGSN");
Serial.println("AT+CGSN");
Serial.println("scrivo sul modem");
Modem.print("AT+CGSN;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '4':
Serial.println("caso 4 Card Identification +CCID");
Serial.println("AT+CCID;");
Serial.println("scrivo sul modem");
Modem.print("AT+CCID");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '5':
Serial.println("caso 5 Phone activity status +CPAS");
Serial.println("AT+CPAS");
Serial.println("scrivo sul modem");
Modem.print("AT+CPAS;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '6':
Serial.println("caso 6 Hang-Up command H");
Serial.println("ATH");
Serial.println("scrivo sul modem");
Modem.print("ATH;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '7':
Serial.println("caso 7 Signal Quality +CSQ");
Serial.println("AT+CSQ");
Serial.println("scrivo sul modem");
Modem.print("AT+CSQ;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
//estraggo parti dalla la stringa
for (j = 15; j <= 17; j++) {
response[k] = stringOne[j];
k++;
}
Serial.print("response"); //stampa di controllo
Serial.println(response); //stampa di controllo
//Serial.println();
Serial.println("RSSI"); //stampa di controllo
Serial.println(atoi(response)); //stampa di controllo
Serial.println();
Serial.println("0-10 not ok"); //stampa di controllo
Serial.println("11-31 ok"); //stampa di controllo
Serial.println("32-98 not defined"); //stampa di controllo
Serial.println("99 no measure available"); //stampa di controllo
Serial.println();
if (atoi(response) > 11 && atoi(response) < 31) {
Serial.println("Segnale RSSI sufficente");
} else {
Serial.println("Segnale RSSI insufficente");
}
Serial.println();
memset(stringOne, 0, sizeof(stringOne)); //svuoto vettore
//memset(incoming_char, 0, sizeof(incoming_char)); //svuoto vettore
memset(response, 0, sizeof(response)); //svuoto vettore
i = 0; //azzero contatore
k = 0; //azzero contatore
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(stringOne, 0, sizeof(stringOne));
break;
case '8':
Serial.println("caso 8 Network registration +CREG");
Serial.println("AT+CREG?");
Modem.print("AT+CREG?;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
//estraggo parti dalla la stringa
for (j = 19; j <= 22; j++) {
//Serial.print(stringOne[j]); //stampa di controllo
response[k] = stringOne[j];
k++;
}
Serial.println();
Serial.println("+CREG response"); //stampa di controllo
Serial.println(response); //stampa di controllo
if (strncmp(response, creg, 3) == 0) {
Serial.println("dispositivo registrato in rete");
} else {
Serial.println("dispositivo non registrato in rete");
}
memset(stringOne, 0, sizeof(stringOne)); //svuoto vettore
//memset(incoming_char, 0, sizeof(incoming_char)); //svuoto vettore
memset(response, 0, sizeof(response)); //svuoto vettore
i = 0; //azzero contatore
j = 0; //azzero contatore
k = 0; //azzero contatore
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case '9':
Serial.println("caso 9 Network registration +CPIN");
Serial.println("AT+CPIN");
Modem.print("AT+CPIN?;");
Modem.write(13); //\r
Modem.write(10); //\n
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case 'a':
Serial.println("caso a Dial command D");
Serial.println("ATD");
//----------------------------------------------chimata al 1mo numero
Modem.print("ATD+39123456789;");
Modem.write(13);
Modem.write(10);
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case 'e':
Serial.println("caso e AT+CMGF configre the text mode");
Serial.println("AT+CMGF?");
Modem.print("AT+CMGF?");
Modem.write(13);
Modem.write(10);
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
case 'f':
Serial.println("caso f AT+CMGS Send message");
Serial.println("AT+CMGS");
//--------------------------------------------------SMS al 1mo numero
Modem.print("AT+CMGS=1;");
Modem.print(13);
Modem.print(10);
delay(50);
ReadModem();
//Modem.print("AT+CMGS=+39xxxx;\r\n\rilevata presenza attorno JD"); //SMS 1 inserisci tuo num cellulare
Modem.print("AT+CMGS=+39xxxx");
Modem.write(13);
Modem.print("rilevata presenza attorno al verdone JD"); //SMS 1 inserisci tuo num cellulare
//Modem.print(char(26)); // CTRL Z
Modem.write(26); // CTRL Z
Serial.println("SMS done");
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
//memset(casoStringa, 0, sizeof(casoStringa));
break;
case 'g':
Serial.println("caso g ATI Display product identification information");
Serial.println("ATI");
Serial.println("Scrivo su modem");
Modem.print("ATI\r\n");
Modem.write(13); //\r
Modem.write(10); //\n
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
break;
default:
Serial.println("Not a valid command/waiting for a comand");
}
delay(1000);
}
void ReadModem() {
delay(500);
memset(stringOne, 0, sizeof(stringOne));
i = 0;
Serial.println("ReadModem()"); //stampa risposta modem
//while a character is coming from the Modem
while (Modem.available() > 0) {
incoming_char = Modem.read(); //Get the character from the Modem port.
stringOne[i] = incoming_char; //compone la stringa
//Serial.println("incoming_char");
//Serial.print(incoming_char);
i++;
delay(50);
}
Serial.println("stringOne"); //stampa risposta modem
Serial.print(stringOne); //stampa risposta modem
//memset(stringOne, 0, sizeof(stringOne));
}
void ModemCRLF() {
Modem.write(13);
Modem.write(10);
}
void ReadSerial() {
i = 0;
//while a character is coming from the Serial
while (Serial.available() > 0) {
incoming_char = Serial.read(); //Get the character coming from the terminal
casoSingolo[i] = incoming_char;
Serial.println("incoming_char");
Serial.println(incoming_char);
i++;
delay(50);
}
if (i > 0) {
Serial.println("casoSingolo");
Serial.println(casoSingolo);
//comando = atoi(casoSingolo);
//Serial.println("comando");
//Serial.println(comando);
}
}
