unsigned long time;
int led_state;
char numStr[] = "0000";
#define CLOCKPIN 3 //change this to the pin where the clock is going in to
#define DATA_PIN 2 // change to the pin where the data wire is plugged in to
#define LED_PIN 13 // status led
byte digit[4];
byte number[] = { 126, //0 numerals (0-9)
24, //1
109, //2
61, //3
27, //4
55, //5
119, //6
28, //7
127, //8
31, //9
60, //C
71, //F
103, //E
};
void setup() {
Serial.begin(19200);
time = millis();
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCKPIN, OUTPUT);
Serial.println("Ready");
}
void dispDigit(byte dig, byte flash) {
for (int i = 0; i < 8; i++) {
digitalWrite(DATA_PIN, (dig & B10000000)); // select high bit
dig = dig << 1; // next bit
digitalWrite(CLOCKPIN, HIGH); // clock high
if (flash) delay(1); // wait to set display on
digitalWrite(CLOCKPIN, LOW);
}
}
void numParse(int num) {
itoa(num, &numStr[0], 10);
int z = 0 ;
if (num < 1000) {
z++;
digit[3] = number[0];
}
if (num < 100) {
z++;
digit[2] = number[0];
}
if (num < 10) {
z++;
digit[1] = number[0];
}
if (num < 1) {
z++;
digit[0] = number[0];
}
for (int g = 0; g < (4 - z); g++) digit[g] = number[numStr[3 - g - z] - 48];
}
void loop() {
if (millis() - time > 100) {
numParse(millis() / 100);
for (int i = 0; i < 3; i++) dispDigit(digit[i], 0);
dispDigit(digit[3], 1);
time = millis();
led_state = !led_state;
digitalWrite(LED_PIN, led_state);
}
}