Boa noite pessoal.

Alguém poderia me dizer onde estou errando.

Estou com este código e tenho dois botões um para cada saída (chamei de rele1 e rele2) e tenho dois botões 1 e 2. 

Quando pressiono o botão 1 tanto a saída 1 quanto a 2 acende, e quando pressiono novamente as duas apagam.

A mesma coisa acontece quando pulso as teclas do controle (peguei a codificação de duas teclas). Quando pulso as duas saídas vão para o nível alto e quando pulso novamente as duas saídas vão a nivel baixo,

o código:

#include <WProgram.h> //biblioteca do IR
#include <NECIRrcv.h>
#define InfraVermelho 9 //pino recebe IR
int rele1 = 2; //pino acionamento de relé1
int botao1 = 4; //pino do botão1
int rele2 = 6; //pino acionamento de relé2
int botao2 = 8; //pino do botão2
int aciona = 0;
unsigned long capturaCodigo = 0;
NECIRrcv ir (InfraVermelho);

void setup()
{
Serial.begin(9600);
pinMode (rele1,OUTPUT);
digitalWrite(rele1,0);
pinMode (botao1,INPUT);
digitalWrite(botao1,1);
pinMode (rele2, OUTPUT);
digitalWrite(rele2,0);
pinMode (botao2, INPUT);
digitalWrite(botao2,1);

ir.begin(); //inicializa função infravermelho
}
void loop()
{
int leitura = digitalRead(botao1);
if (leitura == 0)
aciona = !aciona;
digitalWrite (rele1,aciona);
delay (500);
{
int leitura = digitalRead(botao2);
if (leitura == 0)
aciona = !aciona;
digitalWrite (rele2,aciona);
delay (500);

while (ir.available()) {
capturaCodigo = ir.read() ; // Captura toda entrada de dados que seja infra vermelho e armazena na variavel capturaCodigo do tipo long.
Serial.println(capturaCodigo); // Imprime no serial monitor o valor capturado ja declado na variavel.

if (capturaCodigo == 3008151360){
aciona = !aciona;
digitalWrite (rele1,aciona);
delay (1000);

}
if (capturaCodigo == 3526213440){
aciona = !aciona;
digitalWrite (rele2,aciona);
delay (1000);
 
}
}

}

}

Valeu, 

Exibições: 364

Responder esta

Respostas a este tópico

Olá

Adiciona um 

int aciona2 = 0;

e substitui  no digitalRead (botao2);

os aciona por aciona2 que vai dar certo...

Abraços!!!

Bom dia Leandro.

Acrescentei um aciona2 e depois fui alem aciona3 e funcionou.

Valeu pela resposta,

J.Antonio

Boa noite

O código tá muito grande pra uma ação simples, por exemplo, voce declarou uma variavel pra armazenar o 9 e depois usou essa variavel uma vez apenas. isso ocupa espaço na memoria, isso e muito importante considerar já que o arduino nao tem muita memoria, uma técnica é ler o resultado do infravermelho e converter pra inteiro, assim vc pode armazenar em uma variavel inteira e fazer uma declaração simples ,, e depois é só comparar, com if (if (if))), o código fica ao total de mais ou menos 15 linhas, uma vez mapiei um controle de 23 botoes e ainda coloquei um sensor de luminosidade, se estivesse claro o ambiente(de dia) as luzes nao acendiam e nem pelo interruptor,

Uhm interessante.

João, ainda não tenho conhecimentos para tal feito, eu simplesmente vi que funcionou com uma tecla fui copiando e colando e mudando o nome, Sei que poderia usar a memoria mais como te disse ainda não programo apenas sou fução. Outra coisa, poderiamos colocar duas teclas destas para aumentar e diminuir a luminosidade (PWM) ou seja se estiver aceso através de teclas (2 qualquer) aumentávamos e diminuiríamos a luminosidade. Uhm ia ficar chique também. O que acha ? Vamos fazer para a galera consultar ?

No aguardo, 

Valeu, bom domingo.

José Antonio 

Opp, você pode fazer isso uzando o exemplo da biblioteca ir remote, em todos os meus experimentos com o ir remote eu tive que colocar um delay (100) apos cada recebimento, pois se voce apertar o botão por alguns milisegundos ele emite o sinal 0 e voce recebe 0 na leitura, nesse código usei o pino 11 pra receber o sinal , defini o PIN_SALA = 8 que é o relé,no setup eu iniciei a serial e o irrecev, e também os pinos 7 e 13, nesse código será necessário algumas adaptações, mas a lógica mais simples esta nele, se vc tiver um ldr poderá colocar ele na jogada, qualqer duvida escreve ai, haa, e lembrando, voce pode colocar pra se vc apertar um botao denovo ele desliga na mesma tecla,

#include <IRremote.h>

int RECV_PIN = 11;
int PIN_SALA = 8;
int sensorValue = 0;
const int analogInPin = A0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(7,OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
sensorValue = analogRead(analogInPin);
if (sensorValue <= 15){
if (irrecv.decode(&results)) {
irrecv.resume();
}
if (results.value == 50167935)
{
Serial.println("A luz da cozinha foi acesa!");
digitalWrite(7,HIGH);
}
delay(50);
if(results.value == 50151615)
{
digitalWrite(7,LOW);
Serial.println("A luz da cozinha foi apagada!");
}
delay(50);
if(results.value == 50184255)
{
digitalWrite(8,HIGH);
Serial.println("a luz da sala esta acesa!");
irrecv.resume();
}
delay(50);
if (results.value == 50143455)
{
digitalWrite(8, LOW);
Serial.println("A luz da sala esta apagada!");
irrecv.resume();
}
delay(50);
}
else
{
Serial.println("Voce nao esta autorizado a ligar nenhuma luz!");

}

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço