const byte numbers[10] = {
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111
};
int digits[4] = {0,0,0,0};
unsigned long lastUpdate = 0;
const unsigned long interval = 700;
void setup() {
DDRD |= 0b01111111;
DDRB |= 0b00001111;
PORTD &= ~0b01111111;
PORTB |= 0b00001111;
}
void loop() {
if (!(digits[0]==0 && digits[1]==0 && digits[2]==3 && digits[3]==3)) {
if (millis() - lastUpdate >= interval) {
lastUpdate = millis();
digits[3]++;
if (digits[3] > 3) {
digits[3] = 0;
digits[2]++;
if (digits[2] > 3) digits[2] = 0;
}
}
}
for (int i = 0; i < 4; i++) {
PORTB |= 0b00001111;
PORTD = (PORTD & 0b10000000) | (numbers[digits[i]] & 0b01111111);
PORTB &= ~(1 << i);
unsigned long start = millis();
while(millis() - start < 5);
}
}