/*w
TESTE BIBLIOTECA RDM6300
by losr
*/
// INCLUSÃO DA BIBLIOTECA
//#include <rdm6300.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// ===== Declarações e Definições das Bibliotecas ===== //
LiquidCrystal_I2C lcd(0x27, 20, 4); // Cria o objeto LCD | sint.: nome(endereço, numColunas, numLinhas);
// DEFINIÇÃO DO PINO DE RX
#define PINO_RX 5
// CRIANDO A VARIÁVEL TIPO RDM6300
//Rdm6300 leitor;
byte seta[8] = { // Criando simbolo 'seta'
B00000,
B11000,
B11110,
B11111,
B11110,
B11000,
B00000,
B00000
};
// MAPEAMENTO DE HARDWARE
// Controle
#define btu 32 // Up
#define bte 27 // Down
#define btd 33 // Enter
#define btb 26 // Back
bool btu_f, btb_f, btd_f, bte_f;
int line_f, menu, sub_menu;
const int menu_max = 4;
char* telas[menu_max] = {
"Total: ",
"Adicionar",
"Remover",
"Finalizar Compra"
};
long allTags[] = {
12793390,
12780323,
3468522,
3414016
};
float preco[sizeof(allTags)] = {
2.0,
5.0,
10.0,
6.5
};
char* produto[sizeof(allTags)] = {
"Bombom",
"Bolacha",
"Leite",
"Suco"
};
int lista[sizeof(allTags)] = { // Lista da quantidade de itens comprados
0,
0,
0,
0
};
// Pequeno banco de dados
float total = 0.0;
// ========== Declaração de Funções ========== //
void controle(), attLcd();
//long lerRFID();
void setup() {
Serial.begin(112500); // Esse valor é referente a frequência de comunicação serial de um Esp32, NUNCA ALTERE
//leitor.begin(PINO_RX); // Inicializando o leitor
lcd.init(); // INICIA A COMUNICAÇÃO COM O DISPLAY
lcd.backlight(); // LIGA A ILUMINAÇÃO DO DISPLAY
lcd.clear(); // LIMPA O DISPLAY
lcd.createChar(0, seta); // Criando caracter com simbolo 'seta'
pinMode(btu, INPUT_PULLUP);
pinMode(btd, INPUT_PULLUP);
pinMode(bte, INPUT_PULLUP);
pinMode(btb, INPUT_PULLUP);
attLcd(); // Atualiza a primeira vez no LCD
}
void loop() {
controle();
}
void controle() // Ler botões
{
// Ao pressionar botão:
if (!digitalRead(bte)) bte_f = 0x01;
if (!digitalRead(btb)) btb_f = 0x01;
if (!digitalRead(btu)) btu_f = 0x01;
if (!digitalRead(btd)) btd_f = 0x01;
// Ao despressionar Enter
if (digitalRead(bte) && bte_f) {
bte_f = 0x00;
if (sub_menu < 2) sub_menu++;
attLcd();
// Comando a ser executado
}
// Ao despressionar Back
if (digitalRead(btb) && btb_f) {
btb_f = 0x00;
if (sub_menu > 0) sub_menu--;
attLcd();
// Comando a ser executado
}
// Ao despressionar Up
if (digitalRead(btu) && btu_f) {
btu_f = 0x00;
if (sub_menu > 0) {
if (menu > 1) {
menu--;
if (line_f > 0) line_f--;
attLcd();
}
}
// Comando a ser executado
}
// Ao despressionar Down
if (digitalRead(btd) && btd_f) {
bte_f = 0x00;
if (sub_menu > 0) {
if (menu < menu_max - 1) {
menu++;
if (line_f < 3) line_f++;
attLcd();
}
}
}
// Comando a ser executado
}
/*
long lerRFID() {
if (leitor.get_new_tag_id()) { // Analisa se recebe um novo sinal de TAG
long tag = leitor.get_tag_id(); // Se sim, adiciona esse valor à variável tag
Serial.println(tag); // Exibe o valor da tag
return tag;
}
}*/
void attLcd() // Atualizar LCD
{
switch (sub_menu) // Comutar submenu
{
case 0: // Caso 0
lcd.clear();
lcd.setCursor(0, 0);
lcd.write(byte(0));
lcd.print(" Iniciar Compra");
break;
case 1:
lcd.clear();
lcd.setCursor(0, 0);
switch (line_f) {
case 0:
lcd.write(byte(0));
lcd.print(" "); // Imprime "> " na 1° linha
lcd.print(telas[menu]); // Imprime tela com valor do menu atual
lcd.setCursor(0, 1); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 1]);
lcd.setCursor(0, 2); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 2]);
lcd.setCursor(0, 3); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 3]);
break;
case 1:
lcd.print(" "); // Imprime "> " na 1° linha
lcd.print(telas[menu-1]); // Imprime tela com valor do menu atual
lcd.setCursor(0, 1); // Troca a linha
lcd.write(byte(0));
lcd.print(" ");
lcd.print(telas[menu]);
lcd.setCursor(0, 2); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 1]);
lcd.setCursor(0, 3); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 2]);
break;
case 2:
lcd.print(" "); // Imprime "> " na 1° linha
lcd.print(telas[menu - 2]); // Imprime tela com valor do menu atual
lcd.setCursor(0, 1); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu - 1]);
lcd.setCursor(0, 2); // Troca a linha
lcd.write(byte(0));
lcd.print(" ");
lcd.print(telas[menu]);
lcd.setCursor(0, 3); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 1]);
break;
case 3:
lcd.print(" "); // Imprime "> " na 1° linha
lcd.print(telas[menu - 3]); // Imprime tela com valor do menu atual
lcd.setCursor(0, 1); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu - 2]);
lcd.setCursor(0, 2); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu - 1]);
lcd.setCursor(0, 3); // Troca a linha
lcd.write(byte(0));
lcd.print(" ");
lcd.print(telas[menu]);
break;
}
if (!line_f) // Se estiver na primeira linha
{
lcd.write(byte(0));
lcd.print(" "); // Imprime "> " na 1° linha
lcd.print(telas[menu]); // Imprime tela com valor do menu atual
lcd.setCursor(0, 1); // Troca a linha
lcd.print(" ");
lcd.print(telas[menu + 1]);
} else // Senão, quando estiver na segunda linha
{
lcd.print(" ");
lcd.print(telas[menu - 1]);
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.print(" ");
lcd.print(telas[menu]);
}
break;
}
Serial.print("Menu: ");
Serial.println(menu + 1);
}Enter
Back
Up
Down