Go Down

Topic: [ Resolvido ] Menu na LCD Shield. (Read 2912 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy