//#include <SPI.h>
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(7, 8); // RX, TX
#define mySerial Serial
#define dataPin 4
#define latchPin 5
#define clockPin 6
unsigned long sa = 88888UL;
const uint8_t digit[] =
{
// uGFEDCBA Segments 7-segment map:
0b00111111, // 0 "0" AAA
0b00000110, // 1 "1" F B
0b01011011, // 2 "2" F B
0b01001111, // 3 "3" GGG
0b01100110, // 4 "4" E C
0b01101101, // 5 "5" E C
0b01111101, // 6 "6" DDD
0b00000111, // 7 "7"
0b01111111, // 8 "8"
0b01101111, // 9 "9"
0b00000000
};
void setup() {
// Serial.begin(9600);
mySerial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Display(sa);
delay(1000);
Display(0);
mySerial.println();
}
void loop() {
if (mySerial.available() > 0) // Do we have any data?
{
delay(10);
sa = mySerial.parseInt();
while (mySerial.available() > 0)mySerial.read();
Display(sa);
delay(1000);
}
}
void Display(uint32_t num) {
byte seq[5];
num %= 100000UL; // number bigger as 99999 show only last 5 digits
mySerial.println(num);
for (byte i = 0 ; i < 5 ; i++) { // reverse digit order
seq[i] = num % 10;
num /= 10;
}
if (!seq[4]) {
seq[4] = 10;
if (!seq[3]) {
seq[3] = 10;
if (!seq[2]) {
seq[2] = 10;
if (!seq[1])seq[1] = 10;
}
}
}
// Display the data in our array now.
for (byte i = 0 ; i < 5 ; i++)
shiftOut(dataPin, clockPin, MSBFIRST, digit[seq[i]] << 1);
digitalWrite(latchPin, 0);
digitalWrite(latchPin, 1);
}