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

Exibições: 390

Responder esta

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço