Park Sensörü: Ekran
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 12 / 24.
Son adım, tam mesafeyi ekranda gösterir. 16x2 LCD her zamanki şekilde bağlanır: RS 12'ye, E 11'e, D4'ten D7'ye ise 5, 4, 3 ve 2'ye.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);Üst satır hiç değişmediği için lcd.begin(16, 2) işleminden sonra, setup() içinde bir kez Distance: yazdır. loop() içinde yalnızca alt satır güncellenir.
LCD, başka bir şey üzerine yazana kadar her karakteri tutar. 250 cm'den 8 cm'ye geçerken 250 cm üzerine 8 cm yazdırmak satırın sonundaki eski karakterleri bırakır ve ekranda 8 cmcm görünür. Daha uzun bir sayının bıraktığı her şeyi kapatmak için metinden sonra birkaç boşluk yazdır:
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");Boşluklar, tüm ekranı saniyede on kez boşaltacak olan lcd.clear() işleminin neden olduğu titremeyi de önler.
Görev
KolayMesafeyi LCD'de göster:
LiquidCrystal.h'yi ekle velcd(12, 11, 5, 4, 3, 2)oluştursetup()içinde:lcd.begin(16, 2)ve üst satırdaDistance:loop()içinde: alt satırda mesafe vecm, örneğin57 cm, ardından boşluklarla
Işıkları, bip seslerini ve yazdırmayı koru. Run'a, ardından Check'e bas.
Kendin dene
// Mesafe sensörü
const int trigPin = 9;
const int echoPin = 10;
// Uyarı ışıkları
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Sesli uyarıcı
const int buzzerPin = 8;
unsigned long lastBeep = 0; // son bip sesinin başladığı zaman
// Bir ping gönder ve mesafeyi cm cinsinden döndür.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// Yol açıkken yeşil, nesne yakındayken sarı, çok yakındayken kırmızı.
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);
}
}
// Nesne yaklaştıkça daha sık bip sesi çıkar.
void beep(long cm) {
if (cm >= 100) {
noTone(buzzerPin);
} else if (cm < 10) {
tone(buzzerPin, 1000); // çok yakın: kesintisiz bir ses
} 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);
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Arduino playground