Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  evertondt em Sex 13 Jul - 18:34

Pessoal estou estudando como receber uma mensagem com o sim900 ou sim908 e a a partir dela acionar um dispositivo. Vamos criar uma solução legal para todos?


Alguem tem uma idéia ou uma sujestão??



Comando e resposta de leitura de uma mensagem no chip:

AT+CMGR=1 // comando de leitura de mensagem tipo AT e a resposta abaixo

+CMGR: "REC READ","01991000000","","12/05/15,22:59:12-12"
dispositivo1, ligar

OK

---
A idéia é pegar o texto, separar as partes, ver se o numéro é o cadastrado, e ligar ou desligar o dispositivo descrito



Um codigo que estou tentando:
Ele apenas lê uma parte para ide 1.0 ou 1.0.1

#include

SoftwareSerial mySerial(2, 3);


#define BUF_LEN 84 //64
int powerkey = 5;
int statuspin = 6;
int pinState = 0;


void setup() {
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);

mySerial.begin(9600); // the GPRS baud rate
Serial.begin(9600); // the GPRS baud rate

}

byte num_of_bytes;
byte retorno;
char comm_buf[BUF_LEN];
byte n;



void loop()
{

pinState = digitalRead(statuspin);
if(pinState==LOW)
{
digitalWrite(powerkey, HIGH); // set the LED on
delay(2000);
digitalWrite(powerkey, LOW);
}

Serial.println("comando 1 -----------------------------");//executa comando
mySerial.println("AT+CMGR=1");//executa comando
delay(10000); //pausa milesegundo para espera resultado na serial
leserial(); // chama função processa dados e armazena no buffer
retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
Serial.println(comm_buf); //mostra retorno real

/*
for(n=0; n {
Serial.println(comm_buf[n]);
parametro = strtok (comm_buf, ","); // defina como texto até o primeiro virgula
Serial.println("parametro");
Serial.println(parametro);
}
*/

splitString(comm_buf); // chama a função splitString e envia dados do buffer



// Serial.println("retorno:");//executa comando
// Serial.println(retorno);//executa comando
Serial.println(comm_buf); //mostra retorno real
limpa_buffer(); //limpa buffer



}
/**********************************************************
Metodo splitstring
**********************************************************/
void splitString(char* data) {
Serial.print("Data entered splitString: ");
Serial.println(data);
Serial.print("FIM Data entered splitString: ");
char* parameter;
parameter = strtok (data,",");
while (parameter != NULL) {
//PROXIMO_METODO_COMA_AÇÃO(parameter);
Serial.println("parameter separado as partes");
Serial.println(parameter);
parameter = strtok (NULL,",");
}
}

/**********************************************************
Metodo para leitura da softserial
buffer maximo de (num_of_bytes) caracteres
**********************************************************/
void leserial()
{
num_of_bytes = mySerial.available(); //Pega quantidade de bytes ques estao na serial
Serial.println("quantidade de bytes ques estao na serial");//executa comando
Serial.println(num_of_bytes);//executa comando
while (mySerial.available() > 0) //Espera de até Available ser true
{
for(n=0; n {
comm_buf[n] = mySerial.read(); //armazena buffer e a cada mySerial.read carry on buffer interno
http://Serial.println("e n = :");//
// Serial.println(n);//
http://Serial.println("comm_buf[n] COM VALOR:");//
// Serial.println(comm_buf[n]);//

}
}
mySerial.flush(); //limpa buffer de entrada da serial
}



/**********************************************************
Metodo para limpeza do buffer
**********************************************************/
void limpa_buffer()// limpa o buffer
{
memset(comm_buf,'\0',BUF_LEN); // menseter c: ( , , )
}


/**********************************************************
Método que checa bytes recebidos

compare_string - ponteiro para a string que deve ser encontrar

retorno: 0 - string não foi reconehceda
1 - string foi reconehceda
**********************************************************/
byte IsStringReceived(char const *compare_string)
{
http://Serial.println("testando...");
char *ch;
byte ret_val = 0;

if(1) {
ch = strstr((char *)comm_buf, compare_string);
if (ch != NULL)
{
http://Serial.println("existe Valor");
ret_val = 1;
}
else
{
}
}
return (ret_val);
}


------------
resultado na com conseguido até o momento somente para teste e ver o que está ocorrendo:

+CMGR: "REC READ"
comando 1 -----------------------------
quantidade de bytes ques estao na serial
63
AT+CMGR=1

+CMGR: "REC READ","0199100000","","12/05/15,22:59
Data entered splitString: AT+CMGR=1

+CMGR: "REC READ","0199100000","","12/05/15,22:59
FIM Data entered splitString: parameter separado as partes
AT+CMGR=1

+CMGR: "REC READ"
parameter separado as partes
"0199100000"
parameter separado as partes
""
parameter separado as partes
"12/05/15
parameter separado as partes
22:59
AT+CMGR=1


Conto com a contribuição, Obrigado

evertondt

Mensagens : 12
Data de inscrição : 13/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  janiocavalcanti em Ter 17 Jul - 10:13

Estou com esta mesma idéia.
ainda estou pesquisando sobre como comandar utilizando o shield, e além disso eu quero fazer leitura de um sinal analógico e enviar para o celular.

agradeço se alguem puder ajudar.

janiocavalcanti

Mensagens : 2
Data de inscrição : 03/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  santiago54321 em Ter 17 Jul - 12:00

Olá pessoal, tmb tenho o mesmo projeto para ser desenvolvido, aguardo a contribuição dos mais experientes !

santiago54321

Mensagens : 9
Data de inscrição : 14/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  santiago54321 em Qua 18 Jul - 16:23

Everton,

Tenta este método, encontrei na net mas nao consegui fazer funcionar ! se conseguir resolver posta ai !

Admin faz a sua mágica ai...

void lesms()
{
Serial.println("AT+CMGR=1"); //Reads the first SMS
Serial.flush();
for (x=0;x < 255;x++){
data[x]='\0';
}
x=0;
do{
while(Serial.available()==0);
data[x]=Serial.read();
x++;
if(data[x-1]==0x0D&&data[x-2]=='"'){
x=0;
}
}while(!(data[x-1]=='K'&&data[x-2]=='O'));
data[x-3]='\0'; //finish the string before the OK
Serial.println(data); //shows the message
delay(10000);
}

santiago54321

Mensagens : 9
Data de inscrição : 14/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Separa apenas o texto da mensagem

Mensagem  evertondt em Qua 18 Jul - 22:09

santiago54321 o cógigo funciona sim

Legal bom para o pessoal que quer receber uma mensagem e enviar para um display ou outdoor

Teste ai:

Código:


#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);


#define BUF_LEN  84 //64
int powerkey =  5;
int statuspin = 6;
int pinState = 0;

int x =0;
const int MAXDATA = 256;
char data [MAXDATA];


void setup() {
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);

  mySerial.begin(9600);              // the GPRS baud rate
  Serial.begin(9600);                // the GPRS baud rate

}


void loop()
{

  pinState = digitalRead(statuspin);
  if(pinState==LOW)
  {
    digitalWrite(powerkey, HIGH);  // set the LED on
    delay(2000);
    digitalWrite(powerkey, LOW);
  }

  Serial.println("comando 1 - ler a primeira mensagem");//executa comando

  mySerial.println("AT+CMGR=1"); //Reads the first SMS
  mySerial.flush();
  for (x=0;x < 255;x++){
    data[x]='\0';

  }
  x=0;
  do{
        while(mySerial.available()==0);
        data[x]=mySerial.read();
        x++;
        if(data[x-1]==0x0D&&data[x-2]=='"'){ // remove o cabeçalho +CMGR: "REC READ","xxxx","","12/05/21,12:21:43-12"
          x=0;
        }
      }
  while(!(data[x-1]=='K'&&data[x-2]=='O')); // enquanto não encontrar o ok não para
  data[x-3]='\0'; //finish the string before the OK
  Serial.println(data); //shows the message
  delay(10000);

        }




Última edição por evertondt em Sex 20 Jul - 21:58, editado 1 vez(es)

evertondt

Mensagens : 12
Data de inscrição : 13/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  santiago54321 em Qui 19 Jul - 9:04

Everton,

Funcionou sim, mas o seu código é bem mais interessante pois com ele possivel identificar o numero do remetente, ler a mensagem e tomar um decisão conforme for, conseguiu algum progresso com ele ?

santiago54321

Mensagens : 9
Data de inscrição : 14/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

QUASE LÁ !!!

Mensagem  santiago54321 em Sex 20 Jul - 12:52

Prezados,

Estamos a um passo, ja estou recebendo sms separando o remetente e separando a mensagem enviada (mensagem enviada tem que 4 digitos Ex:0001)

O problema é que a variavel que guarda o código muda de valor sózinho no meio do programa, a variavel "codcadastrado" muda de "0001" para "52488014013".

Segue o código e o resultado dele:


Código:
#include <SoftwareSerial.h>
#include <String.h>
 
SoftwareSerial mySerial(4, 5);

#define BUF_LEN  84

int statuspin = 4;
int pinState = 0;
int x,y,i,j;
char ncadastrado[] = "552488014013";
char nremetente[] = "";

char codcadastrado[] = "0001";
char codremetente[] = "";

const int MAXDATA1 = 256;
const int MAXDATA2= 256;
char msg1[MAXDATA1];
char msg2[MAXDATA2];

const int MAXDATA = 256;
char data [MAXDATA];

void setup()
{
  pinMode(statuspin, INPUT);
  pinMode(9, OUTPUT);
  mySerial.begin(9600);              // the GPRS baud rate 
  Serial.begin(9600);                // the GPRS baud rate
}

byte num_of_bytes;
byte retorno;
char comm_buf[256];
byte n;

void loop()
{
  if(Serial.available())
    {
      mySerial.print((unsigned char)Serial.read());
    } 
    else  if(mySerial.available())
    {
      Serial.print((unsigned char)mySerial.read());
    }

    poweron();
 
  //enviasms();
    lesms();
    validasms();
   
    if (y==0)
    {
  //enviasms();
  http://mySerial.println("AT+CMGD=1");
    y=1;
    }
   
 


void poweron()
{
  pinState = digitalRead(statuspin);
  if(pinState==LOW)
  {
  Serial.println("estou ligando...");
  digitalWrite(9,HIGH);
  delay(2000);
  digitalWrite(9,LOW);
  delay(3000);
  }
 
}

void lesms()
{
 
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("--------------------------  LENDO SMS  --------------------------");
  Serial.println("|");
  Serial.println("|");
 
  mySerial.println("AT+CMGR=1"); //Reads the first SMS
  mySerial.flush();
  for (x=0;x < 255;x++){
    data[x]='\0';
  }
  x=0;
  do{
        while(mySerial.available()==0);
        data[x]=mySerial.read();
        x++;
        //if(data[x-1]==0x0D&&data[x-2]=='"'){ // remove o cabeçalho +CMGR: "REC READ","xxxx","","12/05/21,12:21:43-12"
          //x=0;
        //}
        if(data[x-1]=='+'&&data[x-2]=='"'){ // remove o cabeçalho +CMGR: "REC READ","xxxx","","12/05/21,12:21:43-12"
          x=0;
        }
      }
  //while(!(data[x-1]=='K'&&data[x-2]=='O')); // enquanto não encontrar o ok não para
  while(!(data[x-1]=='K'&&data[x-2]=='O')); // enquanto não encontrar o ok não para
  data[x-3]='\0'; //finish the string before the OK
  Serial.println(data); //shows the message
  //splitString(data);
  delay(2000);
  Serial.println("|");
  Serial.println("|");
  Serial.println("----------------------------  F I M  ----------------------------");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");

 
}

void validasms()
{
 j=0;
 i=0;
Serial.println("---------------------VALIDANDO MENSAGEM SMS ---------------------");//executa comando
/*
Serial.println("|");
Serial.println("|");
Serial.println("POCISAO DE data [ ] DO REMETENTE QUE ENVIOU");
Serial.println("|");
 for(i=0; i<12; i++)
 {
    Serial.print("pocisao: ");
    Serial.print(i);
    Serial.print("  caracter: ");
    Serial.println(data[i]);
  }

Serial.println("|");
Serial.println("|");

Serial.println("POCISAO DE data [ ] DO CODIGO ENVIADO");
Serial.println("|");
 for(i=41; i<45; i++)
 {
    Serial.print("pocisao: ");
    Serial.print(i);
    Serial.print("  caracter: ");
    Serial.println(data[i]);
  } */
Serial.println("|");
Serial.println("|");

strcpy (msg1, data);
strcpy (msg2, data);

//###########################
 for(i=0; i!=12; i++)
 {
  nremetente[i]=msg1[i];
 }
 nremetente[12]='\0';
 
//###########################

j=0;
i=0;
char codremetente[] = " ";
 
 for(i=41; i!=45; i++)
 {
    codremetente[j]=msg2[i];
    j++;
 }
 codremetente[5]='\0';
 
///###########################

 Serial.print("NUMERO DO REMETENTE: ");
 Serial.println(nremetente);
 Serial.print("CODIGO ENVIADO    : ");
 Serial.println(codremetente);
 Serial.println("|");
 Serial.println("|");
 
 if (!strcmp(nremetente, ncadastrado))
 {
    Serial.println("O REMETENTE E' IGUAL AO CADASTRADO");
    Serial.println("|"); 
 } else {
    Serial.println("O REMETENTE NAO IGUAL AO CADASTRADO");
    Serial.println("|");
    Serial.print("REMETENTE CADASTRADO  : ");
    Serial.println(ncadastrado);
    Serial.print("REMETENTE QUE ENVIOU  : ");
    Serial.println(nremetente);
    Serial.println("|");
    Serial.println("|");
    }
   
 if (!strcmp(codremetente, codcadastrado))
 {
    Serial.println("O CODIGO E' IGUAL AO CADASTRADO");
    Serial.println("|");
 } else {
    Serial.println("O CODIGO ENVIADO DIFERENTE DO CADASTRADO");
    Serial.println("|");
    Serial.print("CODIGO CADASTRADO: ");
    Serial.println(codcadastrado);
    Serial.print("CODIGO ENVIADO  : ");
    Serial.println(codremetente);
    Serial.println("|");
    Serial.println("|");
    }
   
Serial.println("----------------------------  F I M  ----------------------------");
delay(60000);

}
   
void enviasms()
{
  mySerial.println("AT+CIFSR");//executa comando
  delay(3000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado 
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();            //limpa buffer
 
  mySerial.println("AT+CSQ");//executa comando
  delay(3000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado 
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer(); 
   
  mySerial.println("at+cstt=\"zap.vivo.com.br\",\"vivo\",\"vivo\"");//executa comando
  delay(2000);              //espera
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("at+ciicr");//executa comando
  delay(5000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
   
  mySerial.println("at+cifsr");//executa comando
  delay(2000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
   
  mySerial.println("at+cdnscfg?");//executa comando
  delay(2000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("AT+CMGF=1\r");  //    Because we want to send the SMS in text mode
  delay(1000);
  mySerial.println("AT+CMGS=\"88014013\"\r");  // Setting for the SMS Message center number, 
  delay(1000);
  leserial();
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("mensagem de teste");  // Start accepting the text for the message
  delay(1000);
  mySerial.println((char)26);
  leserial();
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
}


 
/**********************************************************
Metodo splitstring
**********************************************************/
void splitString(char* data) {
      Serial.print("Data entered splitString: ");
      Serial.println(data);
        Serial.print("FIM Data entered splitString: ");
      char* parameter;
      parameter = strtok (data,",");
      while (parameter != NULL) {
            //PROXIMO_METODO_COMA_AÇÃO(parameter);
                Serial.println("parameter separado as partes");
                Serial.println(parameter);
            parameter = strtok (NULL,",");
}
}

/**********************************************************
Metodo para leitura da softserial
buffer maximo de (num_of_bytes) caracteres
**********************************************************/ 
void leserial()
{
  num_of_bytes = mySerial.available(); //Pega quantidade de bytes ques estao na serial
  while (mySerial.available() > 0)    //Espera de até Available ser true
  {
      for(n=0; n<num_of_bytes; n++)
      {
          comm_buf[n] = mySerial.read(); //armazena buffer e a cada mySerial.read carry on buffer interno
      }
  }
  mySerial.flush();              //limpa buffer de entrada da serial
}
 
/**********************************************************
Metodo para limpeza do buffer
**********************************************************/
void limpa_buffer()
{
  memset(comm_buf,'\0',BUF_LEN);
}

/**********************************************************
Method checks received bytes
compare_string - pointer to the string which should be find
return: 0 - string was NOT received
        1 - string was received
**********************************************************/
byte IsStringReceived(char const *compare_string)
{
  http://Serial.println("testando...");
  char *ch;
  byte ret_val = 0;

  if(1) {
    ch = strstr((char *)comm_buf, compare_string);
    if (ch != NULL)
    {
          Serial.println("existe Valor");
          ret_val = 1;
    }
  else
  {
  }
  }
  return (ret_val);
}





---------------------VALIDANDO MENSAGEM SMS ---------------------
|
|
NUMERO DO REMETENTE: 552488014013
CODIGO ENVIADO : 0001
|
|
O REMETENTE E' IGUAL AO CADASTRADO
|
O CODIGO ENVIADO DIFERENTE DO CADASTRADO
|
CODIGO CADASTRADO: 52488014013
CODIGO ENVIADO : 0001
|
|
Código:

santiago54321

Mensagens : 9
Data de inscrição : 14/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  evertondt em Dom 22 Jul - 16:52

Não consegui executar o código ,ficou um pouco confuso mas vou dar uma estudada nele aqui

santiago54321 escreveu:Prezados,

Estamos a um passo, ja estou recebendo sms separando o remetente e separando a mensagem enviada (mensagem enviada tem que 4 digitos Ex:0001)

O problema é que a variavel que guarda o código muda de valor sózinho no meio do programa, a variavel "codcadastrado" muda de "0001" para "52488014013".

Segue o código e o resultado dele:


Código:
#include <SoftwareSerial.h>
#include <String.h>
 
SoftwareSerial mySerial(4, 5);

#define BUF_LEN  84

int statuspin = 4;
int pinState = 0;
int x,y,i,j;
char ncadastrado[] = "552488014013";
char nremetente[] = "";

char codcadastrado[] = "0001";
char codremetente[] = "";

const int MAXDATA1 = 256;
const int MAXDATA2= 256;
char msg1[MAXDATA1];
char msg2[MAXDATA2];

const int MAXDATA = 256;
char data [MAXDATA];

void setup()
{
  pinMode(statuspin, INPUT);
  pinMode(9, OUTPUT);
  mySerial.begin(9600);              // the GPRS baud rate 
  Serial.begin(9600);                // the GPRS baud rate
}

byte num_of_bytes;
byte retorno;
char comm_buf[256];
byte n;

void loop()
{
  if(Serial.available())
    {
      mySerial.print((unsigned char)Serial.read());
    } 
    else  if(mySerial.available())
    {
      Serial.print((unsigned char)mySerial.read());
    }

    poweron();
 
  //enviasms();
    lesms();
    validasms();
   
    if (y==0)
    {
  //enviasms();
  http://mySerial.println("AT+CMGD=1");
    y=1;
    }
   
 


void poweron()
{
  pinState = digitalRead(statuspin);
  if(pinState==LOW)
  {
  Serial.println("estou ligando...");
  digitalWrite(9,HIGH);
  delay(2000);
  digitalWrite(9,LOW);
  delay(3000);
  }
 
}

void lesms()
{
 
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("--------------------------  LENDO SMS  --------------------------");
  Serial.println("|");
  Serial.println("|");
 
  mySerial.println("AT+CMGR=1"); //Reads the first SMS
  mySerial.flush();
  for (x=0;x < 255;x++){
    data[x]='\0';
  }
  x=0;
  do{
        while(mySerial.available()==0);
        data[x]=mySerial.read();
        x++;
        //if(data[x-1]==0x0D&&data[x-2]=='"'){ // remove o cabeçalho +CMGR: "REC READ","xxxx","","12/05/21,12:21:43-12"
          //x=0;
        //}
        if(data[x-1]=='+'&&data[x-2]=='"'){ // remove o cabeçalho +CMGR: "REC READ","xxxx","","12/05/21,12:21:43-12"
          x=0;
        }
      }
  //while(!(data[x-1]=='K'&&data[x-2]=='O')); // enquanto não encontrar o ok não para
  while(!(data[x-1]=='K'&&data[x-2]=='O')); // enquanto não encontrar o ok não para
  data[x-3]='\0'; //finish the string before the OK
  Serial.println(data); //shows the message
  //splitString(data);
  delay(2000);
  Serial.println("|");
  Serial.println("|");
  Serial.println("----------------------------  F I M  ----------------------------");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");
  Serial.println("|");

 
}

void validasms()
{
 j=0;
 i=0;
Serial.println("---------------------VALIDANDO MENSAGEM SMS ---------------------");//executa comando
/*
Serial.println("|");
Serial.println("|");
Serial.println("POCISAO DE data [ ] DO REMETENTE QUE ENVIOU");
Serial.println("|");
 for(i=0; i<12; i++)
 {
    Serial.print("pocisao: ");
    Serial.print(i);
    Serial.print("  caracter: ");
    Serial.println(data[i]);
  }

Serial.println("|");
Serial.println("|");

Serial.println("POCISAO DE data [ ] DO CODIGO ENVIADO");
Serial.println("|");
 for(i=41; i<45; i++)
 {
    Serial.print("pocisao: ");
    Serial.print(i);
    Serial.print("  caracter: ");
    Serial.println(data[i]);
  } */
Serial.println("|");
Serial.println("|");

strcpy (msg1, data);
strcpy (msg2, data);

//###########################
 for(i=0; i!=12; i++)
 {
  nremetente[i]=msg1[i];
 }
 nremetente[12]='\0';
 
//###########################

j=0;
i=0;
char codremetente[] = " ";
 
 for(i=41; i!=45; i++)
 {
    codremetente[j]=msg2[i];
    j++;
 }
 codremetente[5]='\0';
 
///###########################

 Serial.print("NUMERO DO REMETENTE: ");
 Serial.println(nremetente);
 Serial.print("CODIGO ENVIADO    : ");
 Serial.println(codremetente);
 Serial.println("|");
 Serial.println("|");
 
 if (!strcmp(nremetente, ncadastrado))
 {
    Serial.println("O REMETENTE E' IGUAL AO CADASTRADO");
    Serial.println("|"); 
 } else {
    Serial.println("O REMETENTE NAO IGUAL AO CADASTRADO");
    Serial.println("|");
    Serial.print("REMETENTE CADASTRADO  : ");
    Serial.println(ncadastrado);
    Serial.print("REMETENTE QUE ENVIOU  : ");
    Serial.println(nremetente);
    Serial.println("|");
    Serial.println("|");
    }
   
 if (!strcmp(codremetente, codcadastrado))
 {
    Serial.println("O CODIGO E' IGUAL AO CADASTRADO");
    Serial.println("|");
 } else {
    Serial.println("O CODIGO ENVIADO DIFERENTE DO CADASTRADO");
    Serial.println("|");
    Serial.print("CODIGO CADASTRADO: ");
    Serial.println(codcadastrado);
    Serial.print("CODIGO ENVIADO  : ");
    Serial.println(codremetente);
    Serial.println("|");
    Serial.println("|");
    }
   
Serial.println("----------------------------  F I M  ----------------------------");
delay(60000);

}
   
void enviasms()
{
  mySerial.println("AT+CIFSR");//executa comando
  delay(3000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado 
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();            //limpa buffer
 
  mySerial.println("AT+CSQ");//executa comando
  delay(3000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado 
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer(); 
   
  mySerial.println("at+cstt=\"zap.vivo.com.br\",\"vivo\",\"vivo\"");//executa comando
  delay(2000);              //espera
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("at+ciicr");//executa comando
  delay(5000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
   
  mySerial.println("at+cifsr");//executa comando
  delay(2000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
   
  mySerial.println("at+cdnscfg?");//executa comando
  delay(2000);              //espera resultado na serial
  leserial();                //processa dados e armazena no buffer
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("AT+CMGF=1\r");  //    Because we want to send the SMS in text mode
  delay(1000);
  mySerial.println("AT+CMGS=\"88014013\"\r");  // Setting for the SMS Message center number, 
  delay(1000);
  leserial();
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
 
  mySerial.println("mensagem de teste");  // Start accepting the text for the message
  delay(1000);
  mySerial.println((char)26);
  leserial();
  Serial.println(comm_buf);  //mostra retorno real
  limpa_buffer();
}


 
/**********************************************************
Metodo splitstring
**********************************************************/
void splitString(char* data) {
      Serial.print("Data entered splitString: ");
      Serial.println(data);
        Serial.print("FIM Data entered splitString: ");
      char* parameter;
      parameter = strtok (data,",");
      while (parameter != NULL) {
            //PROXIMO_METODO_COMA_AÇÃO(parameter);
                Serial.println("parameter separado as partes");
                Serial.println(parameter);
            parameter = strtok (NULL,",");
}
}

/**********************************************************
Metodo para leitura da softserial
buffer maximo de (num_of_bytes) caracteres
**********************************************************/ 
void leserial()
{
  num_of_bytes = mySerial.available(); //Pega quantidade de bytes ques estao na serial
  while (mySerial.available() > 0)    //Espera de até Available ser true
  {
      for(n=0; n<num_of_bytes; n++)
      {
          comm_buf[n] = mySerial.read(); //armazena buffer e a cada mySerial.read carry on buffer interno
      }
  }
  mySerial.flush();              //limpa buffer de entrada da serial
}
 
/**********************************************************
Metodo para limpeza do buffer
**********************************************************/
void limpa_buffer()
{
  memset(comm_buf,'\0',BUF_LEN);
}

/**********************************************************
Method checks received bytes
compare_string - pointer to the string which should be find
return: 0 - string was NOT received
        1 - string was received
**********************************************************/
byte IsStringReceived(char const *compare_string)
{
  http://Serial.println("testando...");
  char *ch;
  byte ret_val = 0;

  if(1) {
    ch = strstr((char *)comm_buf, compare_string);
    if (ch != NULL)
    {
          Serial.println("existe Valor");
          ret_val = 1;
    }
  else
  {
  }
  }
  return (ret_val);
}





---------------------VALIDANDO MENSAGEM SMS ---------------------
|
|
NUMERO DO REMETENTE: 552488014013
CODIGO ENVIADO : 0001
|
|
O REMETENTE E' IGUAL AO CADASTRADO
|
O CODIGO ENVIADO DIFERENTE DO CADASTRADO
|
CODIGO CADASTRADO: 52488014013
CODIGO ENVIADO : 0001
|
|
Código:

evertondt

Mensagens : 12
Data de inscrição : 13/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Evento novo SMS

Mensagem  decionovaes em Sex 29 Mar - 6:13

Alguém já conseguiu capturar o evento do SIM908 quando ele recebe um novo SMS? Deveria chegar na serial :+CMTI: "SM",1. Quando envio um SMS para o shield, nada acontece, mas se mando um comando AT qualquer para o shield pela serial, recebo essa resposta. Já testaram essas soluções com o Arduino+ shield 908 desligados do computador?

decionovaes

Mensagens : 4
Data de inscrição : 16/03/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  Bruno Rafael em Sab 13 Abr - 11:06

logo logo vou comprar meu SIM908 e vou começar a trabalhar nisso também!

Bruno Rafael

Mensagens : 22
Data de inscrição : 17/03/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  Bruno Rafael em Seg 26 Ago - 12:22

Galera, estou trabalhando em algo parecido e cheguei a este código que funciona bem:
Postarei só o trecho que realmente interessa a quem quer desmembrar um SMS que recebido.


#define TAM 75
char dados[TAM] = " ";
byte contador;
String sms;

Serial2.println("AT+CMGR=1");
     delay(2000);
     if(Serial2.available() > TAM) {
         for (contador = 0; contador < TAM; contador++)
         {
         dados[contador] = Serial2.read();        
         }
         }
     
     sms = dados;
     sms = sms.substring(70,74); //função muito útil. é só vc determinar quais 'pontos' da string vc quer que ele recorta.



Espero ter ajudado!
Lembrando que estou usando SIM908 + Mega!!!

Bruno Rafael

Mensagens : 22
Data de inscrição : 17/03/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

AJUDA...

Mensagem  americo em Ter 15 Out - 15:38

Estou acompanhando o trabalho de vcs para tentar fazer com que esse programa funcione direitinho, e estou tentando testar o que vcs já fizeram!!!
mas não consigo enviar SMS, gostaria de saber se vcs estão enviando pelo serial monitor ou usando aquele hyperterminal para fazerem os teste ???

Se puderem me ajudar em outra coisa ficaria grato, alguem tem um código pra mim só enviar uma sms para um celuar, dizendo : funcionou, por exemplo. E se sim uso o serial monitor ou o hyperterminal !!!

estou com muita duvida msm, na vdd estou meio perdido!!! se alguem ai puder me ajudar com isso ficaria mt grato

americo

Mensagens : 7
Data de inscrição : 27/08/2013
Idade : 26
Localização : Maringá - Pr

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Arduino esquentando demais

Mensagem  zenetos em Sex 1 Nov - 10:24

Fala ae pessoal, estou coma dúvida aqui em relação ao temperatura do Arduino, pois na parte traseira posterior entre o plug da fonte e o plug da USB, fica uma temperatura elevadíssima!

Estou utilizando um Arduino Mega R3, com Gsm/Gprs Shield Sim900d, comprado no próprio site do projeto arduino.

Isso é normal?

zenetos

Mensagens : 2
Data de inscrição : 26/10/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  Admin em Qua 6 Nov - 7:37

Normal aquecer um pouco o ams1117 mas não ficar a uma temperatura elevadissima
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum