Continuando , cada botão do de cada controle possui um código.
No caso , utilizei 4 botões do mini controle .
O botão CH + , CH - , Vol + e Vol - .
Apertando o botão CH + voce liga um led piloto e um relê (para ligar uma carga maior ) , acionando o botão Vol. + , aciona o led piloto piscando e inversamente aciona o relê , fazendo a lâmpada piscar .
Acionando o botão CH - , voce desliga o modo piscante , ou ativa somente o relê , e finalmente acionando o botão Vol. - , desliga tudo .
Chega de papo e vamos a parte que interessa .
As ligações eletrônicas .
Ligação do receptor IR , segue as mesmas ligações do primeiro post
Acesse aqui .
Faça aqui o Download da biblioteca IR , que deverá ficar descompactada na pasta de bibliotecas .
(no windows eu não sei ao certo onde fica a pasta do arduino , mas acredito que siga o mesmo padrão )
No mac ela segue o caminho (/Users/SeuUserAqui/Documents/Arduino/libraries)
Os pinos 2 e 3 acionam os leds , do optoacoplador e do led piloto .
Lembrando que o led do opto que vai ligado ao pino 2 é muito sensível , e precisa de um resistor de 10Ω ( marrom , preto , preto ,dourado ) .
e o relê de 12 V vai ligado ao transistor do opto .
e um outro led que dependendo da cor deverá ter um resistor para limitar a corrente .
Feitas as ligações , vamos a programação.
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define BT_1 0xE880BBF6 //Botao 1
#define BT_2 0xE880BBD6 //Botao 2
#define BT_3 0xE880BBDE //Botao 3
#define BT_4 0xE880BBFE //Botao 4
#define LED_1 2 //Pino led 1
#define LED_2 3 //Pino led 2
#define LED_3 4 //Pino led 3
#define LED_4 5 //Pino led 4
int led1State = LOW; //Estado atual do led 1
int led2State = LOW; //Led 2
int led3State = LOW; //Led 3
int led4State = LOW; //Led 4
long bt = 0; //Ultimo botao precionado
unsigned long startMilis ; //Contado para blink sem delay
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
irrecv.resume();
Serial.println(results.value, HEX); //Aqui voce descobre qual o botao do seu controle
//Apenas para filtrar os botoes apertados, no meu caso para filtrar outros controles =)
if(results.value == BT_1 || results.value == BT_2 || results.value == BT_3 || results.value == BT_4)
{
startMilis = millis(); //Apertou um botao, reseta o contador
bt = results.value; //Salva ultimo botao apertado
}
}
//Ativa o modo dos leds de acordo com o botao apertado
switch(bt)
{
case BT_1 : mod(1); break;
case BT_2 : mod(2); break;
case BT_3 : mod(3); break;
default: mod(0); break;
}
}
void mod(int x)
{
unsigned long currentMillis = millis();
if(x == 0)
{
//Mod 0, tudo apagado
led1State = LOW;
led2State = LOW;
led3State = LOW;
led4State = LOW;
}
else if(x == 1)
{
//Mod 1, tudo aceso
led1State = HIGH;
led2State = HIGH;
led3State = HIGH;
led4State = HIGH;
}
else if(x == 3)
{
//Mod 3, arvore de natal
mod(0);
if(startMilis + 250 > currentMillis)
{
led1State = HIGH;
}
else if(startMilis + 500 > currentMillis)
{
led1State = LOW;
}
else if(startMilis + 750 > currentMillis)
{
led2State = HIGH;
}
else if(startMilis + 1000 > currentMillis)
{
led2State = LOW;
}
else
{
startMilis = currentMillis;
}
}
digitalWrite(LED_1, led1State);
digitalWrite(LED_2, led2State);
digitalWrite(LED_3, led3State);
digitalWrite(LED_4, led4State);
}
Nenhum comentário:
Postar um comentário