Menu
CoddyTech

Czujnik parkowania: wyświetlacz

Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 12 z 24.

Ostatni krok wyświetla dokładną odległość na ekranie. Wyświetlacz LCD 16x2 jest podłączony w standardowy sposób: RS do 12, E do 11, a D4–D7 do 5, 4, 3 i 2.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Górny wiersz nigdy się nie zmienia, więc wpisz Distance: raz w setup(), po lcd.begin(16, 2). W loop() aktualizowany jest tylko dolny wiersz.

Wyświetlacz LCD zachowuje każdy znak, dopóki coś go nie zastąpi. Gdy odległość zmienia się z 250 cm na 8 cm, wypisanie 8 cm w miejscu 250 cm pozostawia końcówkę poprzedniego tekstu, przez co ekran wyświetla 8 cmcm. Po tekście wypisz kilka spacji, aby zakryć znaki pozostawione przez dłuższą liczbę:

lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm    ");

Spacje pozwalają też uniknąć migotania powodowanego przez lcd.clear(), które czyściłoby cały ekran dziesięć razy na sekundę.

challenge icon

Wyzwanie

Łatwy

Wyświetl odległość na wyświetlaczu LCD:

  • dołącz LiquidCrystal.h i utwórz lcd(12, 11, 5, 4, 3, 2)
  • w setup(): lcd.begin(16, 2) i Distance: w górnym wierszu
  • w loop(): odległość i cm w dolnym wierszu, na przykład 57 cm, ze spacjami po niej

Zachowaj światła, sygnały dźwiękowe i wypisywanie. Naciśnij Run, a następnie Check.

Spróbuj swoich sił

// Czujnik odległości
const int trigPin = 9;
const int echoPin = 10;
// Kontrolki ostrzegawcze
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Brzęczyk
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // kiedy rozpoczął się ostatni sygnał dźwiękowy

// Wyślij impuls i zwróć odległość w cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Zielona, gdy droga jest wolna; żółta, gdy obiekt jest blisko; czerwona, gdy jest zbyt blisko.
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);
  }
}

// Emituj sygnały dźwiękowe coraz częściej, gdy obiekt się zbliża.
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // zbyt blisko: ciągły sygnał dźwiękowy
  } 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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Projekty

Poćwicz samodzielnie: Edytor online Arduino