Görseldeki bağlantı şemasına göre, butona basılma süresi ölçülerek kısa basmada Kırmızı LED, uzun basmada (1 saniyenin üzerinde) Yeşil LED yakılmaktadır.

Şemadaki bağlantılara göre ESP8266 (NodeMCU) pin haritası şu şekildedir[cite: 4]:
| Bileşen | NodeMCU Pin | GPIO Karşılığı | Açıklama |
|---|---|---|---|
| Yeşil LED | D1 | GPIO5 | Anot pini seri direnç üzerinden D1'e bağlı (Uzun Basma) |
| Kırmızı LED | D2 | GPIO4 | Anot pini seri direnç üzerinden D2'ye bağlı (Kısa Basma) |
| Push Buton | D5 | GPIO14 | GND'ye bağlı 10kΩ Pull-Down dirençli (Active-HIGH) |
HIGH (3.3V) okuması yapılır.
Aşağıdaki kod, millis() fonksiyonunu kullanarak butonun basılı kalma süresini hesaplar. Eşik değer 1000 ms (1 saniye) olarak belirlenmiştir:
#include <Arduino.h>
// Şemadaki Pin Tanımlamaları
const int GREEN_LED_PIN = D1; // GPIO5 (Uzun basma)
const int RED_LED_PIN = D2; // GPIO4 (Kısa basma)
const int BUTTON_PIN = D5; // GPIO14
// Zamanlama Değişkenleri
unsigned long buttonPressStart = 0;
bool buttonActive = false;
const unsigned long LONG_PRESS_TIME = 1000; // 1 Saniye (1000 ms)
void setup() {
Serial.begin(115200);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT); // Harici Pull-Down dirençli devre
// Başlangıçta LED'leri kapat
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
Serial.println("ESP8266 Buton Zamanlama Testi Başlatıldı.");
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
// Butona basıldığı an (HIGH seviyesine geçiş)
if (buttonState == HIGH && !buttonActive) {
buttonActive = true;
buttonPressStart = millis();
}
// Buton bırakıldığı an (LOW seviyesine geçiş)
if (buttonState == LOW && buttonActive) {
unsigned long pressDuration = millis() - buttonPressStart;
buttonActive = false;
// Ark (Debounce) engelleme: 50 ms'den kısa basışları yok say
if (pressDuration > 50) {
if (pressDuration >= LONG_PRESS_TIME) {
// UZUN BASMA: Yeşil LED Yanar
Serial.print("Uzun Basma Tespit Edildi: ");
Serial.concat(pressDuration);
Serial.println(" ms -> YESIL LED");
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
} else {
// KISA BASMA: Kırmızı LED Yanar
Serial.print("Kısa Basma Tespit Edildi: ");
Serial.concat(pressDuration);
Serial.println(" ms -> KIRMIZI LED");
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
}
}
}
}
Henüz yorum yapılmamış. İlk yorumu siz yapın!