// Definición de pines
const int a = 4;
const int b = 16;
const int c = 17;
const int d = 5;
const int e = 18;
const int f = 19;
const int g = 21;
const int dig1 = 22; // Pin para el primer dígito
const int dig2 = 23; // Pin para el segundo dígito
// Contador
int counter = 0;
// Velocidad de conteo en milisegundos
unsigned long interval = 1000; // Por defecto, 1 segundo
unsigned long lastUpdate = 0; // Marca de tiempo del último conteo
bool autoCounting = false; // Control de conteo automático
// Matriz para representar números en el display de 7 segmentos
const byte numToSegment[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
};
void setup() {
// Configuración de pines
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
Serial.begin(115200);
}
void loop() {
// Leer comandos del monitor serial
if (Serial.available()) {
String command = Serial.readStringUntil('\n');
command.trim(); // Quitar espacios o saltos de línea
if (command == "+") {
counter++;
if (counter > 99) counter = 0;
} else if (command == "-") {
counter--;
if (counter < 0) counter = 99;
} else if (command == "start") {
autoCounting = true;
} else if (command == "stop") {
autoCounting = false;
} else if (command.startsWith("S")) {
int newInterval = command.substring(1).toInt();
if (newInterval > 0) {
interval = newInterval;
Serial.println("Nuevo intervalo: " + String(interval) + " ms");
}
}
}
// Conteo automático
if (autoCounting && millis() - lastUpdate >= interval) {
lastUpdate = millis();
counter++;
if (counter > 99) counter = 0;
}
// Actualizar display
displayCounter(counter);
}
void displayCounter(int value) {
int tens = value / 10; // Dígito de las decenas
int units = value % 10; // Dígito de las unidades
// Mostrar el primer dígito (decenas)
setSegment(tens);
digitalWrite(dig1, LOW); // Activar el dígito 1
delay(5); // Breve tiempo para visualizar
digitalWrite(dig1, HIGH); // Desactivar el dígito
// Mostrar el segundo dígito (unidades)
setSegment(units);
digitalWrite(dig2, LOW); // Activar el dígito 2
delay(5); // Breve tiempo para visualizar
digitalWrite(dig2, HIGH); // Desactivar el dígito
}
void setSegment(int num) {
digitalWrite(a, numToSegment[num][0]);
digitalWrite(b, numToSegment[num][1]);
digitalWrite(c, numToSegment[num][2]);
digitalWrite(d, numToSegment[num][3]);
digitalWrite(e, numToSegment[num][4]);
digitalWrite(f, numToSegment[num][5]);
digitalWrite(g, numToSegment[num][6]);
}