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;
}
}
}
}
Tags:
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por