class LED{
public:
LED(){};
~LED(){};
void begin(int thePin){
pin = thePin; // Save off the pin number
pinMode(pin, OUTPUT);
};
void on(){
digitalWrite(pin, LOW);
};
void off(){
digitalWrite(pin, HIGH);
};
private:
int pin;
};
class SevenSegment{
public:
SevenSegment(){};
~SevenSegment(){};
void begin(int a, int b, int c, int d, int e, int f, int g, int dp ){
myLeds[0].begin(dp);
myLeds[1].begin(g);
myLeds[2].begin(f);
myLeds[3].begin(e);
myLeds[4].begin(d);
myLeds[5].begin(c);
myLeds[6].begin(b);
myLeds[7].begin(a);
};
void write(int digit){
for( int i = 0; i < 8; i++ ){
if ( bitRead(lut[digit], i) == 1 ){
myLeds[i].on();
} else {
myLeds[i].off();
}
}
};
private:
LED myLeds[8];
// abcdefgp
uint8_t lut[10] = { 0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11100110}; // 9
};
class FourDigitDisplay{
public:
FourDigitDisplay(){};
~FourDigitDisplay(){};
void begin(int a, int b, int c, int d, int e, int f, int g, int dp, int d1, int d2, int d3, int d4 ){
// Save off the dig pins
myDigits[0] = d4;
myDigits[1] = d3;
myDigits[2] = d2;
myDigits[3] = d1;
for ( int i=0; i < 4; i++){
pinMode(myDigits[i], OUTPUT); // Make the dig pin an output
digitalWrite(myDigits[i], LOW); // Set the output to zero volts to turn off the digit display
mySevenSegmentDisplays[i].begin(a, b, c, d, e, f, g, dp);
}
}
void write( ){
int digits[4] = {1, 2, 3, 4};
// Show all four digits one at a time -- just once
for ( int i = 0; i < 4; i++ ){
mySevenSegmentDisplays[i].write( digits[i] ); // Set segments a-g and dp
digitalWrite(myDigits[i], HIGH); // Turn the digit on
delay(500); // Wait a bit
digitalWrite(myDigits[i], LOW); // Turn the digit off
}
}
private:
SevenSegment mySevenSegmentDisplays[4];
int myDigits[4];
};
FourDigitDisplay myFourDigitDisplay;
void setup() {
// put your setup code here, to run once:
myFourDigitDisplay.begin(9,8,7,6,5,4,3,2, 13, 12, 11, 10);
}
void loop() {
// put your main code here, to run repeatedly:
myFourDigitDisplay.write();
}