#include <Wire.h> // biblioteca para conexión I2C
#include <Adafruit_GFX.h> // biblioteca para gráficos
#include <Adafruit_SSD1306.h> // biblioteca para el controlador del OLED
#include <Keypad.h>
#include <ESP32Servo.h>
#define SCREEN_WIDTH 128 // OLED ancho, en pixeles
#define SCREEN_HEIGHT 64 // OLED alto, en pixeles
#define pinServo 27
#define pinRed 26
#define pinGreen 33
#define pinBlue 25
// crea el objeto OLED con conexión I2C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// importa libreria Keypad
// 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);
Servo servo;
void escribirPantalla(String comando){
oled.clearDisplay(); // borra la pantalla
oled.setTextSize(3); // selecciona tamaño de texto
oled.setTextColor(WHITE); // selecciona color de texto
oled.setCursor(20, 25); // posiciona el cursor
oled.println(comando); // selecciona texto a imprimir
oled.display(); // imprime en el OLED
}
void setup() {
Serial.begin(9600); // inicializa puerto serie
servo.attach(pinServo);
// initialize OLED display with I2C address 0x3C
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Si la conexion I2C con el OLED falla
Serial.println(F("Falla conexión con SSD1306 OLED")); // imprime en monitor serie
while (1);
}
delay(500); // espera 500 milisegundo para la inicialización
servo.write(0);
pinMode(pinRed, OUTPUT);
digitalWrite(pinRed, HIGH);
}
void loop() {
// obtiene tecla presionada y asigna a variable
char key = keypad.getKey();
// comprueba que se haya presionado una tecla
if (key) {
escribirPantalla(String(key));
// envia a monitor serial la tecla presionada
Serial.println(key);
}
}
/*
1.- Definir correctamente los pines de los led
2.- Obtener la entrada del pad numerico en un String
2.1- Mostrar los datos en la pantalla
3.- Convertir la entrada del String a un int (puedes usar la funcion .toInt)
4.- Pasar el entero al servo
5.- Encender el Led dependiendo del número pasado al led.
*/