const int pinDP =10;
const int pinB = 9;
const int pinA = 8;
const int pinC = 11;
const int pinD = 12;
const int pinE = 13;
const int pinF = 7;
const int pinG = 6;
class BaseDigit
{
protected:
virtual void digit() {}
public :
void clearDisp()
{
digitalWrite(pinDP, LOW);
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
}
virtual void showDigit()
{
clearDisp();
digit();
}
};
class Zero : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
}
};
class One : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
}
};
class Two : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinD, HIGH);
}
};
class Three : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
}
};
class For : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinF, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinC, HIGH);
}
};
class Five : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
}
};
class Six : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
}
};
class Seven : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
}
};
class Eight : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
}
};
class Nine : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
}
};
class DigitalPoint : public BaseDigit
{
protected:
void digit() override
{
digitalWrite(pinDP, HIGH);
}
};
BaseDigit* Digits[11] ;
void displayDigit(int digit)
{
if(digit >=0 && digit < 11)
Digits[digit]->showDigit();
else
{
BaseDigit* baseD = new BaseDigit();
baseD->clearDisp();
}
}
void setup() {
// put your setup code here, to run once:
Digits[0]= new Zero();
Digits[1]= new One();
Digits[2]= new Two();
Digits[3]= new Three();
Digits[4]= new For();
Digits[5]= new Five();
Digits[6]= new Six();
Digits[7]= new Seven();
Digits[8]= new Eight();
Digits[9]= new Nine();
Digits[10]= new DigitalPoint();
pinMode(pinDP, OUTPUT);
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);
Serial.begin(9600);
Serial.print("Start\n");
}
void loop() {
// put your main code here, to run repeatedly:
char incomingByte;
if (Serial.available() > 0)
{
incomingByte = Serial.read();
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
if(incomingByte != 10)
if(incomingByte == 44 || incomingByte == 46)
displayDigit(10);
else
displayDigit(incomingByte - 48);
}
delay(600);
}