// Variablen, mit denen die Messung angepasst werden kann.
int messpause=00;        // Die "messpause" gibt die zeitliche Verzögerung zwischen zwei Messungen in Millisekunden an. Sie kann beliebig angepasst werden.

// Variablen, die ggf. geändert werden können.
int trigger = 7;          // Pin7 des Arduino-Boards wird als "trigger" bezeichnet.
int echo = 6;             // Pin6 des Arduino-Boards wird als "echo" bezeichnet.

// Einstellungen, die nicht geändert werden dürfen.
float dauer = 0;          // Definition der Variablen "dauer", unter der die Zeit gespeichert wird, die ein Impuls bis zur Reflektion und zurück benötigt. Startwert ist hier 0.
float entfernung = 0;     // Definiton der Variablen „entfernung“, unter der die berechnete Entfernung gespeichert wird.
float t;                  // Definiton der Variablen „t“, unter der später die Systemzeit gespreichert wird.

void setup()
{
  Serial.begin (9600);        // Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
  pinMode(trigger, OUTPUT);   // Trigger-Pin ist ein Ausgang
  pinMode(echo, INPUT);       // Echo-Pin ist ein Eingang
}

void loop()
{
  digitalWrite(trigger, LOW);           // Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
  delay(5);                             // Dauer: 5 Millisekunden
  digitalWrite(trigger, HIGH);          // Jetzt sendet man einen Ultraschallimpuls los.
  delay(10);                            // Dieser „Ton“ erklingt für 10 Millisekunden.
  digitalWrite(trigger, LOW);           // Dann wird der „Ton“ abgeschaltet.
  dauer = pulseIn(echo, HIGH);          // Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
  t = millis();                         // der Variable t wird die aktuelle Systemzeit zugewiesen.
  entfernung = (dauer / 2) * 0.03432;   // Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.

  if (entfernung >= 300 || entfernung <= 2) // Wenn die gemessene Entfernung über 300 cm oder unter 2 cm liegt,…
  {
    Serial.println("0 ms ; 0 cm");          // dann soll der serial monitor „0“ ausgeben, weil Messwerte in diesen Bereichen falsch oder ungenau sind.
  }
  else                                      // Ansonsten…
  {
    Serial.print(t);                        //…soll der Zeitpunkt der Messung über den serial monitor ausgegeben werden.
    Serial.print(" ms");
    Serial.print(" ; ");                    // Zeichen zur Trennung von Zeitpunkt und Entfernung
    Serial.print(entfernung);               // Hier wird der Wert der Entfernung über den serial monitor ausgegeben.
    Serial.println(" cm");                  // Über den Serial Monitor wird "cm" ausgegeben. Außerdem wird durch das "ln" ein Zeilenumbruch eingefügt.
    
  }
  delay(messpause);                         //Das delay verzögert die nächste Messung um den eingestellten Wert.
}
