Salve
Ho trovatoquesto codice per accendere e spengere un led tramite il mio cellulare, ma oltre a ricevere un sms ben definito voglio ampliare il grado di sicurezza facendo riconoscere ad ARDUINO il mio numero di cellulare.
Questo è il mio codice.
#include <SoftwareSerial.h>
char inchar; // Will hold the incoming character from the GSM shield
SoftwareSerial SIM900(7, 8);
int led = 10;
void setup()
{
Serial.begin(19200);
// set up the digital pins to control
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
// wake up the GSM shield
SIM900.begin(19200);
delay(20000); // give time to log on to network.
SIM900.print("AT+CMGF=1\r"); // set SMS mode to text
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
// blurt out contents of new SMS upon receipt to the GSM shield's serial out
delay(100);
Serial.println("Ready...");
}
void loop()
{
//If a character comes in from the cellular module...
if(SIM900.available() >0)
{
inchar=SIM900.read();
if (inchar=='#')
{
delay(10);
inchar=SIM900.read();
if (inchar=='a')
{
delay(10);
inchar=SIM900.read();
if (inchar=='0')
{
digitalWrite(led, LOW);
}
else if (inchar=='1')
{
digitalWrite(led, HIGH);
}
delay(10);
// SIM900.println("AT+CMGD=1,4"); // delete all SMS
}
}
}
}
Quale codice posso usare per far riconoscere il mio cellulare?
Grazie mille
Simone
Normalmente, se esamini tutto il messaggio che ti ritorna il comando AT di lettura di un SMS, scopri che viene fornito il numero di telefono del mittente.
Devi quindi studiarti bene i comandi AT del SIM900 e verificare cosa ti ritorna il comando per la lettura del SMS così da capire in quale posizione si trova il numero di chi te lo ha spedito.
Io lo faccio con un SIM808 (credo che il set di comandi AT sia lo stesso) ... prova a guardare il comando "AT+CMGR - Read SMS Message"
Ti ho detto, leggo gli SMS con AT+CMGR dopo di che, messa la risposta in una vera stringa del C (array di char), uso le funzioni della AVR libc, ed in particolare della <string.h> per fare il parsing di quanto ho ricevuto e separare le varie parti che mi interessano
Per gli esempi ... cerca come si usa strtok che ti permette di separare i vari token.
Ciao Guglielmo
ho fatto delle piccole prove procedendo per gradini.
Per prima cosa ho realizzato questo codice vedendo se il codice (AT+CMGR) inserito in setup funzionava.
Poi ho realizzato il codice in loop e ho visto che il led si è acceso quando ricevo SMS dal mio cellulare.
#include "SIM900.h"
#include <SoftwareSerial.h> // necessaria alla libreria gsm.h richiamata in sms.h
SoftwareSerial SIM900(7, 8);
char ver;
char a='+';
char b='3';
char c='9';
char d='3';
char e='3';
void setup() {
Serial.begin(19200);
SIM900.begin(19200);
Serial.println("ESEMPIO INVIO/RICEZIONE SMS");
pinMode(13, OUTPUT); // imposta il pin 13 come pin di OUTPUT.
SIM900.print("AT+CMGR=1\r"); //
delay(100);
}
void loop() {
if(SIM900.available() >0){
ver=SIM900.read();
if (ver==a){
delay(10);
ver=SIM900.read();
if (ver==b){
delay(10);
ver=SIM900.read();
if (ver==c){
delay(10);
ver=SIM900.read();
if (ver==d){
delay(10);
ver=SIM900.read();
if (ver==e){
delay(10);
digitalWrite(13,HIGH);
Serial.print(ver);
}
}
}
}
}
}
}
Ho notato che SIM900 mi fornisce un bit alla volta.
Se poi metto......
char ver[];
lui mi da questo errore:
Arduino:1.6.5 (Windows 7), Scheda:"Arduino/Genuino Uno"
prova_filtraggio_mittente_gsm:8: error: storage size of 'ver' isn't known
Multiple libraries were found for "SIM900.h"
Used: C:\Users\Mattia99\Documents\Arduino\libraries\GSMSHIELD
Not used: C:\Program Files\Arduino\libraries\GSM-GPRS-GPS-Shield-GSMSHIELD
storage size of 'ver' isn't known
Questo report potrebbe essere più ricco
di informazioni con
"Mostra un output dettagliato durante la compilazione"
abilitato in "File > Impostazioni"
scusa se alle prime armi con arduino....forse punto troppo alto!!!!
Dai se realizzo quello che ho in mente poi ti offro un buon vino della mia Toscana
Simone,
purtroppo nella tua presentazione NON hai messo quali sono le tue conoscenze (sia di elettronica che di programmazione) e quindi devo andare a tentoni in base alle tue domande ...
Direi che per iniziare (perché quello mi sembra il livello) stai puntando un tantino in alto senza avere l'adeguata preparazione ...
... perché non ti fermi un attimo, ti metti a studiare bene le basi del C, fai un po' di esercizi più semplici, e poi riprendi in mano questo progetto ?
Ad esempio, potresti cominciare con lo studiare QUESTO e poi cercare alcuni libri di programmazione C su Arduino ... :
Sono riuscitonel mio intento.
Ho creato un codice che mi permette di riconoscere in mio numero di cellulare e decidere cosa fare con un semplice sms.
il tutto è spiegato su questo Link BASI ARDUINO
L'unica cosa che ho dovuto modificare è stato il file GSM.CPP, i pin abbinati a TX/RX devono essere il 7 (TX) e il 8 (RX).
simone