#include <Arduino.h>
// Pines para el display de 7 segmentos (cátodo común) en el ESP32
const int segmentPins[] = {2, 15, 0, 16, 4, 17, 5};
const int dpPin = 18; // Pin para el punto del display
// Pines para los interruptores DIP
const int dipSwitches[] = {33, 32, 25, 26};
// Declaración de la matriz de valores binarios de combinaciones del display
const byte numberDisplay[16] = {
B1000000, // Número 0
B1111001, // Número 1
B0100100, // Número 2
B0110000, // Número 3
B0011001, // Número 4
B0010010, // Número 5
B0000010, // Número 6
B1111000, // Número 7
B0000000, // Número 8
B0010000, // Número 9
B0001000, // A
B0000011, // B
B1000110, // C
B0100001, // D
B0000110, // E
B0001110 // F
};
void setup() {
Serial.begin(115200);
Serial.println("Entrada binaria a display de 7 segmentos");
// Inicialización de los pines del display
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(dpPin, OUTPUT);
digitalWrite(dpPin, HIGH);
// Inicialización de los pines de los interruptores DIP
for (int i = 0; i < 4; i++) {
pinMode(dipSwitches[i], INPUT_PULLUP);
}
}
void loop() {
int binaryInput = 0;
// Leer los interruptores DIP
for (int i = 0; i < 4; i++) {
int switchState = digitalRead(dipSwitches[i]);
binaryInput |= (switchState == LOW ? 1 : 0) << (3 - i);
}
// Mostrar el valor binario en el Serial Monitor
Serial.print("Entrada binaria: ");
Serial.println(binaryInput, BIN);
// Activar el display con el número correspondiente
activarDisplay(binaryInput);
delay(200); // Pequeña pausa para evitar lecturas demasiado rápidas
}
void activarDisplay(int number) {
byte arrayBit = numberDisplay[number];
for (int i = 0; i < 7; i++) {
int bit = bitRead(arrayBit, i);
digitalWrite(segmentPins[i], bit);
}
}