// Pines del 74HC595
int dataPin = 11;
int latchPin = 9;
int clockPin = 10;
// Pines de selección de displays
int displays[4] = {2, 3, 4, 5};
// Potenciómetro
int pot = A0;
// Tabla de segmentos
byte numeros[10] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
int valorPot = 0;
void setup() {
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(pot, INPUT);
for (int i = 0; i < 4; i++) {
pinMode(displays[i], OUTPUT);
}
}
void mostrarDigito(int digito, int display) {
// Apaga todos los displays
for (int i = 0; i < 4; i++) {
digitalWrite(displays[i], HIGH);
}
// Carga el dato al 74HC595
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, numeros[digito]);
digitalWrite(latchPin, HIGH);
// Activa el display correspondiente
digitalWrite(displays[display], LOW);
delay(5);
}
void loop() {
// Leer potenciómetro
valorPot = analogRead(pot);
// Mostrar en monitor serie (opcional)
Serial.println(valorPot);
// Separar dígitos
int miles = valorPot / 1000;
int centenas = (valorPot / 100) % 10;
int decenas = (valorPot / 10) % 10;
int unidades = valorPot % 10;
// Multiplexación
mostrarDigito(miles, 0);
mostrarDigito(centenas, 1);
mostrarDigito(decenas, 2);
mostrarDigito(unidades, 3);
}