Ciao a tutti. Ho acquistato da poco il modulo gsm tc35 e ho provato a fare le prime semplici operazioni di chiamata e invio sms e fin qui nessun problema. Ora vorrei che Arduino "faccia qualcosa" alla ricezione di un preciso sms il cui contenuto è, per ora, un singolo carattere. lo sketch che ho scritto è:
void loop(){
if(Serial.available()>0) {
gsm_sms=gsmSerial.read();
if (gsm_sms == 'A'){
digitalWrite(13,HIGH);
}
else if (gsm_sms == 'a'){
digitalWrite(13,LOW);
}
}
}
che non funziona. L'intento è banalmente accendere il led connesso al pin 13 con un sms che contiene 'A' e spegnerlo con 'a'. Credo che il no funzionamento sia dovuto all'assenza di comandi AT, che non ho ancora capito come utilizzare. pensavo di inserire nella funzione setup:
gsmSerial.println("AT"); // che avvia la connessione (forse )
delay(100);
gsmSerial.println("AT+CMGR=1"); // che setta il modulo sulla funzione di ricezione sms (ri-forse )
qualcuno ha già utilizzato questo modulo? ha suggerimenti sul come leggere sms? Grazie mille
ciao
si devi usare i comandi AT ti serve l'elenco dei comandi AT del modulo e poi devi lavorare con le stringhe per estrapolare dal messaggio la parte che ti interessa
ciao
questo è uno degli sketch che ho fatto per testare i comandi AT usando un modem wavecom
/*
SparkFun Cellular Shield - Pass-Through Sample Sketch
SparkFun Electronics
Written by Ryan Owens
CC by v3.0
3/8/10
max current 330 mA when 'ringing'
impostare il serial print su A capo NL
*/
#include <SoftwareSerial.h> //Include the NewSoftSerial library to send serial commands to the cellular module.
#include <string.h> //Used for string manipulations
char incoming_char=0;//Will hold the incoming character from the Serial Port.
String stringOne="";
String substringa="";
SoftwareSerial cell(5,6); //Create a 'fake' serial port. NewSoftSerial cell(RX,TX)
void setup()
{
Serial.begin(9600);//Initialize serial ports for communication.
cell.begin(9600);//Initialize serial ports for communication.
}
void loop()
{
//If a character is coming from the modem to the Arduino...
while(cell.available()) //oppure if
{
incoming_char=cell.read(); //Get the character from the cellular serial port.
//stringOne+=String(incoming_char);
Serial.print(incoming_char); //Print the incoming character to the terminal.
stringOne+=String(incoming_char);
// stringOne.trim();
//Serial.println(stringOne); //stampa di controllo
//Serial.println(stringOne.length()); //stampa di controllo
delay(50);
/*
while(cell.available()>0) //svuota i messaggi dal modem
{
delay(50); //pausa
cell.read(); //legge dalla seriale
//Serial.print(String(cell.read()));
}
*/
}
//stringOne="";
//If a character is coming from the the Arduino to the modem
if(Serial.available())
{
incoming_char=Serial.read(); //Get the character coming from the terminal
cell.print(incoming_char); //Send the character to the cellular module.
//cell.print("\r\n"); //Send the character to the cellular module.
delay(50);
}
}
Scusami per il ritardo nel rispondere, ma non ho avuto molto tempo.
Ho provato il tuo sketch e non va, probabilmente perchè si tratta di due modem differenti; per quanto riguarda quel comando ho provato ad utilizzarlo in questo modo, ma continuo a non visualizzare nulla sul monitor seriale.
ciao
mi sono accorto che non sono stato chiaro:
lo sketch che ti ho dato prende il comando dal serial monitor, usa lo sketch cosi come è correggi il software serial e scrivi il comando nella finestra del serial monitor, trovo strano che non riesci a risolvere visto che effettui chiamate e mandi SMS, il diverso modem non c'entra, i comandi AT sono generali salvo qualche personalizzazione
Certo, avevo già cambiato il software serial. Se scrivo il comando nella finestra del serial monitor lo visualizzo; ciò che non riesco a visualizzare è il carattere inviato tramite SMS dal mio cellulare alla sim del modulo gsm. Ossia questa parte di codice:
while(cell.available()) //oppure if
{
incoming_char=cell.read(); //Get the character from the cellular serial port.
stringOne+=String(incoming_char);
Serial.print(incoming_char); //Print the incoming character to the terminal.
stringOne+=String(incoming_char);
ciao
lo sketch che ho postato lo uso per provare i comandi AT e vedere cosa mi risponde il modem, ho provato solo una volta il comando per leggere SMS ma non ricordo che risposta mi ha dato, fammi rileggere il manuale del tuo modem.