#define BUTTON 4
#define BUZZER 5
// Pines de segmentos del display a-g
int segments[7] = {12, 13, 14, 15, 16, 17, 18};
// Matriz de números (0-9) en display de 7 segmentos
byte numbers[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
int count = 0;
int lastButtonState = HIGH;
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
showNumber(count);
}
void loop() {
int buttonState = digitalRead(BUTTON);
if (buttonState == LOW && lastButtonState == HIGH) {
count++;
if (count > 9) count = 0;
showNumber(count);
if (count == 9) {
digitalWrite(BUZZER, HIGH);
delay(200);
digitalWrite(BUZZER, LOW);
}
delay(200); // Antirebote
}
lastButtonState = buttonState;
}
// Función para mostrar número en el display (ÁNODO COMÚN)
void showNumber(int num) {
for (int i = 0; i < 7; i++) {
// Invertimos la lógica: 1 = LOW (enciende), 0 = HIGH (apaga)
digitalWrite(segments[i], numbers[num][i] ? LOW : HIGH);
}
}