// Define the segment pins (assuming 7-segment pins a-g)
int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pin numbers for segments a-g
// Define the digit pins (assuming 4 common pins for 4 digits)
int digitPins[] = {10, 11, 12, 13}; // Pins for digit selection
int potentiometerPin = A0; // Potentiometer analog pin
// Digit patterns for numbers 0-9 (bit patterns for segments a-g)
byte digitPatterns[] = {
0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};
void setup() {
// Set up segment pins as output
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Set up digit pins as output
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
// Start by turning off all digits
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], LOW);
}
}
void loop() {
// Read the potentiometer value (0 to 1023)
int sensorValue = analogRead(potentiometerPin);
// Map the sensor value to a range of 0-9999
int displayValue = map(sensorValue, 0, 1023, 0, 9999);
// Break down the number into individual digits
int digits[4];
for (int i = 0; i < 4; i++) {
digits[i] = displayValue % 10;
displayValue /= 10;
}
// Multiplexing through the digits
for (int digit = 0; digit < 4; digit++) {
displayDigit(digit, digits[digit]);
delay(5); // Small delay for multiplexing
}
}
// Function to display a single digit on the 7-segment display
void displayDigit(int digit, int value) {
// Turn off all digits
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // HIGH to turn off
}
// Display the correct segments for this digit
byte pattern = digitPatterns[value];
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], bitRead(pattern, i)); // Send bit for each segment
}
// Turn on the current digit
digitalWrite(digitPins[digit], LOW); // LOW to turn on
}