// Definición de pines para el display de 7 segmentos
const int segA = 2; // Segmento a
const int segB = 4; // Segmento b
const int segC = 5; // Segmento c
const int segD = 18; // Segmento d
const int segE = 19; // Segmento e
const int segF = 21; // Segmento f
const int segG = 22; // Segmento g
// Pin para el potenciómetro
const int POT_PIN = 34; // Pin ADC para el potenciómetro
// Array de pines para fácil inicialización
const int NUM_SEGMENTOS = 7;
const int segmentos[NUM_SEGMENTOS] = {segA, segB, segC, segD, segE, segF, segG};
// Definición de los patrones para cada número hexadecimal (0-F)
// 1 = segmento encendido, 0 = segmento apagado
// Orden: a, b, c, d, e, f, g
const byte PATRONES_HEX[16][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
{1, 1, 1, 0, 1, 1, 1}, // A
{0, 0, 1, 1, 1, 1, 1}, // b
{1, 0, 0, 1, 1, 1, 0}, // C
{0, 1, 1, 1, 1, 0, 1}, // d
{1, 0, 0, 1, 1, 1, 1}, // E
{1, 0, 0, 0, 1, 1, 1} // F
};
// Variables de control
int contador = 0;
unsigned long tiempoAnterior = 0;
const int VELOCIDAD_MIN = 100; // Velocidad mínima (más rápido) en ms
const int VELOCIDAD_MAX = 1000; // Velocidad máxima (más lento) en ms
void setup() {
// Configurar todos los pines de segmentos como salidas
for(int i = 0; i < NUM_SEGMENTOS; i++) {
pinMode(segmentos[i], OUTPUT);
}
// Configurar el pin del potenciómetro como entrada
pinMode(POT_PIN, INPUT);
// Configurar resolución ADC (0-4095)
analogSetWidth(12);
}
// Función para mostrar un número hexadecimal
void mostrarHex(int numero) {
// Asegurarse de que el número esté en el rango 0-15
numero = numero % 16;
// Actualizar cada segmento según el patrón
for(int i = 0; i < NUM_SEGMENTOS; i++) {
digitalWrite(segmentos[i], PATRONES_HEX[numero][i]);
}
}
// Función para leer y mapear el valor del potenciómetro
int obtenerVelocidad() {
int valorPot = analogRead(POT_PIN);
// Mapear el valor del potenciómetro (0-4095) al rango de velocidad deseado
return map(valorPot, 0, 4095, VELOCIDAD_MIN, VELOCIDAD_MAX);
}
void loop() {
// Obtener el tiempo de retardo actual basado en la posición del potenciómetro
int tiempoRetardo = obtenerVelocidad();
// Verificar si es tiempo de actualizar el contador
if (millis() - tiempoAnterior >= tiempoRetardo) {
// Incrementar el contador
contador = (contador + 1) % 16;
// Mostrar el nuevo número
mostrarHex(contador);
// Actualizar el tiempo anterior
tiempoAnterior = millis();
}
}