bool signal = false;
bool prevSignal = false; // Variable to store the previous state of the signal
bool signalChanged = false; // Flag to track if the signal has changed
double startTime, kistStartTime, totalTime,
aantal_kisten_per_uur, currentTime, kistTime = 0;

void setup() {
  Serial.begin(9600);
  pinMode(4, INPUT); // Set pin 4 as an input pin
  kistStartTime = millis(); // slaat de huidige tijd op in de kistStartTime
}

void loop() {
  digitalWrite(4, LOW);
  signal = digitalRead(4);
  Serial.print("Poort 4: ");
  Serial.println(signal);

  digitalWrite(4, HIGH);

  if (signal && !prevSignal && !signalChanged) {
    // Execute this block only when signal transitions from LOW to HIGH
    currentTime = millis(); //slaat de huidige tijd in milliseconden op in de variabele currentTime
    kistTime = currentTime - kistStartTime; // berekent de tijd per kist
    kistStartTime = currentTime; // verandert de kistStartTime variabele naar de huidige tijd
    
    totalTime += kistTime;
    Serial.println(kistTime);
    aantal_kisten_per_uur = 3600000 / kistTime;
    
    Serial.print("Aantal kisten per uur: ");
    Serial.println(aantal_kisten_per_uur);

    // Set the flag to prevent re-execution until the signal changes to LOW
    signalChanged = true;
  }
  
  // Reset the flag when the signal changes to LOW
  if (!signal) {
    signalChanged = false;
  }

  // Update the previous state of the signal
  prevSignal = signal;  
  delay(5000);    // wat is de minimale delay??
}