Olá pessoal se puder da uma ajudinha eu agradeço kk !!
Vamos lá, montei tipo um menu com display e com esse menu consigo
altera a posição do rele para ligado e desligado. ex( acender a luz da sala ? se sim acende se não você pode pular para o próximo menu acender a luz do quarto .) mais coloquei outros menus como aumentar volume ou abaixar e aumentar ou abaixar a temperatura do ar-condicionado com o led ir emissor maisai encontrei um problema quando altero o volume automaticamente altera o da temperatura e não estou conseguindo separar esses parâmetros ..
Abaixo segue o sketch :
#include <LiquidCrystal.h>
#include <IRremote.h>
IRsend irsend; // Variável para poder enviar o código a TV
const int ledIR = 13; // Pino onde iremos conectar o LED emissor de infravermelho
int armazenavalor = 0;
// Pinos de controle dos reles
int pinorele1 = 10; //Pino do Arduino ligado ao IN1 da placa de relés
int pinorele2 = 9; //Pino do Arduino ligado ao IN2 da placa de relés
int pinorele3 = 8; //Pino do Arduino ligado ao IN3 da placa de relés
int pinorele4 = 7; //Pino do Arduino ligado ao IN4 da placa de relés
int estadorele1 = HIGH; //Armazena o estado do relé 1
int estadorele2 = HIGH; //Armazena o estado do relé 2
int estadorele3 = HIGH; //Armazena o estado do relé 3
int estadorele4 = HIGH; //Armazena o estado do relé 4
// Definição dos pinos dos botões
#define bMenu A0 // Os pinos analógicos podem ser
#define bChange A1 // usados como digitais, bastando
#define bUp A2 // referenciá-los por A0, A1..
#define bDown A3
#define bMenu0 90 // Valor de referência que a
#define bChange0 91 // função CheckButton() passa
#define bUp0 92 // indicando que um botão foi
#define bDown0 93 // solto
boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
int variavel; // variavel a ser alterada pelo menu
char state=1; // variável que guarda posição atual do menu
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
//============================================== SETUP
void setup()
{
pinMode(ledIR ,OUTPUT); // Definimos o LED de infra como de saída
Serial.begin(9600); // Iniciamos o Serial Monitor
lcd.begin(16, 2); // Iniciando a biblioteca do LCD
pinMode(bMenu, INPUT); // Botões
pinMode(bChange,INPUT);
pinMode(bUp, INPUT);
pinMode(bDown, INPUT);
digitalWrite(bMenu, HIGH); // Aciona o pull-up interno
digitalWrite(bChange,HIGH); // dos botões
digitalWrite(bUp, HIGH);
digitalWrite(bDown, HIGH);
pinMode(pinorele1, OUTPUT); //Define os pino dos reles como saída
pinMode(pinorele2, OUTPUT);
pinMode(pinorele3, OUTPUT);
pinMode(pinorele4, OUTPUT);
digitalWrite(pinorele1, estadorele1); //Coloca os pinos dos reles em
digitalWrite(pinorele2, estadorele2); //estado alto (rele desligado)
digitalWrite(pinorele3, estadorele3);
digitalWrite(pinorele4, estadorele4);
}
//==============================================
//============================================== LOOP
void loop()
{
switch (state) { // Define checa qual tela atual
// Tela de controle de acesso
case 1: // executado quando na TELA 1
switch (CheckButton()) {
case bChange:
break;
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(2);
break;
default:
Set_state(1);
}
break;
case 2: // executado quando na TELA 2 APAGAR LUZ ?
switch (CheckButton()) {
case bChange:
estadorele1 = !estadorele1;
//Aciona rele 1 e liga e desliga a luz
digitalWrite(pinorele1, estadorele1);
break;
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(3);
break;
default:
Set_state(2);
}
break;
case 3: // executado quando na TELA 3 MODO CINEMA
switch (CheckButton()) {
case bChange:
estadorele2 = !estadorele2;
//Aciona rele 2 e liga o retro projetor
digitalWrite(pinorele2, estadorele2);
break;
case bUp:
lcd.clear(); Set_state(2);
break;
case bDown:
lcd.clear(); Set_state(4);
break;
default:
Set_state(3);
}
break;
case 4: // executado quando na TELA 4 AUMENTAR E ABAIXAR VOLUME
switch (CheckButton()) {
case bMenu:
if (digitalRead(bMenu) == HIGH)
{
irsend.sendRC6(0x80542711, 36); } // Código que será enviado a TV para aumentar o volume
lcd.clear(); variavel++;
break;
case bChange:
if (digitalRead(bChange) == HIGH)
{
irsend.sendRC6(0x80542710, 36); } // Código que será enviado a TV para diminuir o volume
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(3);
break;
case bDown:
lcd.clear(); Set_state(5);
break;
default:
Set_state(4);
}
break;
case 5: // executado quando na TELA 5 PASSAR E VOLTAR CANAL
switch (CheckButton()) {
case bChange:
if (digitalRead(bChange) == HIGH) { // Se o botão for pressionado ele irá enviar o código para PASSAR o canal na TV
irsend.sendRC6(0x80542720, 36); }
lcd.clear(); variavel++;
break;
case bMenu:
if (digitalRead(bMenu) == HIGH) {
irsend.sendRC6(0x8054A721, 36); } // Se o botão for pressionado ele irá enviar o código para diminuir o canal na TV
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(4);
break;
case bDown:
lcd.clear(); Set_state(6);
break;
default:
Set_state(5);
}
break;
case 6: // executado quando na TELA 3 Ar-condicionado
switch (CheckButton()) {
case bChange:
estadorele3 = !estadorele3;
//Aciona rele 3 e liga o retro projetor
digitalWrite(pinorele3, estadorele3);
break;
case bUp:
lcd.clear(); Set_state(5);
break;
case bDown:
lcd.clear(); Set_state(7);
break;
default:
Set_state(6);
}
break;
case 7: // executado quando na TELA 5 Abaixar e aumentar o frio
switch (CheckButton()) {
case bChange:
if (digitalRead(bChange) == HIGH) { // Se o botão for pressionado ele irá enviar o código para PASSAR o canal na TV
irsend.sendNEC(0xFFE01F, 32); }
lcd.clear(); variavel++;
break;
case bMenu:
if (digitalRead(bMenu) == HIGH) {
irsend.sendNEC(0xFFA857, 32); } // Se o botão for pressionado ele irá enviar o código para diminuir o canal na TV
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(6);
break;
case bDown:
lcd.clear(); Set_state(7);
break;
default:
Set_state(7);
}
}
}
//============================================== FIM da função LOOP
//==============================================
//============================================== CheckButton
char CheckButton() {
if (aMenu!=digitalRead(bMenu)) {
aMenu=!aMenu;
if (aMenu) return bMenu0; else return bMenu;
} else
if (aChange!=digitalRead(bChange)) {
aChange=!aChange;
if (aChange) return bChange0; else return bChange;
} else
if (aUp!=digitalRead(bUp)) {
aUp=!aUp;
if (aUp) return bUp0; else return bUp;
} else
if (aDown!=digitalRead(bDown)) {
aDown=!aDown;
if (aDown) return bDown0; else return bDown;
} else
return 0;
}
//========================================================
//============================================== Set_state
void Set_state(char index) {
state = index; // Atualiza a variável state para a nova tela
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1
lcd.setCursor(0,0);
lcd.print("Controle Acessos");
lcd.setCursor(6,1);
lcd.print( "MENU"); // mostra os segundos na tela
break;
case 2: //==================== state 2
lcd.setCursor(0,0);
lcd.print("Estado");
lcd.setCursor(2,1);
lcd.print("da Luz ?");
break;
case 3: //==================== state 3
lcd.setCursor(2,0);
lcd.print("Modo Cinema");
lcd.setCursor(5,1);
lcd.print("Acessar ?");
break;
case 4: //==================== state 4
lcd.setCursor(0,0);
lcd.print("Volume:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
case 5: //==================== state 5
lcd.setCursor(0,0);
lcd.print("Canal:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
case 6: //==================== state 6
lcd.setCursor(0,0);
lcd.print("Ar-condicionado");
lcd.setCursor(5,1);
lcd.print("Estado ?");
break;
case 7: //==================== state 7
lcd.setCursor(0,0);
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
default: ;
}
}
se tiver uma ideia sera bem vinda kk
ISSO TA BASTANTE INTERESSANTE KK
Tags:
Oi ERML, boa noite.
Primeiro uma sugestão: Evite postar código a área de texto. alem de perder a formatação
original do code, o tópico fica muito extenso.
Coloque o código em arquivo anexado.
Ok, a única coisa que vi, e que pode estar fazendo seu ar reconhecer códigos da TV, é que você envia 64 bits (0x80542711, 36) e informa que está enviando 36.
Rui
Ata desculpa e que sou novato nisso kk
então o que entendi e que eu devo mudar os bits para que um não reconheça o outro ??
Oi ERML,
você tem que informar o tamanho correto da quantidade de bits que quer transmitir.
Rui
Ok obrigado Rui KK
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por