// Definisikan pin yang terhubung ke setiap sensor
const int sensor1Pin = 35;  // GPIO 35 untuk Sensor 1
const int sensor2Pin = 34;  // GPIO 34 untuk Sensor 2
const int sensor3Pin = 33;  // GPIO 33 untuk Sensor 3

int count = 0;
bool sensor1Passed = false;
bool sensor2Passed = false;
bool sensor3Passed = false;

void setup() {
  Serial.begin(115200);
  pinMode(sensor1Pin, INPUT);
  pinMode(sensor2Pin, INPUT);
  pinMode(sensor3Pin, INPUT);

  // Inisialisasi sensor untuk memastikan semua dalam keadaan HIGH
  delay(500);  // Tunggu sejenak agar sensor stabil
  int sensor1Value = digitalRead(sensor1Pin);
  int sensor2Value = digitalRead(sensor2Pin);
  int sensor3Value = digitalRead(sensor3Pin);

  // Cek kondisi awal sensor
  if (sensor1Value == LOW) sensor1Passed = true;
  if (sensor2Value == LOW) sensor2Passed = true;
  if (sensor3Value == LOW) sensor3Passed = true;

  Serial.println("Inisialisasi Selesai. Mulai counting...");
}

void loop() {
  int sensor1Value = digitalRead(sensor1Pin);  // Baca nilai dari Sensor 1
  int sensor2Value = digitalRead(sensor2Pin);  // Baca nilai dari Sensor 2
  int sensor3Value = digitalRead(sensor3Pin);  // Baca nilai dari Sensor 3

  // Cek Sensor 1
  if (sensor1Value == LOW && !sensor1Passed) {
    sensor1Passed = true;
    Serial.println("Sensor 1 Terdeteksi");
  }
  
  // Cek Sensor 2
  if (sensor1Passed && sensor2Value == LOW && !sensor2Passed) {
    sensor2Passed = true;
    Serial.println("Sensor 2 Terdeteksi");
  }
  
  // Cek Sensor 3
  if (sensor1Passed && sensor2Passed && sensor3Value == LOW && !sensor3Passed) {
    sensor3Passed = true;
    Serial.println("Sensor 3 Terdeteksi");

    count++;
    Serial.print("Jumlah PCB: ");
    Serial.println(count);
  }
  
  // Reset flag saat semua sensor kembali HIGH (PCB sudah sepenuhnya lewat)
  if (sensor1Passed && sensor2Passed && sensor3Passed && 
      sensor1Value == HIGH && sensor2Value == HIGH && sensor3Value == HIGH) {
    sensor1Passed = false;
    sensor2Passed = false;
    sensor3Passed = false;
    Serial.println("Reset Flags");
  }

  delay(100);  // Delay kecil untuk debouncing
}