int segA = 6, segB = 7, segC = 8, segD = 9, segE = 10, segF = 11, segG = 12;
int dig1 = 2, dig2 = 3, dig3 = 4, dig4 = 5;
int clk = A2, dt = A1, sw = A0;
int number = 0;
int lastCLK = HIGH;
unsigned long lastPressTime = 0;
const byte segmentPins[] = {segA, segB, segC, segD, segE, segF, segG};
const byte digitPins[] = {dig1, dig2, dig3, dig4};
const byte digits[10][7] = {
{0,0,0,0,0,0,1}, // 0
{1,0,0,1,1,1,1}, // 1
{0,0,1,0,0,1,0}, // 2
{0,0,0,0,1,1,0}, // 3
{1,0,0,1,1,0,0}, // 4
{0,1,0,0,1,0,0}, // 5
{0,1,0,0,0,0,0}, // 6
{0,0,0,1,1,1,1}, // 7
{0,0,0,0,0,0,0}, // 8
{0,0,0,0,1,0,0} // 9
};
void setup() {
for (int i = 0; i < 7; i++) pinMode(segmentPins[i], OUTPUT);
for (int i = 0; i < 4; i++) pinMode(digitPins[i], OUTPUT);
pinMode(clk, INPUT_PULLUP);
pinMode(dt, INPUT_PULLUP);
pinMode(sw, INPUT_PULLUP);
}
void loop() {
handleEncoder();
displayNumber(number);
}
void handleEncoder() {
int currentCLK = digitalRead(clk);
if (lastCLK == HIGH && currentCLK == LOW) {
if (digitalRead(dt) == HIGH) {
if (number < 9999) number++;
} else {
if (number > 0) number--;
}
}
lastCLK = currentCLK;
if (digitalRead(sw) == LOW) {
if (millis() - lastPressTime > 50) {
if (number < 9999) number++;
lastPressTime = millis();
}
}
}
void displayNumber(int num) {
int n[4];
n[0] = num / 1000;
n[1] = (num / 100) % 10;
n[2] = (num / 10) % 10;
n[3] = num % 10;
for (int i = 0; i < 4; i++) {
showDigit(i, n[i]);
delay(2); // multiplexing için kısa gecikme
clearDisplay();
}
}
void showDigit(int digitIndex, int value) {
digitalWrite(digitPins[digitIndex], HIGH); // ortak anot, dijiti aktif et
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digits[value][i]); // LOW yakar
}
}
void clearDisplay() {
for (int i = 0; i < 4; i++) digitalWrite(digitPins[i], LOW);
for (int i = 0; i < 7; i++) digitalWrite(segmentPins[i], HIGH); // segmentleri kapat
}