Ciao
il programma e' solo un elenco di case
/*
v57
per testare i comandi AT
*/
//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[70] = " ";
char substringa[50] = " ";
char response[50] = " ";
char creg[] = "0,1"; //risposta modem registrato
char PhoneNumber1[] = "ATD+39mionumero;";
char PhoneNumber2[] = "ATD+39xxx22;\r\n";
char PhoneNumber3[] = "ATD+39xxx33;\r\n";
char PhoneNumber4[] = "ATD+39xxx44;\r\n";
char SMSPhoneNumber1[] = "+39mionumero";
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();
ReadModem();
delay(1000);
switch (casoSingolo[0]) {
// 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));
//memset(stringOne, 0, sizeof(stringOne));
// 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));
//memset(stringOne, 0, sizeof(stringOne));
// 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));
//memset(stringOne, 0, sizeof(stringOne));
// 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));
//memset(stringOne, 0, sizeof(stringOne));
// 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 = 16; j <= 17; j++) {
response[k] = stringOne[j];
k++;
}
Serial.print("response "); //stampa di controllo
Serial.println(response); //stampa di controllo
Serial.println();
Serial.print("RSSI "); //stampa di controllo
Serial.println(atoi(response)); //stampa di controllo
if (atoi(response) >= 11 && atoi(response) <= 30) {
Serial.println("Segnale RSSI sufficente");
} else {
Serial.println("Segnale RSSI insufficente");
}
Serial.println();
Serial.println("This command returns the received signal strength (rssi) and the channel bit error rate (ber)");
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
/*
This command returns the received signal strength (rssi) and the channel bit error rate (ber).
Value RSSI dBm Condition
2 -109 Marginal
3 -107 Marginal
4 -105 Marginal
5 -103 Marginal
6 -101 Marginal
7 -99 Marginal
8 -97 Marginal
9 -95 Marginal
10 -93 OK
11 -91 OK
12 -89 OK
13 -87 OK
14 -85 OK
15 -83 Good
16 -81 Good
17 -79 Good
18 -77 Good
19 -75 Good
20 -73 Excellent
21 -71 Excellent
22 -69 Excellent
23 -67 Excellent
24 -65 Excellent
25 -63 Excellent
26 -61 Excellent
27 -59 Excellent
28 -57 Excellent
29 -55 Excellent
30 -53 Excellent
*/
Serial.println();
i = 0; //azzero contatore
k = 0; //azzero contatore
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(response, 0, sizeof(response)); //svuoto vettore
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++) {
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");
}
i = 0; //azzero contatore
k = 0; //azzero contatore
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(response, 0, sizeof(response)); //svuoto vettore
memset(stringOne, 0, sizeof(stringOne));
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));
//memset(stringOne, 0, sizeof(stringOne));
// break;
case 'a':
Serial.println("caso a Dial command D IT");
Serial.println("ATD IT");
//----------------------------------------------chima il 1mo numero
Modem.print("ATD+39mionumero;");
Modem.write(13);
Modem.write(10);
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(stringOne, 0, sizeof(stringOne));
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));
//memset(stringOne, 0, sizeof(stringOne));
// break;
case 'f':
Serial.println("caso f AT+CMGS Send message");
Serial.println("AT+CMGS");
//--------------------------------------------------SMS al 1mo numero
Modem.print("AT+CMGF=1;");
Modem.write(13);
Modem.write(10);
delay(50);
ReadModem();
Modem.print("AT+CMGF?;");
Modem.write(13);
Modem.write(10);
delay(50);
ReadModem();
delay(50);
//sezione sms
//char SMS[] = "AT+CMGS=", sms2[] = {SMSPhoneNumber1};
//strcat(SMS, sms2);
Modem.print("AT+CMGS=\"+393385078535\"");
//Modem.println("AT+CMGS=\SMSPhoneNumber1\"");
//Modem.println(SMS);
Modem.write(13); // \r
delay(100);
Modem.print("rilevata presenza"); //SMS 1 inserisci tuo testo
delay(100);
//Modem.print(char(26)); // CTRL Z
Modem.println(char(26)); // CTRL .3|Z per spedire
//Modem.write(27); // ESC per abortire
Modem.write(13); // \r
delay(100);
ReadModem();
Serial.println("SMS done");
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(stringOne, 0, sizeof(stringOne));
break;
default:
Serial.println("Not a valid command/waiting for a comand");
}
delay(1000);
}
void ReadModem() {
memset(stringOne, 0, sizeof(stringOne));
i = 0;
Serial.println("ReadModem()"); //stampa risposta modem
delay(500);
//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
i++;
delay(50);
}
Serial.println("stringOne"); //stampa risposta modem
Serial.println(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);
}
}