Amigos, tenho que colocar 4 relés para funcionarem com um controle ir de tv.Já capturei os códigos do controle, mas não estou conseguindo acionar com 1 clique e desacionar com outro clique no mesmo botão. Tenho visto muito dos amigos na internet acionando com um e desacionando com outro. Alguém poderia me ajudar com o código? Obrigado!
Tags:
As respostas para este tópico estão encerradas.
Johane, bom dia.
Qual code de IR voce está utilizando?
Post o code ou o link aqui.
Rui
Acabei de conseguir com 1 botão, mas esta dificil fazer para os outros 3. Rui, o código é esse. Queria apenas que se pudesse, estendesse para outros 3 botões, para que eu colocasse os hexas neles. Muito obrigado amigo!
LIGA E DESLIGA POR CONTROLE IR NO MESMO BOTÃO
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean ligado=false;
void setup()
{
irrecv.enableIRIn(); // RECEBER
pinMode(13,OUTPUT);
}
void loop() {
while (irrecv.decode(&results)) {
irrecv.resume(); // Receive the next value
if(results.value==0xFF28D7 && ligado==false){ // HEX DO CONTROLE 0X -------
digitalWrite(13, HIGH);
delay(10);
ligado=true;
}
else if(results.value==0xFF28D7 && ligado==true){ // HEX DO CONTROLE 0X -------
digitalWrite(13, LOW);
delay(10);
ligado=false;
}
}// Fim do while para Verificação
}// Fim do programa
Olá Johanne,
O truque pra fazer dezenas de coisas tendo um só botão, é setar função com base no tempo de pressionamento.
Fiz isso com um interruptor automatico que tenho em casa.
No meu caso, se eu só pressiono e solto, ele liga e desliga a lampada, se eu pressiono entre 2 a 4 segundos ele entra no menu A, se pressiono entre 5 a 6 segundos ele entra no menu B, e pra o ultimo menu C é pressionando entre 7 ou mais.
Como o meu sistema tem um display lcd, eu usei um dos pixels pra informar onde eu estou, simplesmente aparecento L, a,b,c.
O truque é simples pra quem entende um pouco de arduino, é mais ou menos assim:
-Você inicia pegando uma váriáel long e atribuindo o mills atual a ela.
- Dai você cria um While que só entra dentro do laço quando o botão em questão é pressionado.
- Quando o botão é solto ele pega a variável anterior e subtrai do mills atual e ai tem o valor de quanto tempo ele passou dentro do laço.
- Agora é só criar um swith case ou um conjunto de IFs, e dar as ações que você quer.
Deu pra entender?
Sim, entendi. Mas no meu caso, irei fazer um filtro de linha com 4 tomadas, e, em cada tomada terá um relé, que será acionado por cada botão do controle, que tb são 4(botões). Por isso, quero que cada botão ligue e desligue. Neste exemplo, consegui somente com 1 botão, e queria estender a mais 3.
Alguém sabe como estender esse código para mais teclas do controle ? Tentei e não consegui de forma alguma.
Encontrei neste site o código http://www.criandorobocomarduino.com/2013/12/como-usar-o-botao-liga...
// Tenta assim:
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define led1 13
#define led2 12
#define led3 11
void setup()
{
irrecv.enableIRIn(); // RECEBER
pinMode(13,OUTPUT);
}
void loop() {
while (irrecv.decode(&results)) {
irrecv.resume(); // Receive the next value
if(results.value==0xFF28D7){ // H----------------- comando 1
digitalWrite(led1, !digitalRead(led1)); // aplica a logica inversa (liga ou desliga)
delay(10);
}
// (mude os comandos do controle para os outros leds)
if(results.value==0x000000){ // H----------------- comando 2
digitalWrite(led2, !digitalRead(led2));
delay(10);
}
if(results.value==0x1111111){ // H----------------- comando 3
digitalWrite(led3, !digitalRead(led3));
delay(10);
}
}// Fim do while para Verificação
}// Fim do programa
Eduardo, testei aqui substituí os hexadecimais e só funcionou o 1° botão.
Faltou só definir os pinos como OUTPUT:
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
Testei com os OUTPUT e mesmo assim só funciona o 1° botão.
Poste como ficou seu codigo
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define led1 13
#define led2 12
#define led3 11
void setup()
{
irrecv.enableIRIn(); // RECEBER
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}
void loop() {
while (irrecv.decode(&results)) {
irrecv.resume(); // Receive the next value
if(results.value==0xFF28D7){ // H----------------- comando 1
digitalWrite(led1, !digitalRead(led1)); // aplica a logica inversa (liga ou desliga)
delay(10);
}
// (mude os comandos do controle para os outros leds)
if(results.value==0xFF906F){ // H----------------- comando 2
digitalWrite(led2, !digitalRead(led2));
delay(10);
}
if(results.value==0xFFB847){ // H----------------- comando 3
digitalWrite(led3, !digitalRead(led3));
delay(10);
}
}// Fim do while para Verificação
}// Fim do programa
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por