#include <SoftwareSerial.h>
#include <virtuabotixRTC.h>

// Ultrasonik + Röle
#define TRIG_PIN 9
#define ECHO_PIN 10
#define RELAY_PIN 7

// Bluetooth
#define BT_RX 2
#define BT_TX 3

SoftwareSerial BT(BT_RX, BT_TX);

// RTC (CLK, DAT, RST)
virtuabotixRTC myRTC(4, 5, 6);

long duration;
int distance;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, HIGH); // pompa kapalı

  Serial.begin(9600);
  BT.begin(9600);

  Serial.println("Sistem Hazir");
  BT.println("Bluetooth Baglandi");

  // RTC ilk ayar (SADECE 1 KERE KULLAN)
  // myRTC.setDS1302Time(30, 42, 15, 2, 15, 4, 2026);
}

bool tetiklendi = false;

void loop() {

  myRTC.updateTime();

  // Ultrasonik ölçüm
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);
  distance = duration * 0.034 / 2;

  // ---------------- TETİK MANTIĞI ----------------
  if (distance > 0 && distance < 10) {

    digitalWrite(RELAY_PIN, LOW);

    // SADECE 1 KERE YAZ
    if (!tetiklendi) {

      Serial.print("Tarih: ");
      Serial.print(myRTC.dayofmonth);
      Serial.print("/");
      Serial.print(myRTC.month);
      Serial.print("/");
      Serial.print(myRTC.year);

      Serial.print("  Saat: ");
      Serial.print(myRTC.hours);
      Serial.print(":");
      Serial.print(myRTC.minutes);
      Serial.print(":");
      Serial.print(myRTC.seconds);

      Serial.print("  | Mesafe: ");
      Serial.print(distance);
      Serial.print(" cm");
      Serial.println("  | Pompa: ACIK");

      BT.print("TETIKLENDI -> ");
      BT.print(distance);
      BT.println(" cm | POMPA ACIK");

      tetiklendi = true;  // artık tekrar yazmaz
    }
  }
  else {
    digitalWrite(RELAY_PIN, HIGH);

    // sensör geri çekilince resetlenir
    tetiklendi = false;
  }

  // ---------------- MANUEL BLUETOOTH ----------------
  if (BT.available()) {
    char komut = BT.read();

    if (komut == '1') {
      digitalWrite(RELAY_PIN, LOW);
      BT.println("Manuel: Pompa ACILDI");
    }

    if (komut == '0') {
      digitalWrite(RELAY_PIN, HIGH);
      BT.println("Manuel: Pompa KAPALI");
    }
  }

  delay(200);
}