// ESP32 7-segment 0-9 sayıcı (Ortak Katot)
// Pin düzenini kendinize göre değiştirebilirsiniz.
const int segPins[7] = {21, 19, 18, 5, 17, 16, 4}; // a, b, c, d, e, f, g
const int dpPin = 2; // nokta (kullanmazsanız bağlantı yapmayın)
const int buttonPin = 15; // isteğe bağlı buton, dahili pullup
// bit0=a, bit1=b, bit2=c, bit3=d, bit4=e, bit5=f, bit6=g
const uint8_t digits[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
int current = 0;
unsigned long lastAutoMillis = 0;
const unsigned long autoInterval = 1000; // 1 saniye
// buton
unsigned long lastBtnMillis = 0;
const unsigned long debounce = 50;
int lastButton = HIGH;
int buttonState = HIGH;
void setup() {
// segmentler çıkış
for (int i = 0; i < 7; ++i) {
pinMode(segPins[i], OUTPUT);
digitalWrite(segPins[i], LOW); // ortak katotta düşük = kapalı
}
pinMode(dpPin, OUTPUT);
digitalWrite(dpPin, LOW);
pinMode(buttonPin, INPUT_PULLUP);
showDigit(current);
}
void loop() {
unsigned long now = millis();
// otomatik artırma
if (now - lastAutoMillis >= autoInterval) {
lastAutoMillis = now;
current = (current + 1) % 10;
showDigit(current);
}
// buton (pullup -> LOW basılı)
int raw = digitalRead(buttonPin);
if (raw != lastButton) {
lastBtnMillis = now;
}
if (now - lastBtnMillis > debounce) {
if (raw != buttonState) {
buttonState = raw;
if (buttonState == LOW) { // basıldı
current = (current + 1) % 10;
showDigit(current);
lastAutoMillis = now;
}
}
}
lastButton = raw;
}
void showDigit(int d) {
uint8_t pattern = digits[d];
for (int i = 0; i < 7; ++i) {
bool on = pattern & (1 << i);
// ORTAK KATOT → segment açık = HIGH, kapalı = LOW
digitalWrite(segPins[i], on ? HIGH : LOW);
}
digitalWrite(dpPin, LOW); // noktayı kapalı tutuyoruz
}