#include <Wire.h>
#define latchPin 11 // SR Latch Pin 12 Digital pin
#define clockPin 9 // SR Clock Pin 11 Digital pin
#define dataPin 12 // SR Pin 14 PWM pin
int ones = 0;
int ones_hex = 0;
int tens = 0;
int tens_hex = 0;
int hundreds = 0;
int hundreds_hex = 0;
int thousands = 0;
int thousands_hex = 0;
int total = 0;
int LCD_Position[10]={
0xfc,
0x60,
0xda,
0xf2,
0x66,
0xb6,
0xbe,
0xe0,
0xfe,
0xe6 };
void split(int input_number){ // splits and writes the 4 didgit number to the
// ones, tens, hundreds, and thousands variables
Serial.print("Input Number ");
Serial.println(input_number);
thousands = int(input_number/1000);
Serial.print("Thousands ");
Serial.println(thousands);
hundreds = int(input_number/100);
hundreds = hundreds-(int(hundreds/10)*10);
Serial.print("Hundreds #2 ");
Serial.println(hundreds);
tens = int(input_number/10);
tens = tens-(int(tens/10)*10);
Serial.print("Tens #2 ");
Serial.println(tens);
ones = input_number-(int(input_number/10)*10);
Serial.print("Ones ");
Serial.print(ones);
Serial.println(" ");
}
void zero_out(){
//start by blanking the LEDS
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0x00);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, 0x00);
digitalWrite(latchPin, HIGH);
delay(2000);
}
void setup() {
Serial.begin(9600);
pinMode (latchPin,OUTPUT);
pinMode (dataPin,OUTPUT);
pinMode (clockPin,OUTPUT);
}
void loop() {
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
//ABCD0000
//A is first LED Left most or thousands
//B is second LED Left Middle or hundreds
//C is third LED Right Middle or tens
//D is fourth LED Right most or ones
zero_out();
for(int count = 0; count<10; count++){
//A is first LED Left most or thousands will be 7
//0111 0000 is thousands
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0x70);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, LCD_Position[count]);
digitalWrite(latchPin, HIGH);
delay(250);
}
for(int count = 0; count<10; count++){
//B is second LED Left Middle or hundreds
//1011 0000 is hundreds
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0xb0);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, LCD_Position[count]);
digitalWrite(latchPin, HIGH);
delay(250);
}
for(int count = 0; count<10; count++){
//C is third LED Right Middle or tens
//1101 0000 is tens
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0xd0);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, LCD_Position[count]);
digitalWrite(latchPin, HIGH);
delay(250);
}
for(int count = 0; count<10; count++){
//D is fourth LED Right most or ones
//1110 0000 is ones
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0xe0);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, LCD_Position[count]);
digitalWrite(latchPin, HIGH);
delay(250);
}
// write A and B to 7
//0011 0000 is A and B with 7
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0x30);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, 0xe0);
digitalWrite(latchPin, HIGH);
delay(250);
zero_out();
// write A and C to 7
//0101 0000 is A and C with 7
//1110 0000 is 7
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0x50);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, 0xe0);
digitalWrite(latchPin, HIGH);
delay(250);
zero_out();
// write A and D to 7
//0110 0000 is A and D with 7
//1110 0000 is 7
digitalWrite(latchPin, LOW);
//Shifts data to highbyte second digit
//You change the d1 to d4 to low to activate
shiftOut(dataPin, clockPin, LSBFIRST, 0x60);
//Shifts data to lowbyte, number 7 with decimal point
shiftOut(dataPin, clockPin, LSBFIRST, 0xe0);
digitalWrite(latchPin, HIGH);
delay(250);
}