#include <LiquidCrystal.h>
#include <LiquidMenu.h>
#include <ezButton.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define AUTO_PRESS_DELAY 200 // How quickly the button press should repeat when held
//double current_temp = 190; // celsius
int current_temp = 190;
int setpointTemp=200; // para apagar
float rot=5.5;
String cwccw="CW";
//******************************************
//* BOTÕES *
//******************************************
int pino_botao_up=7;
int pino_botao_select=8;
int pino_botao_down=9;
long last_press_time = 0;
ezButton botao_up(pino_botao_up);
ezButton botao_select(pino_botao_select);
ezButton botao_down(pino_botao_down);
//******************************************
//* MENU *
//******************************************
// Mensagem de BOOT do display LCD (ecrã 1)
LiquidLine linha1_screen1(0, 0, " PET FILAMENT ");
LiquidLine linha2_screen1(0, 1, " MAKER ");
LiquidScreen logo_screen(linha1_screen1, linha2_screen1);
//Linhas do ecrã 2 // A construir
LiquidLine linha1_screen2(0, 0,"T:",current_temp,".C ");
LiquidLine linha2_screen2(8, 0,"SP:",setpointTemp,".C");
//LiquidLine linha1_screen2(0, 0,"T:",current_temp,"ºC SP:",setpointTemp);
LiquidLine linha3_screen2(0, 1,"ROT:",rot,"/min");
LiquidLine linha4_screen2(13, 1,"CCW");
LiquidScreen screenStatus(linha1_screen2,linha2_screen2,linha3_screen2,linha4_screen2);
//Linhas do ecrã 3
LiquidLine linha1_screen3(1, 0, " ECRAN_2: L1");
LiquidLine linha2_screen3(1, 1, " ECRAN_2: L2");
LiquidLine linha3_screen3(1, 0, " ECRAN_2: L3");
LiquidLine linha4_screen3(1, 1, " Menu Principal");
LiquidScreen screen_3(linha1_screen3,linha2_screen3,linha3_screen3,linha4_screen3);
LiquidMenu myMenu(lcd,logo_screen,screenStatus,screen_3); // Criar MENU
void setup() {
// put your setup code here, to run once:
// put your setup code here, to run once:
pinMode(13, OUTPUT);
lcd.begin(16,2);
Serial.begin(9600);
delay(3000);
// Ecrã nº1 - Boot
myMenu.add_screen(logo_screen);
myMenu.update();
delay(3000);
myMenu.init();
// Ecrã nº2
//screenStatus.set_focusPosition(Position::LEFT);
linha1_screen2.attach_function(1, menuConfig);
linha2_screen2.attach_function(1, menuConfig);
linha3_screen2.attach_function(1, menuConfig);
myMenu.add_screen(screenStatus);
// Ecrã nº3
screen_3.set_focusPosition(Position::LEFT);
linha1_screen3.attach_function(1, ligarLed); // Função que chama esta linha
linha2_screen3.attach_function(1, desligarLed); // Função que chama esta linha
linha3_screen3.attach_function(1, ligarLed); // Função que chama esta linha
linha4_screen3.attach_function(1, menuPrincipal); // Função que chama esta linha
myMenu.add_screen(screen_3);
// Definição de quantas linhas tem cada ecrã. Todos os ecrãs vão ter 2 linhas
screenStatus.set_displayLineCount(4); // ecrã 2
screen_3.set_displayLineCount(2); // ecrã 3
myMenu.change_screen(2); // Para iniciar no ecrã 2
myMenu.set_focusedLine(0); // Coloca o cursor ">" na linha 0
myMenu.update(); // Atualiza o Menu
}
void loop() {
// put your main code here, to run repeatedly:
botao_up.loop();
botao_select.loop();
botao_down.loop();
if (!botao_up.getState() && millis() - last_press_time > AUTO_PRESS_DELAY)
{
last_press_time = millis();
myMenu.switch_focus(false);
myMenu.update();
}
else if (!botao_select.getState() && millis() - last_press_time > AUTO_PRESS_DELAY)
{
last_press_time = millis();
myMenu.call_function(1);
myMenu.update();
}
else if (!botao_down.getState() && millis() - last_press_time > AUTO_PRESS_DELAY)
{
last_press_time = millis();
myMenu.switch_focus(true);
myMenu.update();
}
}
void ligarLed(){
digitalWrite(13, true);
}
void desligarLed(){
digitalWrite(13, false);
}
void menuConfig(){
myMenu.change_screen(3);
myMenu.set_focusedLine(0);
myMenu.update();
}
void menuPrincipal(){
myMenu.change_screen(2);
myMenu.set_focusedLine(0);
myMenu.update();
}