int segPins[7] = {23, 22, 21, 19, 18, 5, 17};
int digPins[4] = {2, 15, 13, 12};
byte nums[10][7] = {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
};
int contador = 0;
int dig = 0;
unsigned long tempo = 0;
void setup() {
for(int i=0;i<7;i++) pinMode(segPins[i], OUTPUT);
for(int i=0;i<4;i++) pinMode(digPins[i], OUTPUT);
for(int i=0;i<4;i++) digitalWrite(digPins[i], HIGH);
}
void setSegments(int n) {
for(int i=0;i<7;i++) {
digitalWrite(segPins[i], nums[n][i]);
}
}
void allDigitsOff() {
for(int i=0;i<4;i++) digitalWrite(digPins[i], HIGH);
}
void loop() {
int d0 = contador / 1000;
int d1 = (contador / 100) % 10;
int d2 = (contador / 10) % 10;
int d3 = contador % 10;
allDigitsOff();
int value;
switch(dig) {
case 0: value = d0; break;
case 1: value = d1; break;
case 2: value = d2; break;
case 3: value = d3; break;
}
setSegments(value);
digitalWrite(digPins[dig], LOW);
delayMicroseconds(1500);
digitalWrite(digPins[dig], HIGH);
dig++;
if(dig > 3) dig = 0;
if(millis() - tempo >= 250) {
tempo = millis();
contador++;
if(contador > 9999) contador = 0;
}
}