#include <Servo.h> //Servobibliothek importieren
#include <LiquidCrystal.h> //LCD-Bibliothek importieren

constexpr uint8_t signalPin {8}; // Der Ultraschalsensor ist am Digital-Pin 8 angeschlossen
constexpr uint8_t echoPin {9}; // Der Ultraschalsensor ist am Digital-Pin 8 angeschlossen
constexpr uint8_t servoPin {10};

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //LCD ist an diesen Pins angschlossen
Servo motor; //den motor als Servo definieren

unsigned long checkDistance(uint8_t sPin, uint8_t ePin) {
  digitalWrite(sPin, LOW);
  delayMicroseconds(2); //kein Signal soll anliegen -> Fehlervermeidung
  digitalWrite(sPin, HIGH);
  delayMicroseconds(10); //Signal für 10 Mikrosekunden aktivieren -> Ultraschallmessung (min. 10 µs!)
  digitalWrite(sPin, LOW); //Signal wieder deaktivieren
  unsigned long duration = pulseIn(ePin, HIGH); //Durchführung der Messung -> Ergebnis wird in der Variable "duration" gespeichert
  return static_cast<unsigned long>((duration * 0.0343) / 2); //Distanz zum Hindernis berechnen; die Zeit, die für Hin- und Rückweg des Signals gebraucht wird (duration) mit der Schallgeschwindigkeit multipliziert und dann durch 2 geteilt (wegen Hin- und Rückweg des Signals)
}

void setup() {
  pinMode(signalPin, OUTPUT); // repräsentiert digitalen Pin wieder (hier: Pin 2), Pin wird als Ausgang definiert -> benötigter Puls für Sensor
  pinMode(echoPin, INPUT);
  motor.attach(servoPin); //der Servo ist an Pin 9 angschlossen
  lcd.begin(16, 2); //Display wird gestartet und kann 16 x 2 Zeichen ausgeben
  motor.write(0); //Servoarm auf 0° einstellen
}

void loop() {
  unsigned long distance = checkDistance(signalPin, echoPin);
  if (distance < 20){
    motor.write(90);
    lcd.clear();//löscht LCD Bildschirm
    lcd.print("Bitte einwerfen");
    delay(500);
  }
  else if (distance > 20){
    lcd.clear();
    motor.write(0); //Wenn ein Hindernis näher als 20cm am Sensor ist -> Servoarm wird auf 90° gestellt
  }
  delay(400); //400 Millisekunden zwischen Messungen
}
Klicken zum Ändern der Entfernung