#include #include SoftwareSerial bluetooth(10, 11); // HC-05: TX -> 10, RX -> 11 SoftwareSerial mySerial(7, 6); // DFPlayer TX, RX DFRobotDFPlayerMini myDFPlayer; const int ledPin = 9; const int buttonPin = 2; unsigned long kalanSure = 0; unsigned long baslangicZamani = 0; bool sayacAktif = false; bool ledDurum = false; unsigned long ledZaman = 0; int oncekiKalanSaniye = -1; bool alarmPlaying = false; bool dfplayerHazir = false; void setup() { Serial.begin(9600); bluetooth.begin(9600); mySerial.begin(9600); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); pinMode(buttonPin, INPUT_PULLUP); Serial.println("Sistem başlatılıyor..."); if (!myDFPlayer.begin(mySerial)) { Serial.println("[HATA] DFPlayer Mini başlatılamadı!"); digitalWrite(ledPin, LOW); // Hata durumunu göster: LED sürekli yanıp sönsün for (int i = 0; i < 5; i++) { digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); delay(200); } } else { dfplayerHazir = true; Serial.println("DFPlayer Mini hazır."); delay(1000); myDFPlayer.volume(30); myDFPlayer.play(1); // 0001.mp3 = Açılış sesi } bluetooth.listen(); Serial.println("Bluetooth dinleniyor..."); } void loop() { bluetooth.listen(); kontrolBluetooth(); kontrolButon(); kontrolSayac(); } void kontrolBluetooth() { if (!bluetooth.available()) return; String veri = bluetooth.readStringUntil('\n'); veri.trim(); veri.toUpperCase(); if (veri.startsWith("T:")) { kalanSure = veri.substring(2).toInt(); Serial.print(">>> Süre alındı: "); Serial.print(kalanSure); Serial.println(" saniye"); bluetooth.println("SUREOK\n"); Serial.println("SUREOK"); Serial.println("--- bluetooth buffer status: " + String(bluetooth.available())); Serial.println("Raw received: [" + veri + "]"); delay(300); } else if (veri == "START") { resetleVeBitir(); delay(100); if (kalanSure > 0) { sayacAktif = true; baslangicZamani = millis(); ledZaman = millis(); oncekiKalanSaniye = -1; Serial.print("START komutu geldi, kalanSure = "); Serial.println(kalanSure); } else { Serial.println("[UYARI] Süre 0, başlatılamadı."); } } else if (veri == "RESET") { resetleVeBitir(); Serial.println(">>> Sayaç sıfırlandı."); } else if (veri == "PING") { Serial.println(">>> PING alındı (Bağlantı test)."); } else { Serial.print("[UYARI] Bilinmeyen komut: "); Serial.println(veri); } } void kontrolButon() { if (digitalRead(buttonPin) == LOW) { resetleVeBitir(); Serial.println(">>> Fiziksel buton ile resetlendi."); delay(300); } } void kontrolSayac() { if (!sayacAktif) return; unsigned long gecenSure = (millis() - baslangicZamani) / 1000; if (gecenSure >= kalanSure) { sayacAktif = false; kalanSure = 0; digitalWrite(ledPin, HIGH); Serial.println(">>> Süre doldu, alarm aktif!"); bluetooth.println("Bitti"); if (!alarmPlaying && dfplayerHazir) { myDFPlayer.play(2); // 0002.mp3 alarmPlaying = true; } } else { int kalanSaniye = kalanSure - gecenSure; if (kalanSaniye != oncekiKalanSaniye) { Serial.print("Kalan: "); Serial.print(kalanSaniye); Serial.println(" sn"); oncekiKalanSaniye = kalanSaniye; } ledBlink(); } } void ledBlink() { if (millis() - ledZaman >= 500) { ledDurum = !ledDurum; digitalWrite(ledPin, ledDurum); ledZaman = millis(); } } void resetleVeBitir() { kalanSure = 0; sayacAktif = false; alarmPlaying = false; digitalWrite(ledPin, HIGH); bluetooth.println("Bitti"); if (dfplayerHazir) myDFPlayer.stop(); }