// 74HC595 shift register pins
const int dataPin = 11;
const int latchPin = 8;
const int clockPin = 12;
// Digit control pins (to enable left/right 7-segment display)
const int digit1Pin = 9;
const int digit2Pin = 10;
// const int dataPin = 2; // DS to D2
// const int clockPin = 3; // SHCP to D3
// const int latchPin = 4; // STCP to D4
// const int digit1Pin = 5; // Tens digit control (D5)
// const int digit2Pin = 6; // Units digit control (D6)
// Segment patterns for 0-9 (Common Cathode: LSBFIRST)
const byte digitPatterns[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
void setup() {
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(digit1Pin, OUTPUT);
pinMode(digit2Pin, OUTPUT);
digitalWrite(digit1Pin, LOW);
digitalWrite(digit2Pin, LOW);
}
void loop() {
static int count = 0;
// Display current count for 1 second
unsigned long startTime = millis();
while (millis() - startTime < 1000) {
displayNumber(count);
}
count = (count + 1) % 100; // Increment count (0-99)
Serial.println(count);
}
void displayNumber(int number) {
int tens = number / 10;
int units = number % 10;
// Display tens digit
digitalWrite(digit2Pin, HIGH); // Turn off units
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[tens]);
digitalWrite(latchPin, LOW);
digitalWrite(digit1Pin, LOW); // Turn on tens
delay(5); // Adjust for brightness
// Display units digit
digitalWrite(digit1Pin, HIGH); // Turn off tens
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[units]);
digitalWrite(latchPin, LOW);
digitalWrite(digit2Pin, LOW); // Turn on units
delay(5);
}