I have written a code that displays a number into a seven segment display without manually setting the Arduino pins HIGH/LOW for each number. Now, my problem is how can I display a number larger than 9? This is my code and it works for only 1 digit number: (The seven segment display truth table is inverted because I'm using common anode 7seg)
#define SEG_A 2
#define SEG_B 3
#define SEG_C 4
#define SEG_D 5
#define SEG_E 6
#define SEG_F 7
#define SEG_G 8
#define DEC_P 12
#define SET1 9 // [!][!][x]
#define SET2 10// [!][x][!]
#define SET3 11// [x][!][!]
struct segmentmap {
uint8_t num;
const int segment[7];
};
const struct segmentmap segments[] = {
// n A B C D E F G
{0, {0, 0, 0, 0, 0, 0, 1}},
{1, {1, 0, 0, 1, 1, 1, 1}},
{2, {0, 0, 1, 0, 0, 1, 0}},
{3, {0, 0, 0, 0, 1, 1, 0}},
{4, {1, 0, 0, 1, 1, 0, 0}},
{5, {0, 1, 0, 0, 1, 0, 0}},
{6, {0, 1, 0, 0, 0, 0, 0}},
{7, {0, 0, 0, 1, 1, 1, 1}},
{8, {0, 0, 0, 0, 0, 0, 0}},
{9, {0, 0, 0, 1, 1, 0, 0}}
};
void setup() {
Serial.begin(9600);
for (int x = 2; x <= 8; x++) {
pinMode(x, OUTPUT);
Serial.print("Segment pin: ");
Serial.print(x);
Serial.println(" is set to OUTPUT mode.");
digitalWrite(x, HIGH);
}
pinMode(DEC_P, OUTPUT);
pinMode(SET1, OUTPUT);
pinMode(SET2, OUTPUT);
pinMode(SET3, OUTPUT);
digitalWrite(SET1, 1);
}
int x = 0;
void loop() {
if (x > 9) {
x = 0;
}
updateDisplay(x);
delay(1000);
x++;
}
void updateDisplay(int input) {
for (int x = 0; x <= 9; x++) {
//Serial.println(segments[x].num);
if (segments[x].num == input) {
Serial.println(segments[x].segment[0]);
////////////Simplify this part//////////////
digitalWrite(SEG_A, segments[x].segment[0]);
digitalWrite(SEG_B, segments[x].segment[1]);
digitalWrite(SEG_C, segments[x].segment[2]);
digitalWrite(SEG_D, segments[x].segment[3]);
digitalWrite(SEG_E, segments[x].segment[4]);
digitalWrite(SEG_F, segments[x].segment[5]);
digitalWrite(SEG_G, segments[x].segment[6]);
////////////////////////////////////////////
//Multiplex here?//
}
}
}