7 segment display with potentiometer

Hi there! Super newbie here! Appreciate any input please!

I am trying to use a potentiometer with a 4 digit 7 segment display. My understanding is that potentiometers should go up to 1023, my readout for some reason only goes to 910. Any advice on how to make it go to 9999, and increase value as I turn clockwise (currently moving in the opposite direction)?

Also, is there a way to turn down the brightness of the digits? I have searched and tried a few different codes, but I am struggling to relate it to what I have in my code already. Thanks so much!

Here is the code I used:

int time = 5;

int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;

int DIG1 = 9;
int DIG2 = 10;
int DIG3 = 11;
int DIG4 = 12;

void choose_digit(char num) {
switch(num) {
default:
// 0 default value
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
break;

case 1:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;

case 2:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
break;

case 3:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
break;

case 4:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;

case 5:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;

case 6:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;

case 7:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;

case 8:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;

case 9:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;

}
}

void setup() {
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
pinMode(DIG3, OUTPUT);
pinMode(DIG4, OUTPUT);

pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);

Serial.begin(9600);

}

void pick_digit(int digit) {
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);

switch(digit) {
case 1: digitalWrite(DIG1, LOW); break;
case 2: digitalWrite(DIG2, LOW); break;
case 3: digitalWrite(DIG3, LOW); break;
default:digitalWrite(DIG4, LOW); break;

}

}

void seven_segment(int number) {

unsigned char thousands = int (number/1000);
unsigned char hundreds = int ((number/100)%10);
unsigned char tens = int ((number/10)%10);
unsigned char ones = int (number%10);

//1234
choose_digit(thousands);
pick_digit(1);
delay(time);

choose_digit(hundreds);
pick_digit(2);
delay(time);

choose_digit(tens);
pick_digit (3);
delay(time);

choose_digit(ones);
pick_digit(4);
delay(time);

}
void loop() {

int sensor_value = analogRead(A0);
Serial.println(sensor_value);

seven_segment(sensor_value);
delay(1);

}

(deleted)

Hi Peter!

Thanks for taking the time to reply! I'm doing great, all things considered! Thanks for asking!

Hope you are great as well! Thanks for the suggestion! I will give both a check!

Cheers,
Karen

For brightness, change the pins around and use PWM pins (3,5,6,9,10,11) to drive the DIG1,2,3,4. Then instead of just writing them LOW to turn on you can analogWrite() to be less than full on.

I'm [in agreement with] Peter-CAD_HST on the pot.
Check that the wiper actually goes from 0 to 5V (or whatever your VCC is).
Check the Aref pin has only a 0.1uF cap on it on measures Vcc also.

You can also do this:

int sensor_value = analogRead(A0);
int sensor_value = analogRead(A0);  // read it a second time, ensures the level has time to settle fully for the ADC.
  Serial.println(sensor_value);

Hi Peter-CAD-HST!

Thanks for the input! I just checked out crossroadsfencing.com. Can I contact you directly to chat about some custom designs? Not sure if the email on the website is yours.

Looking forward to hearing from you!
Karen