const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // Pines conectados a los segmentos del display
const int switchPins[4] = {9, 10, 11, 12}; // Pines conectados a los interruptores
const byte numbers[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
int lastNumber = -1; // Variable para almacenar el último número mostrado
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT); // Configura los pines de los segmentos como salidas
}
for (int i = 0; i < 4; i++) {
pinMode(switchPins[i], INPUT_PULLUP); // Configura los pines de los interruptores como entradas con pull-up interno
}
}
void loop() {
int number = readSwitches();
if (number != lastNumber) { // Solo actualiza si el número ha cambiado
displayNumber(number);
lastNumber = number; // Actualiza el último número mostrado
}
delay(100); // Pequeño retraso para evitar rebotes
}
int readSwitches() {
int value = 0;
for (int i = 0; i < 4; i++) {
if (digitalRead(switchPins[i]) == LOW) {
value |= (1 << i); // Lee el estado de los interruptores y forma el número
}
}
return value;
}
void displayNumber(int num) {
byte segments = numbers[num];
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], bitRead(segments, i));
}
}