// Pin Definitions
int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // a, b, c, d, e, f, g, DP
int digitPins[] = {10, 11, 12, 13}; // Digit select pins
int potPin = A0; // Potentiometer connected to A0
// Number Encoding for 7-segment (common cathode)
byte numbers[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// Set all segment and digit pins as outputs
for (int i = 0; i < 8; i++) pinMode(segmentPins[i], OUTPUT);
for (int i = 0; i < 4; i++) pinMode(digitPins[i], OUTPUT);
}
void loop() {
int value = analogRead(potPin); // Read potentiometer value
int displayValue = map(value, 0, 1023, 0, 9999); // Scale to 4-digit range
displayNumber(displayValue);
}
// Function to display a number
void displayNumber(int number) {
for (int digit = 0; digit < 4; digit++) {
int digitValue = number % 10; // Extract digit
number /= 10;
// Light up the corresponding digit
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], (numbers[digitValue] >> i) & 0x01);
}
digitalWrite(digitPins[digit], LOW); // Activate current digit
delay(2); // Small delay for multiplexing
digitalWrite(digitPins[digit], HIGH); // Deactivate digit
}
}