#include <Servo.h>

//de getallen laten zien in welke pin de onderdelen zitten

const int buttonPin = 2;  
const int servoPin = 9; 
const int led1 = 12;      // knop die de servo en lichtjes bestuurt 
const int led2 = 13;     
  
 

bool isLedOn = false;       // variabele die laat zien of de lichtjes uit of aan staan
bool turnAround = false;     // Variable die bijhoudt wanneer de servo tot 180 graden moet draaien
bool rondKijken = true; // Variable die bijhoudt wanneer de servo willekeurig tussen 0-100 moet draaien
bool Tijd = false;  // Variable die de tijd bijhoudt in seconden
Servo servoMotor;           

unsigned long lastLook = 0;   
const long interval = 2000;         
unsigned long buttonPress = 0; 

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  
  pinMode(led1, OUTPUT);          
  pinMode(led2, OUTPUT);          
  servoMotor.attach(servoPin);       
  servoMotor.write(0);               // Zorgt ervoor dat de servo 0 graden als startpositie heeft
}

void loop() {
  unsigned long currentMillis = millis();

  // Als de knop wordt ingedrukt dan
  if (digitalRead(buttonPin) == LOW) {
    delay(50);  
    if (digitalRead(buttonPin) == LOW) {
      isLedOn = !isLedOn;
      // draait de servo 18 graden
      turnAround = true;
      // Het willekeurige draaien wordt stopgezet
      rondKijken = false;
      // voor 5 seconden lang 
      Tijd = true;        //zodra dit op true staat begint het tellen naar 5
      buttonPress= currentMillis;  //dit houdt de tijd bij

      // Lampjes gaan aan
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);

      
      while (digitalRead(buttonPin) == LOW) { //Er is geen input meer van de knop, oftewel het wordt niet meer ingedrukt
        delay(10);                          
      }
    }
  }

  // Bepaalt of de servo willekeurige bewegingen moet maken
  if (rondKijken && currentMillis - lastLook >= interval) {
    lastLook = currentMillis;
    int randomPosition = random(0, 101); // Geeft een willekeurige waarde tussen 0 en 100
    servoMotor.write(randomPosition);    // Die willekeurige waarde wordt in graden gedraaid door de servo
  }

  // Zodra de knop wordt ingedrukt, draait de servo 180 graden vanaf zijn startpositie
  if (turnAround) {
    servoMotor.write(180);
    turnAround = false;
  }

  // Checkt hoeveel tijd er is verstreken
  if (Tijd && (currentMillis - buttonPress >= 5000)) {
    // Als er meer dan 5 seconden voorbij zijn gegaan, draait de servo terug naar zijn originele startpositie, oftewel 0 graden
    servoMotor.write(0);
    // De lampjes gaan uit
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    //De timer wordt gerest
    Tijd = false;
    // Het willekeurige draaien van de servo kan weer gebeuren
    rondKijken = true;
  }
}
