// Pins to control each digit
const int DIGIT_ONE = 6;
const int DIGIT_TWO = 7;
const int DIGIT_THREE = 8;
// BCD Encoder Input
const int BIT_A = 2;
const int BIT_B = 3;
const int BIT_C = 4;
const int BIT_D = 5;
// Array to store digit control pins
const int digit[] = { DIGIT_ONE, DIGIT_TWO, DIGIT_THREE };
void turnON_Digit(int number);
void turnOFF_Digit(int number);
void displayNum(int number);
void displayNumber(int num);
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(digit[i], OUTPUT);
digitalWrite(digit[i], LOW);
}
// Set BCD pins as outputs
for (int i = 2; i <= 5; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop() {
for (int count = 0; count <= 999; count++) {
unsigned long startTime = millis();
while (millis() - startTime < 500) { // Edit 500 to adjust the counting speed of 0.5sec
displayNumber(count);
}
}
}
void turnON_Digit(int number) {
// Turns on a single digit
digitalWrite(number, HIGH);
}
void turnOFF_Digit(int number) {
// Turns off a single digit
digitalWrite(number, LOW);
}
void displayNum(int number) {
digitalWrite(BIT_D, (number & 0x8) ? HIGH : LOW);
digitalWrite(BIT_C, (number & 0x4) ? HIGH : LOW);
digitalWrite(BIT_B, (number & 0x2) ? HIGH : LOW);
digitalWrite(BIT_A, (number & 0x1) ? HIGH : LOW);
}
void displayNumber(int num) {
int hundreds = num / 100;
int tens = (num / 10) % 10;
int units = num % 10;
// Display hundreds digit
displayNum(hundreds);
turnON_Digit(DIGIT_THREE);
delay(2);
turnOFF_Digit(DIGIT_THREE);
// Display tens digit
displayNum(tens);
turnON_Digit(DIGIT_TWO);
delay(2);
turnOFF_Digit(DIGIT_TWO);
// Display units digit
displayNum(units);
turnON_Digit(DIGIT_ONE);
delay(2);
turnOFF_Digit(DIGIT_ONE);
}