Bom dia!
Srs. sou novato nesta área e estou tentando fazer a comunicação entre dois Arduínos (Arduino Mega emissor e Arduino Uno receptor) para desenvolver um projeto na área industrial. A idéia é a seguinte: tenho vários motores instalados em uma fábrica, estes motores possuem contatos auxiliares de alarme para informar quando um motor entrar em sobrecarga. 
Gostaria que o Arduíno Mega/Emissor recebesse o sinal (5V) destes contatos e me enviasse uma SMS informando que o motor está desarmado. 

A idéia básica é a seguinte:

No Emissor:

Eu recebo o sinal de 5V no pino 22 do arduino mega, por exemplo, recebendo este sinal eu escrevo na serial o valor "A".

Eu recebo o sinal de 5V no pino 23 do arduino mega, por exemplo, recebendo este sinal eu escrevo na serial o valor "B". Eassim sucessivamente.

No receptor (Arduíno Uno + Shield SIM 900 ICOMSAT 1.1):

No receptor eu leio o que está escrito na serial e faço meu comando.

Se ler o caracter 'A' na serial, envia SMS "M1 DESARMADO".

Se ler o caracter 'B' na serial, envia SMS "M2 DESARMADO".

O problemas destes códigos é que fica enviando SMS sem parar.


Vcs poderiam me dar uma luz para este caso? 

Segue abaixo os códigos:

//Arduino Mega (emissor)

byte contatoM1=22; //define o contato do motor M1
byte contatoM2=23; //define o contato do motor M2
byte contatoM3=24; //define o contato do motor M3
byte contatoM4=25; //define o contato do motor M4
byte contatoM5=26; //define o contato do motor M5
byte contatoM6=27; //define o contato do motor M6
byte contatoM7=28; //define o contato do motor M7
byte contatoM8=29; //define o contato do motor M8
byte contatoM9=30; //define o contato do motor M9
byte contatoM10=31;//define o contato do motor M10
byte contatoM11=32; //define o contato do motor M11
byte contatoM12=33; //define o contato do motor M12
byte contatoM13=34; //define o contato do motor M13
byte contatoM14=35; //define o contato do motor M14
byte contatoM15=36; //define o contato do motor M15
byte contatoM16=37; //define o contato do motor M16
byte contatoM17=38;//define o contato do motor M17
byte A, B, C, D, E,F, G,H,I,J,L,M,N,O,Q,R,S;
boolean enviouA, enviouB,enviouC, enviouD,enviouE, enviouF,enviouG, enviouH,enviouI, enviouJ,enviouL, enviouM,enviouN, enviouO,enviouQ, enviouR,enviouS=false; // flags booleanas
byte tx=1; // define o pino de saída Serial

boolean tempodecorte()
{
static unsigned long last_interrupt_time = 0; // define o tempo de referencia como zero
unsigned long interrupt_time = millis(); // comeca a contagem do tempo

if(interrupt_time - last_interrupt_time > 5000) // aplica a condição tempo de contagem maior que 5 s do que o tempo de referencia
{
last_interrupt_time = interrupt_time; // se a condicao é satisfeita redefine o tempo de referencia como o tempo de contagem
return true; // e contabiliza o voto
}
return false; // se nao, nao contabiliza o voto
}

void setup() {
Serial.begin(9600); // inicializa o Serial com 9600 bauds
pinMode(contatoM1, INPUT);
pinMode(contatoM2, INPUT);
pinMode(contatoM3, INPUT);
pinMode(contatoM4, INPUT);
pinMode(contatoM5, INPUT);
pinMode(contatoM6, INPUT);
pinMode(contatoM7, INPUT);
pinMode(contatoM8, INPUT);
pinMode(contatoM9, INPUT);
pinMode(contatoM10, INPUT);
pinMode(contatoM11, INPUT);
pinMode(contatoM12, INPUT);
pinMode(contatoM13, INPUT);
pinMode(contatoM14, INPUT);
pinMode(contatoM15, INPUT);
pinMode(contatoM16, INPUT);
pinMode(contatoM17, INPUT);
pinMode(tx,OUTPUT);
digitalWrite(tx,HIGH); // "liga" o pino de saída Serial
}

void loop() {
A=digitalRead(contatoM1);
B=digitalRead(contatoM2);
C=digitalRead(contatoM3);
D=digitalRead(contatoM4);
E=digitalRead(contatoM5);
F=digitalRead(contatoM6);
G=digitalRead(contatoM7);
H=digitalRead(contatoM8);
I=digitalRead(contatoM9);
J=digitalRead(contatoM10);
L=digitalRead(contatoM11);
M=digitalRead(contatoM12);
N=digitalRead(contatoM13);
O=digitalRead(contatoM14);
Q=digitalRead(contatoM15);
R=digitalRead(contatoM16);
S=digitalRead(contatoM17);
if(tempodecorte()){ // chama funcao para o tempo em que o botao deve ser pressionado para ser considerado um voto

if(A==HIGH && enviouA == false){
Serial.write('A'); // armazena A no Serial
enviouA = true;
delay(5000);
}
if(A==LOW){
// se mudou o valor de A, altera a flag para quando mudar novamente ele enviar
enviouA = false;
}

// o if do B não deve ter nada a ver com o A, pois são motores diferentes
if(B==HIGH && enviouB == false){
Serial.write('B'); // armazena B no Serial
enviouB = true;
delay(5000);
}
if(B==LOW){
enviouB = false;
}


if(C==HIGH && enviouC == false){
Serial.write('C'); // armazena C no Serial
enviouC = true;
delay(5000);
}
if(C==LOW){
enviouC = false;
}


if(D==HIGH && enviouD == false){
Serial.write('D'); // armazena D no Serial
enviouD = true;
delay(5000);
}
if(D==LOW){
enviouD = false;
}

if(E==HIGH && enviouE == false){
Serial.write('E'); // armazena E no Serial
enviouE = true;
delay(5000);
}
if(E==LOW){
enviouE = false;
}


if(F==HIGH && enviouF == false){
Serial.write('F'); // armazena F no Serial
enviouF = true;
delay(5000);
}
if(F==LOW){
enviouF = false;
}

if(G==HIGH && enviouG == false){
Serial.write('G'); // armazena G no Serial
enviouG = true;
delay(5000);
}
if(G==LOW){
enviouG = false;
}

if(H==HIGH && enviouH == false){
Serial.write('H'); // armazena H no Serial
enviouH = true;
delay(5000);
}
if(H==LOW){
enviouH = false;
}

if(I==HIGH && enviouI == false){
Serial.write('I'); // armazena I no Serial
enviouI = true;
delay(5000);
}
if(I==LOW){
enviouI = false;
}

if(J==HIGH && enviouJ == false){
Serial.write('J'); // armazena J no Serial
enviouJ = true;
delay(5000);
}
if(J==LOW){
enviouJ = false;
}

if(L==HIGH && enviouL == false){
Serial.write('L'); // armazena L no Serial
enviouL = true;
delay(5000);
}
if(L==LOW){
enviouL = false;
}

if(M==HIGH && enviouM == false){
Serial.write('M'); // armazena M no Serial
enviouM = true;
delay(5000);
}
if(M==LOW){
enviouM = false;
}

if(N==HIGH && enviouN == false){
Serial.write('N'); // armazena N no Serial
enviouN = true;
delay(5000);
}
if(N==LOW){
enviouN = false;
}

if(O==HIGH && enviouO == false){
Serial.write('O'); // armazena O no Serial
enviouO = true;
delay(5000);
}
if(O==LOW){
enviouO = false;
}

if(Q==HIGH && enviouQ == false){
Serial.write('Q'); // armazena Q no Serial
enviouQ = true;
delay(5000);
}
if(Q==LOW){
enviouQ = false;
}

if(R==HIGH && enviouR == false){
Serial.write('R'); // armazena R no Serial
enviouR = true;
delay(5000);
}
if(R==LOW){
enviouR = false;
}

if(S==HIGH && enviouS == false){
Serial.write('S'); // armazena S no Serial
enviouS = true;
delay(5000);
}
if(S==LOW){
enviouS = false;
}



}


}

//Receptor (Arduíno Uno + Shield SIM 900 ICOMSAT 1.1)

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "GSM.h"
SMSGSM sms;
boolean started=false;
byte rx=0;
char x=0;

int pinState = 0;
int powerkey = 9; 
int statuspin = 4;

void setup() 
{
Serial.begin(9600); 
pinMode(rx,INPUT); 
pinMode(statuspin, INPUT);
pinMode(pinState, INPUT);
pinMode(powerkey, OUTPUT);
pinState = digitalRead(statuspin);
 if(pinState==LOW){
 digitalWrite(powerkey, HIGH);   
 delay(2000);
 digitalWrite(powerkey, LOW);
  delay(2000);
}

  Serial.println("GSM Shield testing.");

  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;  
    
  }
  else Serial.println("\nstatus=IDLE");  
 }

void loop() {    

if(Serial.available())


x  = Serial.read(); 
{  
 if (x =='A'){
        sms.SendSMS("+559888021164", "M1 DESARMADO");        
        delay(5000);
   }
   
  if (x =='B'){
        sms.SendSMS("+559888021164", "M2 DESARMADO");         
         delay(5000);            
   }
  
      if (x =='C'){
        sms.SendSMS("+559888021164", "M3 DESARMADO");         
         delay(5000);
   }  
   
    if (x =='D'){
        sms.SendSMS("+559888021164", "M4 DESARMADO");         
        delay(5000);            
   }  
   
    if (x =='E'){
        sms.SendSMS("+559888021164", "M5 DESARMADO");         
        delay(5000);       
       
   } 
   
    if (x =='F'){
        sms.SendSMS("+559888021164", "M6 DESARMADO");         
        delay(5000);          
   } 
       
    if (x =='G'){
        sms.SendSMS("+559888021164", "M7 DESARMADO");        
        delay(5000);           
   }      
   
    if (x =='H'){
        sms.SendSMS("+559888021164", "M8 DESARMADO");         
         delay(5000);
  }
          
    if (x =='I'){
        sms.SendSMS("+559888021164", "M9 DESARMADO");         
         delay(5000);             
   }
     
    if (x =='J'){
        sms.SendSMS("+559888021164", "M10 DESARMADO");       
        delay(5000);              
   }    
   
    if (x =='L'){
        sms.SendSMS("+559888021164", "M11 DESARMADO");       
        delay(5000);            
   }    
   
    if (x =='M'){
        sms.SendSMS("+559888021164", "M12 DESARMADO");         
         delay(5000);           
   }
     
    if (x =='N'){
        sms.SendSMS("+559888021164", "M13 DESARMADO");        
        delay(5000);           
   }  
   
    if (x =='O'){
        sms.SendSMS("+559888021164", "M14 DESARMADO");         
         delay(5000);           
   }
         
    if (x =='Q'){
        sms.SendSMS("+559888021164", "M15 DESARMADO");        
        delay(5000);            
   }    
   
    if (x =='R'){
        sms.SendSMS("+559888021164", "M16 DESARMADO");         
         delay(5000);            
   }
      
    if (x =='S'){
        sms.SendSMS("+559888021164", "M17 DESARMADO");       
        delay(5000);
            
   }
   else{
     x=0;
   }          
}
}
}

Exibições: 460

Responder esta

Respostas a este tópico

Bom, vou estudar seu codigo direitinho pois recebi ontem um equipamento igual.

Minha proposta é um pouco diferente mas de qualquer forma tenho que conhecer melhor o gsm shield.

Ok Sidney, se tiver alguma dúvida que eu possa ajudar, estou à sua disposição para trocarmos conhecimento.

Grande abraço!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço