Boa tarde galera..
Uma dúvida quando eu crio um menu com LCD dentro de cada menu eu tenho que criar o loop também, pq criei mais quando eu mudo o menu a ação do outro para de funcionar, tipo temperatura acender led com uma certa temperatura ele acende mais se eu vou pro menu hora mesmo dando a temperatura ele não acende.
Aí é minha dúvida tenho que criar loop dentro de cada menu que eu criar para quendo eu mudar o menu e continuar fazendo o que eu especifiquei nele.

Exibições: 374

Responder esta

Respostas a este tópico

Boa tarde ACF,

coloque mais virgulas no seu texto.

Do jeito que está fica difícil entender seu projeto e dificuldade.

RV

Bom dia!

Primeiramente, tudo que estiver dentro de um laço será repetido enquanto sua rotina estiver presa ou rodando dentro dele, portanto o que esta fora desse laço não será repetido ou não será executado. cabe a você estruturar o seu código e definir o que roda e o que não roda dentro de uma função!

Cuidado ao chamar um laço dentro de outro laço, (funções recursivas) você pode por o programa em looping infinito!

Compartilhe o código, comente-o, talvez possamos ajuda-lo de forma mais especifica.

Seja claro em que parte vc tem duvida!

Abraço!

/*
Curso de Arduino WR Kits Aula 29

www.wrkits.com.br
facebook.com/wrkits
youtube.com/user/canalwrkits

Menu para Display LCD 16 x 2

Autor: Eng. Wagner Rambo, Data: Agosto de 2015

*/

// --- Bibliotecas Auxiliares ---
#include <LiquidCrystal.h> //Biblioteca para o display LCD

// --- Mapeamento de Hardware ---
#define butUp 10 //Botão para selecionar tela acima no digital 12
//#define butDown 11 //Botão para selecionar tela abaixo no digital 11
#define butP 9 //Botão de ajuste mais no digital 10
#define butM 8 //Botão de ajuste menos no digital 9
#define Lamp1 A0 //Saída para lâmpada 1 no A0 (será usado como digital)
#define Lamp2 A1 //Saída para lâmpada 2 no A1 (será usado como digital)
#define sensor A3 //define o pino do sensor (que será usado para ler o sensor)

const int sensoragua = 2; //ler sinal do sensor Temperatura
float valorsensor = 0.0;
float ValorTempMax = -150,ValorTempMin = 300; //valor ue vai receber
int val= 0;

// --- Protótipo das Funções Auxiliares ---
void changeMenu(); //Função para modificar o menu atual
void dispMenu(); //Função para mostrar o menu atual
void sonda_lambda(); //Função do menu1, data e hora
void temperatura_agua(); //Função do menu2, temperatura
void lights(); //Função do menu3, acionamento de lampadas
void temperatura_ar(); //Função do menu4

// --- Variáveis Globais ---
char menu = 0x01; //Variável para selecionar o menu
char set1 = 0x00, set2 = 0x00; //Controle das lâmpadas
boolean t_butUp, t_butDown, t_butP, t_butM; //Flags para armazenar o estado dos botões
const int valorsensoragua = 0;
// --- Hardware do LCD ---
LiquidCrystal disp(12, //RS no digital 7
11, //EN no digital 6
5, //D4 no digital 5
4, //D5 no digital 4
3, //D6 no digital 3
2); //D7 no digital 2

// --- Configurações Iniciais ---
void setup()
{


disp.begin(16,2); //Inicializa LCD 16 x 2

for(char i=7; i<10; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 9 a 12) com pull-ups internos

pinMode(Lamp1, OUTPUT); //Configura saída para lâmpada 1
pinMode(Lamp2, OUTPUT); //Configura saída para lâmpara 2

t_butUp = 0x00; //limpa flag do botão Up
//t_butDown = 0x00; //limpa flag do botão Down
t_butP = 0x00; //limpa flag do botão P
t_butM = 0x00; //limpa flag do botão M

digitalWrite(Lamp1, LOW); //Lâmpada 1 inicia apagada
digitalWrite(Lamp2, LOW); //Lâmpada 2 inicia apagada


} //end setup


// --- Loop Infinito ---
void loop()
{

changeMenu();
dispMenu();

} //end loop

// --- Desenvolvimento das Funções Auxiliares ---
void changeMenu() //Modifica o menu atual
{
if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag
// if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag

if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada?
{ //Sim...
t_butUp = 0x00; //Limpa flag

disp.clear(); //Limpa display
menu++; //Incrementa menu

if(menu > 0x04) menu = 0x01; //Se menu maior que 4, volta a ser 1

} //end butUp

/* if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada?
{ //Sim...
t_butDown = 0x00; //Limpa flag

disp.clear(); //Limpa display
menu--; //Decrementa menu

if(menu < 0x01) menu = 0x04; //Se menu menor que 1, volta a ser 4

} //end butDown */

} //end changeMenu

void dispMenu() //Mostra o menu atual
{
switch(menu) //Controle da variável menu
{
case 0x01: //Caso 1
sonda_lambda(); //Chama a função de relógio

break; //break
case 0x02: //Caso 2
temperatura_agua(); //Chama a função do termômetro

break; //break
case 0x03: //Caso 3
lights(); //Chama função para acionamento de lâmpadas

break; //break
case 0x04: //Caso 4
temperatura_ar(); //Chama função para o menu4

break; //break

} //end switch menu

} //end dispMenu

void sonda_lambda() //Data e Hora (menu1)
{

disp.setCursor(2,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Sonda Lambda"); //Imprime mensagem
disp.setCursor(6,1); //Posiciona cursor na coluna 1, linha 2

// Desenvolver uma função de data e hora...

disp.print("0.89"); //Mostrador (apenas ilustrativo......)

} //end Sonda

void temperatura_agua() //Temperatura (menu2)
{


val = analogRead(sensoragua);
valorsensor = (val * 358.0)/1024;
Serial.println(valorsensor);


disp.setCursor(3,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Temp: Agua"); //Imprime mensagem
disp.setCursor(0,1); //Posiciona cursor na coluna 2, linha 2


if (valorsensor > ValorTempMax)
{
ValorTempMax = valorsensor;
}

disp.setCursor(0,1);
disp.print(valorsensor);
disp.write(B11011111);
//disp.print(" C ");

disp.setCursor(11,1);
disp.print(ValorTempMax);
disp.write(B11011111);

if (valorsensor >= 27)

{
digitalWrite (A3,HIGH);
}

else if (valorsensor <= 25 )
{
digitalWrite (A3,LOW);
}




// Desenvolver uma função de data e hora...
//Mostrador (apenas ilustrativo......)

// disp.print(valorsensor);
//disp.write(B11011111);
//disp.setCursor(11,1);

delay (1000);

} //end temperatura()

void lights() //Acionamento de lâmpadas (menu3)
{

disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Acionar Lampadas"); //Imprime mensagem do menu 3


if(!digitalRead(butP)) t_butP = 0x01; //Botão P pressionado? Seta flag
if(!digitalRead(butM)) t_butM = 0x01; //Botão M pressionado? Seta flag

if(digitalRead(butP) && t_butP) //Botão P solto e flag setada?
{ //Sim...
t_butP = 0x00; //Limpa flag

set1++; //Incrementa set1

if(set1 > 2) set1 = 0x01; //Se maior que 2, volta a ser 1

switch(set1) //Controle do set1
{
case 0x01: //Caso 1
disp.setCursor(0,1); //Posiciona cursor na coluna 1, linha 2
disp.print("L1 on "); //Imprime mensagem
digitalWrite(Lamp1, HIGH); //Liga lâmpada 1
break; //Break
case 0x02: //Caso 2
disp.setCursor(0,1); //Posiciona cursor na coluna 1, linha 2
disp.print("L1 off"); //Imprime mensagem
digitalWrite(Lamp1, LOW); //Desliga lâmpada 1
break; //Break

} //end switch set1

} //end butP

if(digitalRead(butM) && t_butM) //Botão D solto e flag setada?
{ //Sim...
t_butM = 0x00; //Limpa flag

set2++; //Incrementa set2

if(set2 > 2) set2 = 0x01; //Se maior que 2, volta a ser 1

switch(set2) //Controle do set2
{
case 0x01: //Caso 1
disp.setCursor(8,1); //Posiciona cursor na coluna 8, linha 2
disp.print("L2 on "); //Imprime mensagem
digitalWrite(Lamp2, HIGH); //Liga lâmpada 2
break; //Break
case 0x02: //Caso 2
disp.setCursor(8,1); //Posiciona cursor na coluna 8, linha 2
disp.print("L2 off"); //Imprime mensagem
digitalWrite(Lamp2, LOW); //Liga lâmpada 1
break; //Break

} //end switch set1

} //end butM


} //end lights

void temperatura_ar() //Função genérica para um quarto menu...
{
disp.setCursor(3,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Temp: AR "); //Imprime mensagem
disp.setCursor(4,1); //Posiciona cursor na coluna 8, linha 2

// Desenvolver uma função de data e hora...

disp.print("30 graus"); //Créditos


} //end menu4


//pode-se implementar quantos menus quiser
//............

Então ele funciona perfeitamente, só que quando mudo o menu (a função para acender o led não funciona).

Quando está acesa ela não apaga e quando está desligada ela não acende, o que ta de errado no codigo ai, vc poderia me umas dicas.

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço