Menu
CoddyTech

泊车传感器:显示屏

本课属于 Coddy Arduino 学习旅程的“项目”单元。第 12 课,共 24 课。

最后一步会在屏幕上显示精确距离。16x2 LCD 按常规方式接线:RS 接 12,E 接 11,D4 到 D7 分别接 5、4、3 和 2。

#include <LiquidCrystal.h>

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

顶行不会改变,因此在 setup() 中的 lcd.begin(16, 2) 之后写入一次 Distance: 即可。只有底行会在 loop() 中更新。

LCD 会保留每个字符,直到有内容替换它。从 250 cm 变为 8 cm 时,在 250 cm 上打印 8 cm 会留下行尾的旧字符,屏幕上就会显示 8 cmcm。在文本后打印几个空格,盖住较长数字留下的字符:

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

空格还能避免使用 lcd.clear() 造成的闪烁,因为它每秒会把整个屏幕清空十次。

challenge icon

挑战

简单

在 LCD 上显示距离:

  • 包含 LiquidCrystal.h 并创建 lcd(12, 11, 5, 4, 3, 2)
  • 在 setup() 中:调用 lcd.begin(16, 2),并在顶行显示 Distance:
  • 在 loop() 中:在底行显示距离和 cm,例如 57 cm,后面留出空格

保留指示灯、蜂鸣声和打印功能。按“运行”,然后按“检查”。

亲手试试

// 距离传感器
const int trigPin = 9;
const int echoPin = 10;
// 警示灯
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// 蜂鸣器
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // 上一次鸣响开始的时间

// 发送一个探测脉冲,返回以 cm 为单位的距离。
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// 距离远时亮绿灯,靠近时亮黄灯,太近时亮红灯。
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);
  }
}

// 物体越近,蜂鸣声越急促。
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // 太近:持续鸣响
  } 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 icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

项目中的所有课

自己练习: Arduino 在线编辑器