Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Zeige die Entfernung auf dem LCD an:

  • binde LiquidCrystal.h ein und erstelle lcd(12, 11, 5, 4, 3, 2)
  • in setup(): lcd.begin(16, 2) und Distance: in der oberen Zeile
  • in loop(): die Entfernung und cm in der unteren Zeile, zum Beispiel 57 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);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Projekte

Übe selbstständig: Arduino-Playground