#include <Keypad.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definición de pines para el LED RGB
#define RED_PIN 10
#define GREEN_PIN 11
#define BLUE_PIN 12
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const byte ROWS = 4; // Cuatro filas
const byte COLS = 4; // Cuatro columnas
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; // Conectar a los pines de fila del teclado
byte colPins[COLS] = {9, 8, 7, 6}; // Conectar a los pines de columna del teclado
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
// Inicializar la pantalla OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Error al iniciar la pantalla OLED"));
for(;;);
}
// Limpiar la pantalla
display.clearDisplay();
display.display();
// Apagar el LED RGB inicialmente
setColor(0x000000);
}
void setColor(uint32_t color) {
analogWrite(RED_PIN, 255 - ((color >> 16) & 0xFF));
analogWrite(GREEN_PIN, 255 - ((color >> 8) & 0xFF));
analogWrite(BLUE_PIN, 255 - (color & 0xFF));
}
void loop() {
char key = keypad.getKey();
if (key) {
uint32_t color = 0x000000;
const char* colorName = "";
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Tecla presionada:");
display.setTextSize(2);
display.setCursor(0, 16);
display.println(key);
display.setTextSize(1);
display.setCursor(0, 40);
display.print("Color: ");
switch (key) {
case '1':
color = 0,255,0; // Cian
colorName = "Rojo";
display.setCursor(50, 40);
break;
case '2':
color = 0xFF00FF; //
colorName = "Verde";
display.setCursor(50, 40);
break;
case '3':
color = 0xFFFF00; //
colorName = "Azul";
display.setCursor(50, 40);
break;
case 'A':
color = 0x00FF00; //
colorName = "Magenta";
display.setCursor(50, 40);
break;
case '4':
color = 0x808000; //
colorName = "Diamante";
display.setCursor(50, 40);
break;
case '5':
color = 0x008080; // Verde azulado
colorName = "Mostaza";
display.setCursor(50, 40);
break;
case '6':
color = 0x50C878; //
colorName = "Lila";
display.setCursor(50, 40);
break;;
case 'B':
color = 0xCD5C5C; //
colorName = "Celeste";
display.setCursor(50, 40);
break;
case '7':
color = 0x8A2BE2; // Azul violeta
colorName = "Verde Limon";
display.setCursor(50, 40);
break;;
case '8':
color = 0xFFA500; // Naranja
colorName = "Azul Claro";
display.setCursor(50, 40);
break;
case '9':
color = 0xC0C0C0; // Plata
colorName = "Amarillo";
display.setCursor(50, 40);
break;
case 'C':
color = 0x660066; // Plata
colorName = "Blanco";
display.setCursor(50, 40);
break;
case '*':
color = 0x0000FF; // Azul
colorName = "Biche";
display.setCursor(50, 40);
break;
case '0':
color = 0xF0FF00; //
colorName = "Indigo";
display.setCursor(50, 40);
break;
case '#':
color = 0xF0FFFF; // Azul violeta
colorName = "Carmin";
display.setCursor(50, 40);
break;
case 'D':
color = 0XF2DDCC; // Violeta
colorName = "Verde Pastel";
display.setCursor(50, 40);
break;
default:
colorName = "Desconocido";
display.setCursor(50, 40);
break;
}
// Establecer el color del LED
setColor(color);
// Mostrar el nombre del color
display.println(colorName);
// Mostrar los valores RGB en la pantalla OLED
display.setCursor(0, 50);
display.print("RGB: ");
display.print((color >> 16) & 0xFF);
display.print(", ");
display.print((color >> 8) & 0xFF);
display.print(", ");
display.print(color & 0xFF);
display.display();
}
}