Ciao
Sto' realizzando un programma per interrogare un modem con comandi predefiniti che richiamo da seriale, con uno switch/case e per fare pratica con i char invece delle String
Se richiamo i case con "comando" funziona
Ma volevo riuscire a farlo con i char e se digito 25 il case eseguito e' il 2 e lo capisco per come e' lo switch ma se lascio [] vuote o mancanti ho un errore di compilazione
Mi passate qualche link
//switch (casoSingolo[0]) {
switch (casoStringa[0]) {
//switch (comando) {
case 25:
Serial.println("caso 1 Manufacturer identification +CGMI");
Serial.println("AT+CGMI");
delay(100);
Modem.print("AT+CGMI;\r\n");
delay(100);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
comando = 0;
break;
case '2':
Serial.println("caso 2 Request model identification +CGMM");
Serial.println("AT+CGMM");
Modem.print("AT+CGMM;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
sotto lo sketch completo
/*
per testare i comandi AT
v30
09:23:01.762 -> caso 7 Signal Quality +CSQ
09:23:01.762 -> AT+CSQ
09:23:03.244 -> AT+CSQ;
09:23:03.245 ->
09:23:03.245 -> +CSQ: 23,0
09:23:03.245 ->
09:23:03.245 -> OK
09:23:03.245 ->
09:23:03.245 ->
09:33:01.690 -> caso 2 Request model identification +CGMM
09:33:01.690 -> AT+CGMM
09:33:03.869 -> AT+CGMM;
09:33:03.869 ->
09:33:03.869 -> MULTIBAND 900E 1800
09:33:03.902 ->
09:33:03.902 -> OK
09:33:03.902 ->
09:33:03.902 ->
*/
#include <AltSoftSerial.h> //tx 9 rx 8
char incoming_char;
char stringOne[100];
char substringa[100];
char response[100];
char PhoneNumber1[17];
char casoSingolo[4];
char casoStringa[4];
int comando;
//constexpr char Character_[3] = { "DH" };
byte i, j, k; //contatore
//comunicazione con modem GSM
AltSoftSerial Modem;
void setup() {
delay(100);
Serial.begin(9600); //Initialize serial ports for communication.
Modem.begin(9600); //Initialize serial ports for communication.
//lista comandi AT
Serial.println("lista comandi AT digita numero");
//General commands
Serial.println("caso a 1 Manufacturer identification +CGMI");
Serial.println("AT+CGMI;\r\n");
Serial.println("caso b 2 Request model identification +CGMM");
Serial.println("AT+CGMM;\r\n");
Serial.println("caso c 3 Product Serial Number +CGSN");
Serial.println("AT+CGSN;\r\n");
Serial.println("caso d 4 Card Identification +CCID");
Serial.println("AT+CCID;\r\n");
Serial.println("caso e 5 Phone activity status +CPAS");
Serial.println("AT+CPAS;\r\n");
//Call Control commands
Serial.println("caso d Dial command D");
Serial.println("ATD+393385078535;\r\n");
Serial.println("caso h Hang-Up command H");
Serial.println("ATH;\r\n");
//Network service commands
Serial.println("caso g 7 Signal Quality +CSQ");
Serial.println("0-10 not ok");
Serial.println("11-31 ok");
Serial.println("32-98 not defined");
Serial.println("99 no measure available");
Serial.println("AT+CSQ;\r\n");
Serial.println("caso h 8 Network registration +CREG");
Serial.println("AT+CREG?;\r\n");
//Security commands
Serial.println("caso p Enter PIN +CPIN");
Serial.println("AT+CPIN=6113;\r\n");
Serial.println("caso b Incoming Call Bearer +CICB");
Serial.println("AT+CICB?\r\n");
Serial.println("caso c Incoming Call Bearer +CICB");
Serial.println("AT+CICB=2\r\n");
//imizializzo vettori
memset(stringOne, 0, sizeof(stringOne));
memset(substringa, 0, sizeof(substringa));
memset(casoSingolo, 0, sizeof(casoSingolo));
//memset(casoStringa, 0, sizeof(casoStringa));
memset(incoming_char, 0, sizeof(incoming_char));
PhoneNumber1[17] = { "ATD+39xxxxx;\r\n" };
i = 0;
j = 0;
k = 0;
comando = 0;
Serial.println("inizio programma"); //stampa di controllo
delay(1000);
}
void loop() {
ReadSerial();
memset(incoming_char, 0, sizeof(incoming_char)); //svuoto vettore
i = 0; //azzero contatore
delay(1000);
//switch (casoSingolo[0]) {
switch (casoStringa[0]) {
//switch (comando) {
case 25:
Serial.println("caso 1 Manufacturer identification +CGMI");
Serial.println("AT+CGMI");
delay(100);
Modem.print("AT+CGMI;\r\n");
delay(100);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
comando = 0;
break;
case '2':
Serial.println("caso 2 Request model identification +CGMM");
Serial.println("AT+CGMM");
Modem.print("AT+CGMM;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '3':
Serial.println("caso 3 Product Serial Number +CGSN");
Serial.println("AT+CGSN");
Modem.print("AT+CGSN;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '4':
Serial.println("caso 4 Card Identification +CCID");
Serial.println("AT+CCID");
Modem.print("AT+CCID;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '5':
Serial.println("caso 5 Phone activity status +CPAS");
Serial.println("AT+CPAS");
Modem.print("AT+CPAS;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '6':
Serial.println("caso 6 Hang-Up command H");
Serial.println("ATH");
Modem.print("AT+H;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '7':
Serial.println("caso 7 Signal Quality +CSQ");
Serial.println("AT+CSQ");
Modem.print("AT+CSQ;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '8':
Serial.println("caso 8 Network registration +CREG");
Serial.println("AT+CREG?");
Modem.print("AT+CREG?;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case '9':
Serial.println("caso 9 Network registration +CPIN");
Serial.println("AT+CPIN");
Modem.print("AT+CPIN?;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case 'a':
Serial.println("caso d Dial command D");
Serial.println("ATD");
Modem.print("ATD+39123456789;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case 'b':
Serial.println("caso b Incoming Call Bearer +CICB");
Serial.println("AT+CICB?");
Modem.print("AT+CICB?;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
case 'c':
Serial.println("caso c Incoming Call Bearer +CICB");
Serial.println("AT+CICB=2");
Modem.print("AT+CICB=2;\r\n");
delay(50);
ReadModem();
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
break;
}
delay(1000);
}
void ReadModem() {
//while a character is coming from the Modem
while (Modem.available() > 0) //verifica la presenza di segnali
{
incoming_char = Modem.read(); //Get the character from the Modem port.
stringOne[i] += incoming_char; //compone la stringa
i++;
//Serial.println(stringOne); //stampa di controllo
delay(50);
}
Serial.println(stringOne); //stampa di controllo
// for (j = 17; j <= 18; j++) {
// Serial.print(stringOne[j]); //stampa di controllo
// response[k] += stringOne[j];
// k++;
// }
Serial.println();
/*
Serial.println("response"); //stampa di controllo
Serial.println(atoi(response) * 2); //stampa di controllo
*/
//Serial.println("stringOne"); //stampa di controllo
//Serial.println(stringOne); //stampa di controllo
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;
}
void ReadSerial() {
//while a character is coming from the Serial
while (Serial.available() > 0) {
incoming_char = Serial.read(); //Get the character coming from the terminal
if (incoming_char == 'z') {
Serial.println("resetto memoria");
memset(casoSingolo, 0, sizeof(casoSingolo));
memset(casoStringa, 0, sizeof(casoStringa));
}
//Serial.println(incoming_char); //stampa di controllo
casoSingolo[i] = incoming_char;
casoStringa[i] += incoming_char;
Serial.print('i'); //stampa di controllo
Serial.print('\t'); //stampa di controllo
Serial.print(i); //stampa di controllo
Serial.print('\t'); //stampa di controllo
Serial.print("casoSingolo[i]"); //stampa di controllo
Serial.print('\t'); //stampa di controllo
Serial.println(casoSingolo[i]); //stampa di controllo
comando = atoi(casoSingolo);
Serial.println("comando");
Serial.println(comando);
Serial.println("casoSingolo");
Serial.println(casoSingolo);
Serial.println("casoStringa");
Serial.println(casoStringa);
i++;
delay(50);
}
}