Go Down

Topic: Lendo SMS para controlo com modem Siemens MC35 (Read 1 time) previous topic - next topic

HugoPT

Ola a todos
estou tentando desenvolver um projecto com um modem gsm que consiste em ler a sms recebida e mediante o conteudo da sms ir ligar ou reenviar sms de volta a pessoa que mandou a sms.
Em geral e pretendido que se o utilizador enviar a sms com 123 faça ligar o led 13 no arduino , para ja uma coisa muito simples
o modem funciona com AT commands e tenho o arduino a ler a sms pela Serial port 1 do arduino Mega
O meu problema e separar o que e devoldido do modem
Quando o arduino solicita ao modem a mensagem na primeira localiçacao ele devolve algo deste genero:
Code: [Select]

AT+CMGF=1

OK
AT+CMGR=1

+CMGR: "REC READ","+35196XXXXXXX",,"12/02/08,10:23:30+00"
123

OK

Tentei fazer alguns ciclos if apenas para filtrar que mandou a sms que é indicado no +351XXXXXXXXX e o conteudo da sms que neste exemplo é 123

Estou com enormes dificuldades em apenas filtrar isto no Serial1.read para depois poder fazer instruçoes de comparaçao algo como

if (char sms == "123" && "+35196XXXXXXX "){digitalWrite(13, HIGH);
No fundo era isto o pretendido
Abaixo o codigo que ja tenho construido
Alguem me pode ajudar com a filtragem ?
Obrigado a todos
Code: [Select]
//Read new SMS from Motorola C168i to Arduino and print to LED panels
//Program developed by Matthew Mosher ©2010


//#include <NewSoftSerial.h>

//NewSoftSerialSerial1(10, 11);
char sms[150];
int i = 0 ;


void setup() 
{
  Serial.begin(9600);
  Serial.println("Inicia Leitura de SMS");


  Serial1.begin(9600);//Modem conectado nesta porta
  delay(500);
  Serial1.println("AT+CMGF=1\r\n");  // Coloca o modem em modo Texto
  delay(500);

  Serial1.print("AT+CMGR=1");  //Da ordem ao modem para ler a sms no local 1 e devolvela para a o buffer do arduino
  Serial1.println("\r\n");

}



void loop()           
{
  while (Serial1.available() >0) {
    sms[i] = Serial1.read();
    Serial.print(sms[i], BYTE);
    delay(100);


  }

  Serial1.flush();
  numero_array();


}
void numero_array(){
 
  Serial.println(sms[96]);
  Serial.println(sms[97]);
  Serial.println(sms[98]);
  Serial.println(sms[99]);
  Serial.println(sms[100]);
 
  // }


}

Neste exemplo tentei carregar todos os bytes recebidos para um array para depois poder fazer a comparaçao mas sem sucesso


Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

leondeniz

amigo, posso tentar te ajudar, na configuração do modem para termos um retorno mais facil para se tratar o codigo, sem retorno de data, hora, etc.
tente mudar a configuração messaging handling metodo de entrada de cmgl para outro
http://www.ozeki.hu/index.php?owpn=670

ve pelo menos um jeito da mensagem vir em uma só linha, pq ai eu posso fazer uma rotina para voce onde filtraremos o codigo até chegar realmente a mensagem
tipo
rele1:on,rele2:off,rele3:on,rele4:on
abraço
leon, espero ter ajudado pelo menos quanto ao caminho


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy