Olá Pessoal, tudo bem?
Seguinte, tenho uma dúvida de iniciante.
Eu estou fazendo um projeto que consiste no seguinte:
recebo mensagens de sensores e controles por RAIO FREQUÊNCIA. Dependendo da lógica, liga uma sirene por meio de um RELE, ou desliga a sirene.
Acontece que, SEM A CARGA (SIRENE) o relé funciona NORMALMENTE, desliga quando tem que desligar, e liga quando tem que ligar.
Quando coloco a carga, ele NÃO DESLIGA, parece que ele TRAVA.
O que pode ser?
Meu codigo:
//----------- Adiciona as bibliotecas do projeto ----------
#include <VirtualWire.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch(); //Define a função para recepção dos dados do controle e dos sensores
//Definindo as variáveis de controle de estado dos sensores e botões
char A = 0;
char B = 0;
char C = 0;
char O = 0;
char I = 0;
char C_1 = 0;
char D = 0;
//----------- Declarações para Acionar a sirene ----------
const byte rele = 8;
int val, i=1;
boolean ligado=false;
//----------- Abre função de configuração do arduino ----------
void setup()
{
Serial.begin(9600); //Define Baudrate
mySwitch.enableReceive(0); //Receiver on interrupt 0 => that is pin #2
vw_set_tx_pin(3); //Define o botão 3 como botão de envio para o arduino
vw_setup(9600); //Bits per sec
//----------- CONFIGURAÇÃO DO RELÉ PARA ACIONAR SIRENE ----------
pinMode(rele,OUTPUT);
digitalWrite(8, HIGH);
}
//----------- FUNÇÃO PRINCIPAL ----------
void loop()
{
//Caso tenha algum dado na porta de recepção serial, entra
if (mySwitch.available())
{
Serial.println(mySwitch.getReceivedValue());//Imprime no monitor serial os dados recebidos
if (mySwitch.getReceivedValue()==1638818) //Se for o Botão A do controle, entra
{
send("a"); //Envia "a" para o ARM para avisar que o alarme está ligado
A=1; //Estado lógico do botão A é ativo, entra em modo ativo o alarme
B=0; //Botão B está desabilitado
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()==16736113) //Se for o botão B do controle, entra
{
send("b"); //Envia "b" para o ARM para avisar que o alarme está desligado
B=1; //Estado Lógico do botão B é ativo, entra em modo repouso o alarme
A=0; //Botão A está desabilitado
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()==21631301) //Se a porta estiver aberta, entra
{
send("o"); //Envia "o" para o ARM para avisar que a porta está aberta
O=1; //Estado lógico é confirmado para que a porta está aberta
C=0; //se a porta está aberta, não está fechada
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()==21631317) //Se a porta estiver fechada entra
{
if(A==0)
{
send("c"); //Envia "c" para o ARM para avisar que a porta está fechada
C=1; //Estado lógico é confirmado para que a porta está fechada
O=0; //se a porta está fechada, não está aberta
}
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()==191424437) //Se o sensor infravermelho tiver ativo, entra
{
send("i"); //Envia "i" para o ARM para avisar que alguem esta no ambiente
I=1; //Estado lógico é confirmado para que tem alguém no ambiente
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()=='d') //Se receber "desliga" do ARM, entra
{
B=1; //Estado Lógico do botão B é ativo, entra em modo repouso o alarme
A=0; //Botão A está desabilitado
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()=='l') //Se receber "liga" do ARM, entra
{
B=0; //Botão B está desabilitado
A=1; //Estado lógico do botão A é ativo, entra em modo ativo o alarme
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()=='p') //Se receber "porta aberta" do ARM, entra
{
O=1; //Estado lógico é confirmado para que a porta está aberta
C=0; //se a porta está aberta, não está fechada
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()=='i') //Se receber "infravermelho" do ARM, entra
{
if(A==1)
{
if(C_1!=1)
{
send("i");
I=1; //Estado lógico é confirmado para que tem alguém no ambiente
delay(1000); //Aguarda 1 segundo dentro do loop
C_1 = 0;
}
}
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
else
if(mySwitch.getReceivedValue()==16736120) //Se receber "infravermelho" do ARM, entra
{
C_1=1; //Botão C pressionado, nao ativa alarme infravermelho
delay(1000); //Aguarda 1 segundo dentro do loop
mySwitch.resetAvailable(); //Reinicia a função de entrada
}
}
//----------- CONDIÇÃO PARA LIGAR SIRENE ----------
if(A==1) //Se o alarme está ligado, começa o monitoramento
{
if(O==1) //Porta aberta enquanto o monitoramento está ativo, então aciona a sirene
{
//----------- LIGA A SIRENE DO ALARME ----------
digitalWrite(rele,LOW); //Liga a Sirene
delay(2000); //Depois de 2 segundos
A=0;
O=0;
}
else
if(I==1) //Sensor infravermelho viu alguem
{
if(C_1==0)
{
//----------- LIGA A SIRENE DO ALARME ----------
digitalWrite(rele,LOW); //Liga a Sirene
delay(2000); //Depois de 2 segundos
I=0;
A=0;
}
}
}
else
if(B==1) //Botão B ativo, desliga tudo
{
O=0;
I=0; //Garante que o infravermelho está em estado lógico desligado
C_1=0;
digitalWrite(rele,HIGH); //Desliga a Sirene
delay(2000); //Espera 2 segundos para o próximo LOOP
}
}
//----------- FUNÇÃO PARA ENVIAR OS DADOS PARA O ARM ----------
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Aguarda o envio de dados
}