Go Down

Topic: GSM Shield (Read 101 times) previous topic - next topic

ruivotuga

Olá pessoal.

estou com um problema na programação das minhas necessidades e gostava de alguma ajuda se possível.

o que se passa: estou a montar um "sistema" por SMS em que o arduino comunica uma informação e gostaria que ele parasse até receber um SMS meu para continuar e que o meu número fosse o único autorizado. Isto porque quando ele obtêm a informação de uma fonte, continua a enviar SMS até a mesma fonte voltar ao estado "normal". Tenho um tempo defenido para o envio do SMS através do Arduino, mas passado esse tempo, ele reenvia o SMS.
A solução a meu ver, passa ou por um SMS a mandar parar ou alguma coisa na programação que diga ao Arduino para não voltar a ler aquele contacto até ele mudar de estado.
Vou deixar aqui embaixo o código que compilei até agora.

Obrigado!

#define ledVerm 13
 


 #include <SimpleTimer.h>
 #include <SoftwareSerial.h>
 SoftwareSerial SIM900(7, 8);

 
 int valor = 12;
 
 char incoming_char=0;
 int salir = 0;
 void setup()
    {

 pinMode(valor, INPUT);
 pinMode(ledVerm, OUTPUT);
 digitalWrite(valor, LOW);
 
 
 SIM900.begin(19200);
 delay(20000);
 Serial.begin(19200);
 Serial.println("Arranque Arduino e Modulo GSM com sucesso.");

 
 // MENSAGEM DE INÍCIO DE PROGRAMA CORRECTO
 
 SIM900.print("AT+CMGF=1\r");
 delay(100);
 SIM900.println("AT+CMGS=\"+351*********\""); internacional
 delay(100);
 SIM900.println("HELLO WORLD. Boot com sucesso de Arduino e GSM900.");
 delay(100);
 SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26
 delay(100);
 SIM900.println();
 delay(5000);
 Serial.println("SMS enviada com sucesso.");
 delay(100);
 SIM900.println("AT+CMGS=\"+351*********\"");
 delay(100);
 SIM900.println("*******************************"); // Mensagem a enviar
 delay(100);
 SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26
 delay(100);
 SIM900.println();
 //delay(5000);
 Serial.println("SMS enviada com sucesso.");
 

     }
 
 void loop()

 //FUNÇÃO PARA MANDAR SMS DE NÍVEL BAIXO

    {
    delay(100);
    valor = digitalRead(12);
    if (valor != LOW)
    {
   
     
  Serial.println("Nivel alto!");

 digitalWrite(ledVerm, HIGH);
 
 SIM900.print("AT+CMGF=1\r");
 delay(100);
 SIM900.println("AT+CMGS=\"+351*********\"");
 delay(100);
 SIM900.println("******************************"); // message to send
 delay(100);
 SIM900.println((char)26);
 delay(5000);
 SIM900.println();
 Serial.println("SMS URGENCIA ENVIADA.");
   
  delay(100);
  Serial.println("A aguardar reposicao de nivel");
  digitalWrite(ledVerm, HIGH);
  //while (valor != LOW)
  //{delay(500);


 
  }

  {
    delay(100);
    valor = digitalRead(12);
    if (valor != HIGH)
    digitalWrite(ledVerm, LOW);
    Serial.println("Nivel normal");
    delay(10000);
   
 


 
 
  }}

 // FIM DE PROGRAMA

bubulindo

Tu precisas de detectar o flanco e enviar uma mensagem quando  osinal mudar de estado e não enquanto estiver num certo estado.

Pesquisa nos meus posts que vais ver pelo menos um ou dois posts recentes com uma solução para isto.
This... is a hobby.

ruivotuga

Obrigado pela ajuda no meu problema.

Estive a dar uma espreitadela aos teus posts, e o que encontrei lá foi isto, que até era uma questão posta por mim, mas que não consegui implementar no código, devido à minha falta de conhecimentos.

Isso porque não consigo agora fazer intercalar este código com o meu, como dizer a ele que é o pino 12 que dá a informação?

já tentei #define 12, int 12 e dá sempre erro....


//fora da loop...
unsigned char botaoAntes = 0;
unsigned char botao = 0;

//dentro da loop...

botao = digitalRead(pinoBotao);

if ((botao == 1) && (botao != botaoAntes)) {//contacto activou e anteriormente o botao nao estava activo.
   //mete aqui o teu codigo de envio de mensagem.

}
botaoAntes = botao;

bubulindo

porque não adicionar esta linha em vez do que estavas a tentar fazer?

Code: [Select]
const unsigned int pinoBotao = 12;

Eu não indico os pinos a utilizar porque regra geral as pessoas já sabem os pinos e já viram exemplos de como a digitalRead funciona para perceber o resto.

Vê se funciona e dá notícias.
This... is a hobby.

Go Up