Filtrare il numero di cellulare con modulo gsm e arduino

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"

Guglielmo

Ciao Guglielmo
io sto cercando ma senza trovare soluzioni.......tu che codice usi per sim808?
un Link dove posso trovare un esempio?
simone

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 :slight_smile:

Per gli esempi ... cerca come si usa strtok che ti permette di separare i vari token.

Guglielmo

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 :slight_smile: :slight_smile: :slight_smile: :slight_smile:

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 :wink: ...
... 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 ? :slight_smile:

Ad esempio, potresti cominciare con lo studiare QUESTO e poi cercare alcuni libri di programmazione C su Arduino ... ::slight_smile:

Guglielmo

Tra l'altro, dai una ripulita alla tua cartella Arduino ... il compilatore ti indica che trova la stessa libreria (GSM.h) in più posti ... ::slight_smile:

Guglielmo

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