Go Down

Topic: Cadastrar números de telefones p/ execução de comando (Read 749 times) previous topic - next topic

AlencarMuchon

Olá Pessoal,
Estou desenvolvendo um projeto com arduino duemilanove e shield sim900D.É o acionamento de um portão elétrico via sms e o protótipo manda outro sms com a confirmação do comando.
Já está quase tudo pronto no projeto, porém gostaria de obter ajuda quanto à seguinte questão:
Necessito cadastrar alguns números de telefone para que apenas esses números executem os comandos, e caso o nº não esteja cadastrado informar o acesso negado no monitor.
Segue abaixo o código que estou utilizando:



#include <GSM.h>

#define PINNUMBER ""

GSM gsmAccess;
GSM_SMS sms;

int powerkey =  5;
int statuspin = 6;
int pinState = 0;

String inputString = "";
char senderNumber[20];
int led1 = 13;
int led2 = 12;
char c;
boolean notConnected = true;

void setup()
{
 inputString.reserve(200);
     pinMode(powerkey, OUTPUT);
     pinMode(statuspin, INPUT);
     pinMode(pinState, INPUT);
     
     
     Serial.begin(9600);
     Serial.println("Serial Conectada");
     pinState = digitalRead(statuspin);
 
 if(pinState==LOW){
 digitalWrite(powerkey, HIGH);   // set the LED on
 delay(2000);
 digitalWrite(powerkey, LOW);
}
     while(notConnected)
 {
   if(gsmAccess.begin(PINNUMBER,false)==GSM_READY)
   {
     notConnected = false;
     Serial.println("rede localizada");
   }
   else
   {
     Serial.println("Não conectado");
     delay(100);
  //pinState = LOW;  
   }
 }
  pinMode(led1, OUTPUT);
     digitalWrite(led1, LOW);
     pinMode(led2, OUTPUT);
     digitalWrite(led2, LOW);

 Serial.println("Aguardando novas mensagens");
}

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

 // If there are any SMSs available()  
 if (sms.available())
 {
   Serial.println("Mensagem recebida de:");
   sms.remoteNumber(senderNumber, 20);
   Serial.println(senderNumber);
   if(sms.peek()=='A')
   {
     digitalWrite(led2, LOW);
     digitalWrite(led1, HIGH);
     Serial.println("Portao Aberto");
     if(digitalRead(led2)==LOW&&(led1)==HIGH);
     {
     Serial.println("Confirma Portao aberto");
    sms.beginSMS(senderNumber);
    sms.print("Portao Aberto");
    sms.endSMS();
     }
   
   }
   else if (sms.peek()=='F')
   {
     digitalWrite(led1, LOW);
     digitalWrite(led2, HIGH);
     Serial.println("Portao fechado");
   
     if(digitalRead(led1)==LOW&&(led2)==HIGH);
     
     {
     Serial.println("Confirma portao fechado");
    sms.beginSMS(senderNumber);
    sms.print("portao fechado");
    sms.endSMS();
     }
   }
   // Read message bytes and print them
   while(c=sms.read())
     Serial.print(c);
     
   Serial.println("\nFIM DA MENSAGEM");
   sms.flush();
   Serial.println("MENSAGEM APAGADA");
   Serial.println("\nCOMPLETO!\n");
sms.flush();
 } //Fim da verificação de mensagens
 delay(100);

}


Se alguém puder dar alguma dica, ficarei muito agradecido.
Abraço

Alencar

bubulindo

Não vi um único ponto de exclamacão no teu post... qual é a tua dúvida em concreto?
This... is a hobby.

AlencarMuchon

Olá,
Na verdade o código da maneira que está já funciona.
Só que eu gostaria de acrescentar alguns números como permitidos para executar os comandos e não sei como fazer.

Nesta parte o programa verifica se tem sms e imprime no monitor
if (sms.available())
  {
    Serial.println("Mensagem recebida de:");
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);
//talvez seja possível criar uma outra condição neste ponto para verificar  se o número que enviou o sms tem permissão para executar os comandos que estão a seguir.
Só que antes disso acredito que tenho que colocar o(s) Número(s) que eu quero que tenha permissão, mas também não sei como fazer isso.

Até +
   

bubulindo

Crias uma variável com os numeros... e comparas.
Se o numero recebido for uma string, usas a strcmp().

Code: [Select]
if(senderNumber == 933456789) {
            Serial.print("numero autorizado");
            // faz o resto...
            }
This... is a hobby.

hugo007

A uns meses atraz tambem fiz um projecto que faz de alarme e controlador GSM com reles
Eu fazia assim

Code: [Select]

char authorizedNumber[] = {"+351966666666"};
...
if (strcmp(*messageBody, "Alarme1")  == 0 && strcmp(*senderID, authorizedNumber) == 0)
   {
    writeAlarmStatus(1);
    lcd.setCursor(1,3);
    lcd.print("Alarme Activado");
    digitalWrite(alarmLED,HIGH);
   }



Olhando assim de repente para o teu codigo uma coisa que nao gosto de ver é usares Strings.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

Go Up