// importa libreria Keypad
#include <Keypad.h>
#include <Wire.h> //Biblioteca utilizada gerenciar a comunicação entre dispositicos através do protocolo I2C
#include <LiquidCrystal_I2C.h> //Biblioteca controlar display 16x2 através do
#include <iostream>
#include <cstring>
int BUZZZER_PIN = 23; // ESP32 pin GPIO18 connected to piezo buzzer
String variavel_qrcode ="";
int qtde_caracteres_qrcode = 0;
// define numero de filas
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// define la distribucion de teclas
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
// pines correspondientes a las filas
uint8_t colPins[COLS] = { 16, 4, 2, 15 };
// pines correspondientes a las columnas
uint8_t rowPins[ROWS] = { 19, 18, 5, 17 };
// crea objeto con los prametros creados previamente
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27,16,2); //Cria o objeto lcd passando como parâmetros o endereço, o nº de colunas e o nº de linhas
void setup() {
Serial.begin(9600);
pinMode(BUZZZER_PIN, OUTPUT);
lcd.init(); //Inicializa a comunicação com o display já conectado
lcd.clear(); //Limpa a tela do display
lcd.backlight(); //Aciona a luz de fundo do display
lcd.print("ENTRADA DE ITENS");
lcd.setCursor(0,1);
lcd.print("QR-CODE:");
}
void resetar_tela_inicial(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ENTRADA DE ITENS");
lcd.setCursor(0,1);
lcd.print("QR-CODE:");
}
void enviar_qrcode(){
lcd.clear();
lcd.print("ENVIADO!");
digitalWrite(BUZZZER_PIN, HIGH);
delay(500);
digitalWrite(BUZZZER_PIN, LOW);
resetar_tela_inicial();
variavel_qrcode = "";
qtde_caracteres_qrcode = 0;
}
void limpar_infos(){
lcd.clear();
lcd.print("INVALIDO!");
digitalWrite(BUZZZER_PIN, HIGH);
delay(100);
digitalWrite(BUZZZER_PIN, LOW);
delay(100);
digitalWrite(BUZZZER_PIN, HIGH);
delay(100);
digitalWrite(BUZZZER_PIN, LOW);
variavel_qrcode = "";
qtde_caracteres_qrcode=0;
//delay(3000);
resetar_tela_inicial();
}
void loop() {
// obtiene tecla presionada y asigna a variable
char key = keypad.getKey();
// comprueba que se haya presionado una tecla
if (key) {
// envia a monitor serial la tecla presionada
if(key == '*'){
resetar_tela_inicial();
variavel_qrcode = "";
qtde_caracteres_qrcode = 0;
}
else{
if(key == '#'){
if(qtde_caracteres_qrcode == 6){
enviar_qrcode();
}
else{
limpar_infos();
}
}
else{
lcd.print(key);
variavel_qrcode = variavel_qrcode + key;
qtde_caracteres_qrcode = qtde_caracteres_qrcode + 1;
}
}
Serial.print(qtde_caracteres_qrcode);
}
}