#include <Arduino.h>
// Definición de pines
#define SSD_COM1_PIN 5 // Pin de COM1 conectado a 5V
#define SSD_COM2_PIN 0 // Pin de COM2 conectado a GND
#define SSD_A_PIN 22
#define SSD_B_PIN 23
#define SSD_C_PIN 17
#define SSD_D_PIN 5
#define SSD_E_PIN 18
#define SSD_F_PIN 21
#define SSD_G_PIN 19
#define SSD_DP_PIN 16
#define START_BUTTON_PIN 25 // Pin del botón START
#define STOP_BUTTON_PIN 33 // Pin del botón STOP
volatile bool counting = false; // Variable para controlar el estado del contador
volatile int counter = 0; // Variable para almacenar el valor del contador
void startCount() {
counting = true;
}
void stopCount() {
counting = false;
}
void setup() {
// Configuración de los pines del display de siete segmentos
pinMode(SSD_A_PIN, OUTPUT);
pinMode(SSD_B_PIN, OUTPUT);
pinMode(SSD_C_PIN, OUTPUT);
pinMode(SSD_D_PIN, OUTPUT);
pinMode(SSD_E_PIN, OUTPUT);
pinMode(SSD_F_PIN, OUTPUT);
pinMode(SSD_G_PIN, OUTPUT);
pinMode(SSD_DP_PIN, OUTPUT);
pinMode(SSD_COM1_PIN, OUTPUT);
pinMode(SSD_COM2_PIN, OUTPUT);
// Configuración de los pines de los botones
pinMode(START_BUTTON_PIN, INPUT_PULLUP);
pinMode(STOP_BUTTON_PIN, INPUT_PULLUP);
// Attach interrupt for START button
attachInterrupt(digitalPinToInterrupt(START_BUTTON_PIN), startCount, FALLING);
// Attach interrupt for STOP button
attachInterrupt(digitalPinToInterrupt(STOP_BUTTON_PIN), stopCount, FALLING);
}
void loop() {
if (counting) {
// Mostrar el valor del contador en el display de siete segmentos
displayNumber(counter);
// Incrementar el contador y reiniciarlo si alcanza 10
counter = (counter + 1) % 10;
// Esperar 1 segundo
delay(1000);
}
}
// Función para mostrar un número en el display de siete segmentos
void displayNumber(int num) {
// Apagar todos los segmentos del display
digitalWrite(SSD_A_PIN, LOW);
digitalWrite(SSD_B_PIN, LOW);
digitalWrite(SSD_C_PIN, LOW);
digitalWrite(SSD_D_PIN, LOW);
digitalWrite(SSD_E_PIN, LOW);
digitalWrite(SSD_F_PIN, LOW);
digitalWrite(SSD_G_PIN, LOW);
digitalWrite(SSD_DP_PIN, LOW);
// Configurar los segmentos para mostrar el número dado
switch (num) {
case 0:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
digitalWrite(SSD_E_PIN, HIGH);
digitalWrite(SSD_F_PIN, HIGH);
break;
case 1:
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
break;
case 2:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
digitalWrite(SSD_E_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
break;
case 3:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
break;
case 4:
digitalWrite(SSD_F_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
break;
case 5:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_F_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
break;
case 6:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_F_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
digitalWrite(SSD_E_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
break;
case 7:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
break;
case 8:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
digitalWrite(SSD_E_PIN, HIGH);
digitalWrite(SSD_F_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
break;
case 9:
digitalWrite(SSD_A_PIN, HIGH);
digitalWrite(SSD_B_PIN, HIGH);
digitalWrite(SSD_C_PIN, HIGH);
digitalWrite(SSD_D_PIN, HIGH);
digitalWrite(SSD_F_PIN, HIGH);
digitalWrite(SSD_G_PIN, HIGH);
break;
default:
// En caso de un número inválido, apagar todos los segmentos
digitalWrite(SSD_A_PIN, LOW);
digitalWrite(SSD_B_PIN, LOW);
digitalWrite(SSD_C_PIN, LOW);
digitalWrite(SSD_D_PIN, LOW);
digitalWrite(SSD_E_PIN, LOW);
digitalWrite(SSD_F_PIN, LOW);
digitalWrite(SSD_G_PIN, LOW);
digitalWrite(SSD_DP_PIN, LOW);
break;
}
}