byte length = 7;
byte pin[] = {2, 3, 4, 5, 6, 7, 8};
byte hex[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
class Port {
byte length;
byte* pins;
byte level;
public:
Port(byte length, byte level)
:length(length),
level(level) {}
void Connect(byte* pins, byte mode) {
this->pins = pins;
for (int i = 0; i < length; i++) pinMode(pins[i], OUTPUT);
}
void Write(int value) {
if (level == 0) value = ~value;
for (int i = 0; i < length; i++)
digitalWrite(pin[i], value & (1 << i));
}
};
class Led1 : Port {
public:
Led1(byte* pins, bool anode = true) : Port(7, anode ? 0 : 1) {
Port::Connect(pins, OUTPUT);
}
void Display(int digit) {
static byte code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
Port::Write(code[digit]);
}
};
byte pins[] = {2, 3, 4, 5, 6, 7, 8, 21, 20, 19, 18, 17, 16, 15};
Led1 led1(pins), led2(pins + 7);
void setup() {};
int k = 0;
void loop() {
led2.Display(k % 10);
led1.Display(k / 10);
delay(500);
if(++k == 100) k = 0;
}