Cảm biến đỗ xe: màn hình
Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 12 trên 24.
Bước cuối cùng hiển thị khoảng cách chính xác lên màn hình. Màn hình LCD 16x2 được nối theo cách thông thường: RS vào chân 12, E vào chân 11, D4 đến D7 vào các chân 5, 4, 3 và 2.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);Hàng trên không bao giờ thay đổi, vì vậy hãy ghi Distance: một lần trong setup(), sau lcd.begin(16, 2). Chỉ hàng dưới được cập nhật trong loop().
Màn hình LCD giữ nguyên mọi ký tự cho đến khi có nội dung khác thay thế. Khi khoảng cách đổi từ 250 cm xuống 8 cm, nếu in 8 cm đè lên 250 cm, phần cuối của dòng cũ vẫn còn, khiến màn hình hiển thị 8 cmcm. Hãy in thêm vài dấu cách sau văn bản để che phần còn sót lại của số dài hơn:
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");Dấu cách cũng giúp tránh hiện tượng nhấp nháy do lcd.clear(), vốn sẽ xóa trắng toàn bộ màn hình mười lần mỗi giây.
Thử thách
DễHiển thị khoảng cách trên LCD:
- thêm
LiquidCrystal.hvà tạolcd(12, 11, 5, 4, 3, 2) - trong
setup(): dùnglcd.begin(16, 2)và hiển thịDistance:ở hàng trên cùng - trong
loop(): hiển thị khoảng cách vàcmở hàng dưới cùng, chẳng hạn57 cm, rồi thêm các khoảng trắng
Giữ nguyên đèn, tiếng bíp và lệnh in ra. Nhấn Chạy, rồi nhấn Kiểm tra.
Tự làm thử
// Cảm biến khoảng cách
const int trigPin = 9;
const int echoPin = 10;
// Đèn cảnh báo
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Còi báo
const int buzzerPin = 8;
unsigned long lastBeep = 0; // thời điểm tiếng bíp gần nhất bắt đầu
// Phát xung siêu âm và trả về khoảng cách tính bằng cm.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// Đèn xanh khi vật ở xa, đèn vàng khi vật ở gần, đèn đỏ khi vật ở quá gần.
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);
}
}
// Vật càng gần, tiếng bíp càng nhanh.
void beep(long cm) {
if (cm >= 100) {
noTone(buzzerPin);
} else if (cm < 10) {
tone(buzzerPin, 1000); // quá gần: âm báo liên tục
} 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);
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Dự án
3Cảm biến đỗ xe
Cảm biến đỗ xe: khoảng cáchCảm biến đỗ xe: đènCảm biến đỗ xe: tiếng bípCảm biến đỗ xe: màn hìnhTự luyện tập: Playground Arduino