#include <Arduino.h>
class Double7Seg {
private:
int segPins[7];
int digitPins[2]; // digitPins[0]: hàng chục, digitPins[1]: hàng đơn vị
const byte numData[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void showPattern(byte pattern) {
for (int i = 0; i < 7; i++) {
digitalWrite(segPins[i], (pattern >> i) & 1);
}
}
public:
Double7Seg(int sPins[7], int dPins[2]) {
for(int i=0; i<7; i++) segPins[i] = sPins[i];
for(int i=0; i<2; i++) digitPins[i] = dPins[i];
}
void begin() {
for(int i=0; i<7; i++) pinMode(segPins[i], OUTPUT);
for(int i=0; i<2; i++) pinMode(digitPins[i], OUTPUT);
}
// Hàm quét hiển thị số (Cần được gọi liên tục trong loop)
void display(int number) {
int chuc = number / 10;
int donVi = number % 10;
// Bước 1: Hiển thị hàng chục
digitalWrite(digitPins[1], HIGH); // Tắt hàng đơn vị
showPattern(numData[chuc]);
digitalWrite(digitPins[0], LOW); // Bật hàng chục
delay(5); // Trễ mắt để thấy sáng mượt
// Bước 2: Hiển thị hàng đơn vị
digitalWrite(digitPins[0], HIGH); // Tắt hàng chục
showPattern(numData[donVi]);
digitalWrite(digitPins[1], LOW); // Bật hàng đơn vị
delay(5);
}
};
int sPins[7] = {2, 3, 4, 5, 6, 7, 8};
int dPins[2] = {9, 10};
Double7Seg display99(sPins, dPins);
int currentNumber = 0;
unsigned long lastUpdate = 0;
void setup() {
display99.begin();
}
void loop() {
// Cứ sau 500ms thì tăng lên 1 số
if (millis() - lastUpdate >= 500) {
lastUpdate = millis();
currentNumber++;
if (currentNumber > 99) currentNumber = 0;
}
// Phải gọi liên tục hàm này để quét LED liên tục
display99.display(currentNumber);
}