Einparkhilfe: Anzeige
Teil des Abschnitts Projekte der Arduino-Journey von Coddy. Lektion 12 von 24.
Der letzte Schritt zeigt den genauen Abstand auf dem Bildschirm an. Das 16x2-LCD ist wie üblich angeschlossen: RS an 12, E an 11, D4 bis D7 an 5, 4, 3 und 2.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);Die obere Zeile ändert sich nie, also schreibe Distance: einmal in setup(), nach lcd.begin(16, 2). Nur die untere Zeile wird in loop() aktualisiert.
Ein LCD behält jedes Zeichen bei, bis es ersetzt wird. Wenn du von 250 cm auf 8 cm wechselst und 8 cm über 250 cm druckst, bleibt das alte Zeilenende stehen, und der Bildschirm zeigt 8 cmcm an. Gib nach dem Text ein paar Leerzeichen aus, um alles abzudecken, was eine längere Zahl zurückgelassen hat:
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");Leerzeichen vermeiden außerdem das Flackern von lcd.clear(), wodurch der ganze Bildschirm zehnmal pro Sekunde gelöscht würde.
Aufgabe
EinfachZeige die Entfernung auf dem LCD an:
- binde
LiquidCrystal.hein und erstellelcd(12, 11, 5, 4, 3, 2) - in
setup():lcd.begin(16, 2)undDistance:in der oberen Zeile - in
loop(): die Entfernung undcmin der unteren Zeile, zum Beispiel57 cm, mit Leerzeichen dahinter
Behalte die Lichter, die Signaltöne und die Ausgabe bei. Drücke Run und dann Check.
Probier es selbst
// Der Abstandssensor
const int trigPin = 9;
const int echoPin = 10;
// Die Warnleuchten
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Der Summer
const int buzzerPin = 8;
unsigned long lastBeep = 0; // wann der letzte Piepton begann
// Sende einen Impuls und gib den Abstand in cm zurück.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// Grün bei ausreichend Abstand, Gelb bei geringem Abstand, Rot bei zu geringem Abstand.
void showLights(long cm) {
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, LOW);
if (cm >= 100) {
digitalWrite(greenPin, HIGH);
} else if (cm >= 30) {
digitalWrite(yellowPin, HIGH);
} else {
digitalWrite(redPin, HIGH);
}
}
// Piepe schneller, je näher das Objekt kommt.
void beep(long cm) {
if (cm >= 100) {
noTone(buzzerPin);
} else if (cm < 10) {
tone(buzzerPin, 1000); // zu nah: ein Dauerton
} else if (millis() - lastBeep >= cm * 10) {
lastBeep = millis();
tone(buzzerPin, 1000, 50);
}
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
long cm = readDistance();
Serial.println(cm);
showLights(cm);
beep(cm);
delay(100);
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Projekte
3Einparkhilfe
Einparkhilfe: AbstandEinparkhilfe: LichterEinparkhilfe: SignaltöneEinparkhilfe: AnzeigeÜbe selbstständig: Arduino-Playground