SevenSegment class for Arduino
// SevenSegment Multiplexing by Farhan Yousaf <farhany AT me DOT com>
// Use freely.
//
void setup() // run once, when the sketch starts
{
for (int i=1; i < 13; i++) {
pinMode(i, OUTPUT);
}
}
byte digits[10][7] = {
// a, b, c, d, e, f, g
{ 1, 1, 1, 1, 1, 1, 0 }, //0
{ 0, 1, 1, 0, 0, 0, 0 }, //1
{ 1, 1, 0, 1, 1, 0, 1 }, //2
{ 1, 1, 1, 1, 0, 0, 1 }, //3
{ 0, 1, 1, 0, 0, 1, 1 }, //4
{ 1, 0, 1, 1, 0, 1, 1 }, //5
{ 1, 0, 1, 1, 1, 1, 1 }, //6
{ 1, 1, 1, 0, 0, 0, 0 }, //7
{ 1, 1, 1, 1, 1, 1, 1 }, //8
{ 1, 1, 1, 1, 0, 1, 1 } //9
};
class SevenSegment {
public:
int _digit;
int _startpin;
int mode; //cathode or anode
void display(int digit);
void setPins(int start_pin);
void clearDisplay();
SevenSegment(int start_pin);
void selectLED(int pin);
};
SevenSegment::SevenSegment(int start_pin) {
setPins(start_pin);
}
void SevenSegment::setPins(int start_pin) {
for (int i=start_pin; i < (start_pin+7); i++) {
pinMode(i, OUTPUT);
}
_startpin=start_pin;
}
void SevenSegment::clearDisplay() {
for (int i=0; i < 7; i++) {
digitalWrite(_startpin+i, !LOW);
}
//delay(3);
}
void SevenSegment::display(int digit) {
for (int i=0; i < 7; i++) {
digitalWrite(_startpin+i, !digits[digit][i]);
}
delay(3);
}
void SevenSegment::selectLED(int pin) {
for (int i=1; i < 5; i++) {
digitalWrite(i, LOW);
}
digitalWrite(pin, HIGH);
}
void loop() // run over and over again
{
SevenSegment digit(6);
digit.selectLED(1);
digit.display(7);
digit.selectLED(2);
digit.display(6);
digit.clearDisplay();
}