#include "nose.h"
#include <Wire.h> /*~ Librería I2C ~*/
#include <LiquidCrystal_I2C.h> /*~ Librería LCD ~*/
/*~ Los siguientes arrays contienen un caracter, es decir se indica que pixel se enciendo o apaga dependiendo si es 1 o 0 ~*/
/*~ Icono o caracter 1 ~*/
byte caracter1 [ ] = {
B01110, /*~ ⬜⬛⬛⬛⬜~*/
B01010, /*~ ⬜⬛⬜⬛⬜~*/
B01110, /*~ ⬜⬛⬛⬛⬜~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B00100, /*~ ⬜⬜⬛⬜⬜~*/
B00100, /*~ ⬜⬜⬛⬜⬜~*/
B01010, /*~ ⬜⬛⬛⬛⬜~*/
B10001 /*~ ⬛⬜⬜⬜⬛~*/
};
/*~ Icono o caracter 2 ~*/
byte obj [ ] = {
B01010, /*~ ⬜⬛⬜⬛⬜~*/
B10101, /*~ ⬛⬜⬛⬜⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B10101, /*~ ⬛⬜⬛⬜⬛~*/
B01010 /*~ ⬜⬛⬜⬛⬜~*/
};
LiquidCrystal_I2C lcd ( 0x27, 16, 2 ); /*~ Instancia de la clase para el manejo de la pantalla ( Dirección I2C, cantidad de columnas, cantidad de filas ) ~*/
#define VRX_PIN 27 // ESP32 pin GPIO36 (ADC0) connected to VRX pin
#define VRY_PIN 13 // ESP32 pin GPIO39 (ADC0) connected to VRY pin
#define MAX_VERT 4095 //
// valor maximo del joystick
#define MAX_HORI 4095 //
// Conexiones de los botones
#define BTN_EXIT 34
#define BTN_ENTER 35
int valueX = 0; // to store the X-axis value
int valueY = 0; // to store the Y-axis value
int LugarDelCaracter = 0; // posicion del caracter
int ValorDelCaracter = 0; // posicion de la letra
char Nombre[3]; //cadena con el nombre
// #define CS_PIN 5
// File root;
void setup ( void ) {
Serial.begin(115200);
lcd.init ( ); /*~ Inicializar la pantalla LCD ~*/
lcd.backlight();
pinMode(VRX_PIN, INPUT); // Entrada para el eje X
pinMode(VRY_PIN, INPUT); // Entrada para el eje Y
pinMode(BTN_EXIT, INPUT); // BOTON ROJO
pinMode(BTN_ENTER, INPUT); // Boton NEGRO
//- Personaje -
lcd.createChar ( 0, caracter1); /*~ Indicar al programa que genere un caracter a partir del array de bits. ~*/
//- objetivo -
lcd.createChar ( 1, obj ); /*~ Indicar al programa que genere otro caracter. ~*/
//Serial.print("Initializing SD card... ");
/* if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.");
Serial.println("Files in the card:");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("");
}*/
}
void loop ( void ) {
ElegirNombre(); //Selector del nombre
delay(100);
lcd.clear();
}
void ElegirNombre( void ){
valueX = analogRead(VRX_PIN);
valueY = analogRead(VRY_PIN);
//unsigned long currentMillis = millis();
char abc[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
//Mover posicion:
if (valueX < 100) { LugarDelCaracter = (LugarDelCaracter < 2) ? LugarDelCaracter + 1 : 2; }//Derecha
if (valueX == MAX_HORI) { LugarDelCaracter = (LugarDelCaracter > 0) ? LugarDelCaracter - 1 : 0; }//Izquierda
//mover letras:
if (valueY < 100) {ValorDelCaracter= (ValorDelCaracter < 25) ? ValorDelCaracter+ 1 : 0; } //Abajo
if (valueY == MAX_VERT) {ValorDelCaracter= (ValorDelCaracter > 0) ? ValorDelCaracter- 1 : 25; } //Arriba
Serial.print(LugarDelCaracter);
Serial.println(abc[ ValorDelCaracter ]);
lcd.setCursor(0,0);
lcd.print("Nombre:");
//letra espacio 1
lcd.setCursor(8,0);
lcd.print(Nombre[0]);
//letra espacio 2
lcd.setCursor(10,0);
lcd.print(Nombre[1]);
//letra espacio 3
lcd.setCursor(12,0);
lcd.print(Nombre[2]);
// Mover cursor a la posición actual y activar parpadeo
lcd.setCursor(8 + (LugarDelCaracter* 2), 0);
lcd.print(Nombre[LugarDelCaracter]);
lcd.blink();
if (LugarDelCaracter== 0) {
lcd.setCursor(8, 0);
Nombre[0] = abc[ValorDelCaracter];
lcd.blink();
} else if (LugarDelCaracter== 1) {
lcd.setCursor(10, 0);
Nombre[1] = abc[ValorDelCaracter];
lcd.blink();
} else if (LugarDelCaracter== 2) {
lcd.setCursor(12, 0);
Nombre[2] = abc[ValorDelCaracter];
lcd.blink();
}
Serial.println(Nombre);
}El brillo de la pantalla puede modularse
con el potenciómetro de la parte trasera.