Como acionar controle ir com 2 comandos em 1 botão apenas?

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!

Exibições: 1064

As respostas para este tópico estão encerradas.

Respostas a este tópico

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...

Porem, quando vou carregar aparece esse maldito erro.

// 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

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço