#include <Wire.h>
#include <DFRobot_PAJ7620U2.h>

// Δημιουργία αντικειμένου για τον αισθητήρα
DFRobot_PAJ7620U2 paj;

// Ρελέ στο pin 16
#define RELAY_PIN 16

// Μεταβλητή για αποφυγή συνεχών εναλλαγών
bool relayState = LOW;
unsigned long lastGestureTime = 0;
const unsigned long debounceTime = 500; // 0.5 sec μεταξύ χειρονομιών

void setup() {
  Serial.begin(115200);
  Serial.println("Έναρξη PAJ7620U2 Gesture Sensor");

  // Ρύθμιση του ρελέ
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);

  // Αρχικοποίηση του αισθητήρα
  Wire.begin(); // Ξεκινά το I2C
  while (paj.begin() != 0) {
    Serial.println("Σφάλμα αρχικοποίησης PAJ7620U2! Ελέγξτε τις συνδέσεις.");
    delay(1000);
  }
  Serial.println("Αισθητήρας PAJ7620U2 αρχικοποιήθηκε επιτυχώς.");

  // Ρύθμιση σε γρήγορη λειτουργία (για άμεση απόκριση)
  paj.setGestureHighRate(true);
}

void loop() {
  // Διάβασμα χειρονομίας
  DFRobot_PAJ7620U2::eGesture_t gesture = paj.getGesture();

  // Αν έχει περάσει αρκετός χρόνος από την προηγούμενη χειρονομία
  if (gesture != paj.eGestureNone && (millis() - lastGestureTime > debounceTime)) {
   
    // Εμφάνιση περιγραφής για debugging (προαιρετικά)
    String desc = paj.gestureDescription(gesture);
    Serial.print("Ανιχνεύθηκε: ");
    Serial.println(desc);

    // Έλεγχος για κίνηση UP
    if (gesture == paj.eGestureUp) {
      digitalWrite(RELAY_PIN, HIGH);
      relayState = HIGH;
      Serial.println("→ Ρελέ ΕΝΕΡΓΟΠΟΙΗΘΗΚΕ (UP)");
      lastGestureTime = millis();
    }
    // Έλεγχος για κίνηση DOWN
    else if (gesture == paj.eGestureDown) {
      digitalWrite(RELAY_PIN, LOW);
      relayState = LOW;
      Serial.println("→ Ρελέ ΑΠΕΝΕΡΓΟΠΟΙΗΘΗΚΕ (DOWN)");
      lastGestureTime = millis();
    }
  }

  delay(50); // Μικρή καθυστέρηση για σταθερότητα
}