#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