olá a todos, recentemente, comecei um projeto no Arduino, que consiste, em utilizar um LCD Keypad Shield, no qual desenvolvi um menu, e fiz a integração de um sensor neste menu, sendo este sensor o sct-013 20a, não invasivo, quando fui verificar, os resultados, ele funciona, mas quando entro na parte de medições, que seria o "sub menu", ele não atualiza os dados do sensor que seria de amperagem e potência, e ele só atualiza quando eu aperto o select do LCD Keypad Shield, sendo que este deveria atualizar os dados automaticamente, e depois quando apertarmos o botão left voltasse o menu de origem, gostaria de ajudada, por favor,
Agradeço desde já
Programação :
#include <LiquidCrystal.h> // Inclui biblioteca "LiquidCristal.h"
#include "EmonLib.h"
EnergyMonitor emon1;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Define Pinos do Display
int Menu = 0; // Inicializa valores para Menu
int estado = 0; // Inicializa valores para estado
int rede = 220.0;
int pino_sct = 1;
void setup() {
lcd.begin(16, 2); // Estabelece caracteres do display
clearPrintTitle();
}
void loop() {
MenuPrincipal();
}
void MenuPrincipal() {
int ValEstado = 0; // Inicializa valores para ValEstado
int x = analogRead (0);
lcd.setCursor(0,0); // Posiciona Cursor
if (x < 80) { // Define valores máximos para UP em ValEstado = 1
}
else if (x < 200) {
ValEstado = 1;
}
else if (x < 400){ // Define valores máximos para Down em ValEstado = 2
ValEstado = 2;
}
else if (x < 600){ // Define ação nula para Left
ValEstado = 4;
}
else if (x < 800){ // Define valores máximos para Select em ValEstado = 3
ValEstado = 3;
}
if (Menu < 0 || Menu > 4) {
Menu = 0;
}
if (ValEstado != estado) {
if (ValEstado == 1) {
Menu = Menu - 1;
displayMenu(Menu);
} else if (ValEstado == 2) {
Menu = Menu + 1;
displayMenu(Menu);
} else if (ValEstado == 3) {
selectMenu(Menu);
}
else if (ValEstado == 4) {
displayMenu(Menu);
}
estado = ValEstado;
}
delay(5);
}
void displayMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("--> Medicoes <--"); // Imprime na tela a opção do Menu
break;
case 2:
clearPrintTitle();
lcd.print ("--> Calculos <--"); // Imprime na tela a opção do Menu
break;
case 3:
clearPrintTitle();
lcd.print ("---> Item 3 <---"); // Imprime na tela a opção do Menu
break;
case 4:
clearPrintTitle();
lcd.print ("---> Item 4 <---"); // Imprime na tela a opção do Menu
break;
}
}
void clearPrintTitle() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Fisica ");
lcd.setCursor(0,1);
}
void selectMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
sensor(); // Imprime na tela opção escolhida
break;
case 2:
clearPrintTitle();
lcd.print ("Selec. Item 2"); // Imprime na tela opção escolhida
break;
case 3:
clearPrintTitle();
lcd.print ("Selec. Item 3"); // Imprime na tela opção escolhida
break;
case 4:
clearPrintTitle();
lcd.print ("Selec. Item 4"); // Imprime na tela opção escolhida
break;
}
}
void sensor () {
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);
//Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29.
emon1.current(pino_sct, 29);
//Informacoes iniciais display
lcd.setCursor(0,0);
lcd.print("Corr.(A):");
lcd.setCursor(0,1);
lcd.print("Pot. (W):");
double Irms = emon1.calcIrms(1480);
//Mostra o valor da corrente
Serial.print("Corrente : ");
Serial.print(Irms); // Irms
lcd.setCursor(10,0);
lcd.print(Irms);
//Calcula e mostra o valor da potencia
Serial.print(" Potencia : ");
Serial.println(Irms*rede);
lcd.setCursor(10,1);
lcd.print(" ");
lcd.setCursor(10,1);
lcd.print(Irms*rede,1);
delay(1000);
}
Tags:
Boa noite.
O pessoal vai recomendar você retirar o seu código da área de texto e anexa-lo como arquivo ok.
Aparentemente, você está chamando a função sensor() que é a responsável pela leitura dos sensores, apenas no switch case 1. Por isso ele só vai atualizar o valor das leituras quando o programa estiver nesse ponto.
A estrutura do seu programa está bem confusa. Se você quer que ele mantenha as leituras dos sensores constantes, chame a função sensor() no loop, e use o switch case para alternar apenas as telas do display.
Olá, obrigado por responder, mas como eu podeira chamar a função do sensor no void loop, pois já realizei esse processo, e acabou em erro
Boa noite ,
Links que podem ser úteis:
http://labdegaragem.com/forum/topics/cria-o-de-menu-com-arduino
http://labdegaragem.com/forum/topics/menu-usando-lcd-arduino-e-5-bo...
e muito mais no Lab.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por