/*
Simple 7 segment demo
Written for common cathode
In a real circuit the digit pin should have a transistor driver.
*/
const int SEG_PINS[] = {7, 8, 10, 11, 12, 6, 5, 9};
const bool DIGITS[][8] = { // numeral lookup table
// A B C D E F G DP
{1, 1, 1, 1, 1, 1, 0, 0}, // 0
{0, 1, 1, 0, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1, 0}, // 2
{1, 1, 1, 1, 0, 0, 1, 0}, // 3
{0, 1, 1, 0, 0, 1, 1, 0}, // 4
{1, 0, 1, 1, 0, 1, 1, 0}, // 5
{1, 0, 1, 1, 1, 1, 1, 0}, // 6
{1, 1, 1, 0, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1, 0}, // 8
{1, 1, 1, 1, 0, 1, 1, 0}, // 9
{0, 0, 0, 0, 0, 0, 0, 0} // blank
};
const unsigned long ONE_SEC = 1000;
unsigned long prevTime = 0;
void writeDigit(int value) {
for (int seg = 0; seg < 8; seg++) {
digitalWrite(SEG_PINS[seg], DIGITS[value][seg]);
}
}
void setup() {
Serial.begin(115200);
for (int segment = 0; segment < 8; segment++) {
pinMode(SEG_PINS[segment], OUTPUT);
}
}
void loop() {
static int count = 0;
// every ONE_SEC
if (millis() - prevTime >= ONE_SEC) {
count++;
if (count > 10) count = 0;
prevTime = millis();
}
// refresh the display frequently
writeDigit(count);
}