Go Down

Topic: [ Resolvido ] Menu na LCD Shield. (Read 2 times) previous topic - next topic

MarceloBoeira

Nov 07, 2011, 07:16 pm Last Edit: Nov 10, 2011, 05:42 pm by BOEIRA Reason: 1
Preciso de ajuda, criei o código abaixo que reconhece as teclas e a LCD Shield em si, preciso fazer que as teclas naveguem entre menu, e quando apertar selcionar ele entre no menu e consiga ligar e desligar um relé.
Por Favor me ajudem, quando eu entro na VOID SALA01() por exemplo tem q aparecer uma tela escrita Relé: HIGH dai se a pessoa aperta pra baixo, ou pra cima aparece Relé: LOW e se apertar enter ele volta pro menu inicial com a variável definida, se você deixou selecionado HIGH ele fica HIGH...

Estou a procura de algum dispositivo remoto também, para acionar ao invés das teclas da LCD, eu havia tentado usar um Infra Vermelho, mas não achei aqui na minha cidade pra comprar o receptor...
Se alguém tiver uma idéia...


Outra coisa, tem como salvar no arduino a posição dos relés mesmo q eu desligue ele?
===========================================================
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
void setup() {  
lcd.begin(16, 2);
sel = 1;
x = 0;
y = 0;
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;


}

 
void loop(){


int tecla_valor = analogRead(0);
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
 right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
 up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
 down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
 left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
 enter = 1;
}
delay(250);

if (right == 1){
sel++;
}
if (left == 1){
sel--;
}

if (sel<=1){
 sel=1;
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Setor:");
 lcd.setCursor(0,1);
 lcd.print("   Sala01 >> ");
      if (enter == 1){
         sala01();
      }
}
if (sel==2){

 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Setor:");
 lcd.setCursor(0,1);
 lcd.print(" << Sala02 >> ");
      if (enter == 1){
         sala02();
      }
}
if (sel==3){

 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Setor:");
 lcd.setCursor(0,1);
 lcd.print(" << Sala03  ");
      if (enter == 1){
         sala03();
      }
}
}

void sala01(){
 lcd.clear();
 lcd.print("Sala ON");
 delay(3000);
 loop;  
}
void sala02(){
 lcd.clear();
 lcd.print("Sala ON");
 delay(3000);
 loop;  
}
void sala03(){
 lcd.clear();
 lcd.print("Sala ON");
 delay(3000);
 loop;  
}
=========================================================

 

My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

Wagner Sartori Junior

Amigo... seu código está muito difícil de ler. Por favor, edite seu post e utilize a tag "code"(é o ícone # acima) no seu código.

Wagner Sartori Junior

Tem como gravar coisas persistentes no arduino sim, utilizando a library EEPROM.

Por exemplo:
Code: [Select]

#include <EEPROM.h>

byte relayState[1];

void setup() {
  relayState[0] = EEPROM.read(0); // Aqui você lê do endereço 0 da EEPROM e joga na variável relayState[0]
}

void loop() {
  // Quando seu botão for apertado e você quiser gravar
  relayState[0] = 1;
  EEPROM.write(0, relayState[0]);
}


http://www.arduino.cc/en/Reference/EEPROM

MarceloBoeira

quero saber a questão das  saidas digitais, como faço pra ligar elas,...
e também como salvo as configurações só quando quiser, tipo acho q da pra fazer uma entrada no menu Salvar Configs, e outra Limpar Configs ambas com voids separadas.... 

vou tentar...
My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

Wagner Sartori Junior

Não sei se entendi direito o que vc quer dizer com ligar saídas digitais. Se for o que eu entendi, simplesmente coloque um pinMode(2, OUTPUT) no setup() e depois digitalWrite(2, HIGH) ou LOW para liga-la ou desliga-la. A porta 2 do seu arduino vai ser uma porta de saída que vai ligar e desligar apenas.

o salvar e limpar é simples também. faça uma função que vai salvar todas suas variáveis globais(as que são definidas fora de qualquer função) para o EEPROM. Você só vai precisar tomar cuidado com os endereços delas(recomendo utilizar um #define para cada variável com o endereço onde ela vai ser gravada).

MarceloBoeira

#5
Nov 08, 2011, 07:43 pm Last Edit: Nov 08, 2011, 07:52 pm by BOEIRA Reason: 1
tipo tem  um menu que você seleciona no meu programa que entra na void, tipo void sala_01, sala_02... dai se eu apertar para os lados ele tem q trocar HIGH/LOW da entrada do relé, depois q eu selecionei ele deve ativar um temporizador e esperar 3s e voltar para o inicial...

mais ou menos assim...
void_sala(){

lcd.printf("Lampada:");
lcd.printf(estado_rele);
if (tecla_cima==1){
   if (estado_rele==1){
    estado_rele=0;
   }
   if (estado_rele==0){
    estado_rele=0;
   }
}
if (tecla_baixo==1){
   if (estado_rele==1){
    estado_rele=0;
   }
   if (estado_rele==0){
    estado_rele=0;
   }
}
if (estado_rele==1){

digitalWrite(RELE,HIGH);
}
if (estado_rele==0){

digitalWrite(RELE,LOW);
}
My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

MarceloBoeira

Quote


#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //pinagem LCD no Arduino Mega

int up;
int down;
int nothing;
int right;
int left;
int enter;

int sel;
int x;
int y;
int tecla_valor;

boolean rele_sala01;
boolean rele_sala02;
boolean rele_sala03;
void setup() { 
lcd.begin(16, 2);
sel = 1; 
x = 0; 
y = 0; 
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;
rele_sala01=0;
rele_sala02=0;
rele_sala03=0;

pinMode(31, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);


lcd.print("  DHM 0.2 BETA");
delay(3000);
lcd.clear();
lcd.print("Desenvolvido por");
lcd.setCursor(0,1);
lcd.print(" Marcelo Boeira");
delay(3000);
}

  
void loop(){

int tecla_valor = analogRead(0);
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
  right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
  up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  enter = 1;
}
delay(250);
 
 
if (right == 1){
sel++;
 }
if (left == 1){
sel--;
 }

 if (sel <= 0){
   sel=1;
}   

 if (sel<=1){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("     Sala01 >> ");
  lcd.setCursor(0,1);
  lcd.print("Estado:");
   if (rele_sala01==1)
    lcd.print("Ligado");
   else
    lcd.print("Desligado");
    if (enter == 1){
         rele_sala01 = !rele_sala01;
         delay(100);
      }        
 }
  if (sel==2){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("  << Sala02 >> ");
  lcd.setCursor(0,1);
  lcd.print("Estado:");
    if (rele_sala02==1)
    lcd.print("Ligado");
   else
    lcd.print("Desligado");
    
      if (enter == 1){
         rele_sala02 = !rele_sala02;
         delay(100);
      }        
 }

  if (sel==3){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("  << Sala03  ");
  lcd.setCursor(0,1);
  lcd.print("Estado:");
    if (rele_sala03==1)
    lcd.print("Ligado");
   else
    lcd.print("Desligado");
    
      if (enter == 1){
         rele_sala03 = !rele_sala03;
         delay(100);
      }        
 }



if (rele_sala01==1){
digitalWrite(31, HIGH);
}
if (rele_sala01==0){
digitalWrite(31, LOW);
}
if (rele_sala02==1){
digitalWrite(32, HIGH);
}
if (rele_sala02==0){
digitalWrite(32, LOW);
}
if (rele_sala03==1){
digitalWrite(33, HIGH);
}
if (rele_sala03==0){
digitalWrite(33, LOW);
}
}

My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

Webert Oliveira

Olha seu codigo está muito confuso realmente, acho que você está usando coisa d+ para pouco assunto.
Uma parte que posso te ajudar, são algumas funções que vc pode adaptar e economizar codigo.
Para receber pela serial:
Code: [Select]
 
// Recebe sinal serial do Modulo-02 Bluetooth e Rede para controle dos Canais
   if (entradaSerial.available())
   {
     Serial.print((char)entradaSerial.read());
   }
   if (entradaSerial.available())
   {
      recepSerial =(char)entradaSerial.read();
      switch (recepSerial)
      {
         case '1':
           Serial.println();
           Serial.print(recepSerial);
           alteraEstado(canal1);
           break;
       
      }
   }


FunÇão do Controle Remoto (Você encontra esse receptor em qualquer eletronica, so pedir para TV CCE ou Sony)

Code: [Select]

// Função que recebe um valor do Controle de IR
   if (irrecv.decode(&results))
   {
     switch(results.value)
     {
         case 16728765:
            CANAL=canal1;
            op=16728765;
            imprimeSerial(1);
            break;
         case 16761405:
            CANAL=canal2;
            op=16761405;
            break;
         case 16773135:
            CANAL=canal3;
            op=16773135;
            break;
         case 16742535:
            CANAL=canal4;
            op=16742535;
            break;
         case 16716015:
            if(tempo!=0)
            {
              tempo=0;
            }else
            {
              tempo=1;
            }           
            op=16716015;
            break;
         default:
            op=0;
            break;
     }
     if(results.value==op)
     {
       alteraEstado(CANAL); 
     }
     irrecv.resume(); // Receive the next value


Função que muda o estado de uma pino/canal

Code: [Select]

void alteraEstado(int canal)
{
       // Recebe qual canal será alterado
       CANAL=canal;
       if(digitalRead(CANAL)==LOW)
       {
         digitalWrite(CANAL,HIGH);
       }else
       {
         digitalWrite(CANAL,LOW);
       }
}


MarceloBoeira

Code: [Select]

/*
##########################################
########### Projeto DHM v0.4 #############
#### Beta RLS000100(Versão Funcional) ####
#### Desenvolvido Por Marcelo Boeira  ####
#### Baseado nas Licenças GLP         ####
#### OpenSource Livre de Cópias       ####
#### N?o Retire os Créditos           ####
#### Mais Info: mboeira.blogspot.com  ####
##########################################
##########################################
########  Status do Projeto:  ############
#### Acionamento Por Bluetooth:    0% ####
#### Acionamento Por InfraVermelho:0% ####
#### Acionamento Por Radio:      100% ####
#### Leitura Digital das Teclas: 100% ####
#### Menus LCD Shield:           100% ####
#### Controle de Relés:          100% ####
##########################################
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //pinagem LCD no Arduino Mega
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
int tecla_valor;
boolean rele_sala01;
boolean rele_sala02;
boolean rele_sala03;
boolean rele_sala04;
boolean rele_sala05;
boolean rele_sala06;


void setup() {  
 lcd.begin(16, 2);
 sel = 1;
 x = 0;
 y = 0;
 up = 0;
 down = 0;
 right = 0;
 left = 0;  
 enter = 0;
 nothing = 0;
 rele_sala01=0;
 rele_sala02=0;
 rele_sala03=0;  
 rele_sala04=0;
 rele_sala05=0;
 rele_sala06=0;
 pinMode(22, INPUT);
 pinMode(23, INPUT);
 pinMode(31, OUTPUT);
 pinMode(32, OUTPUT);
 pinMode(33, OUTPUT);
 pinMode(34, OUTPUT);
 pinMode(35, OUTPUT);
 pinMode(36, OUTPUT);
 //~Inicia Apresentação do Projeto
 lcd.print("  DHM 0.4 BETA");
 delay(3000);
 lcd.clear();
 lcd.print("Desenvolvido por");
 lcd.setCursor(0,1);
 lcd.print(" Marcelo Boeira");
 delay(3000);
}  
void loop(){
 int tecla_valor = analogRead(0);
 if (tecla_valor == 1023){
    up = 0;
    down = 0;
    right = 0;
    left = 0;
    enter = 0;
    nothing = 1;
 }
 enter = digitalRead(23);
 right = digitalRead(22);


 if (tecla_valor == 0){
    right = 1;
  }
 if ((tecla_valor >= 120) & (tecla_valor <= 146)){
    up = 1;
 }
 if ((tecla_valor >= 300) & (tecla_valor <= 350)){
    down = 1;
 }
 if ((tecla_valor >= 500) & (tecla_valor <= 530)){
    left = 1;
 }
 if ((tecla_valor >= 700) & (tecla_valor <= 790))
 {
    enter = 1;
 }
 delay(250);
 if (right == 1){
    sel++;
 }
 if (left == 1){
    sel--;
 }
 if (sel <= 0){
    sel=1;
 }  
 if (sel==7){
   sel=1;
 }
 if (sel<=1){
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("     Sala01 >> ");
   lcd.setCursor(0,1);
   lcd.print("Estado:");
   if (rele_sala01==1)
      lcd.print("Ligado");
   else
      lcd.print("Desligado");
   if (enter == 1){
      rele_sala01 = !rele_sala01;
      delay(100);
   }        
 }
 if (sel==2){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("     Sala02 >> ");
    lcd.setCursor(0,1);
    lcd.print("Estado:");
    if (rele_sala02==1)
       lcd.print("Ligado");
    else
       lcd.print("Desligado");
    if (enter == 1){
        rele_sala02 = !rele_sala02;
        delay(100);
     }        
}
 if (sel==3){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("     Sala03 >> ");
    lcd.setCursor(0,1);
    lcd.print("Estado:");
    if (rele_sala03==1)
       lcd.print("Ligado");
    else
       lcd.print("Desligado");
    if (enter == 1){
        rele_sala03 = !rele_sala03;
        delay(100);
     }
 }
 if (sel==4){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("     Sala04 >> ");
    lcd.setCursor(0,1);
    lcd.print("Estado:");
    if (rele_sala04==1)
       lcd.print("Ligado");
    else
       lcd.print("Desligado");
     if (enter == 1){
        rele_sala04 = !rele_sala04;
        delay(100);
     }
 }
 if (sel==5){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("     Sala05 >> ");
    lcd.setCursor(0,1);
    lcd.print("Estado:");
    if (rele_sala05==1)
       lcd.print("Ligado");
    else
       lcd.print("Desligado");
    if (enter == 1){
        rele_sala05 = !rele_sala05;
        delay(100);
     }
 }

  if (sel==6){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("     Sala06 >> ");
    lcd.setCursor(0,1);
    lcd.print("Estado:");
    if (rele_sala06==1)
       lcd.print("Ligado");
    else
       lcd.print("Desligado");
    if (enter == 1){
        rele_sala06 = !rele_sala06;
        delay(100);
     }
   }
 if (rele_sala01==1){
    digitalWrite(31, HIGH);
 }
 if (rele_sala01==0){
    digitalWrite(31, LOW);
 }
 if (rele_sala02==1){
    digitalWrite(32, HIGH);
 }
 if (rele_sala02==0){
    digitalWrite(32, LOW);
 }
 if (rele_sala03==1){
    digitalWrite(33, HIGH);
 }
 if (rele_sala03==0){
    digitalWrite(33, LOW);
 }
 if (rele_sala04==1){
    digitalWrite(34, HIGH);
 }
 if (rele_sala04==0){
    digitalWrite(34, LOW);
 }
 if (rele_sala05==1){
    digitalWrite(35, HIGH);
 }
 if (rele_sala05==0){
    digitalWrite(35, LOW);
 }
 if (rele_sala06==1){
    digitalWrite(36, HIGH);
 }
 if (rele_sala06==0){
    digitalWrite(36, LOW);
 }
}
My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

Go Up