Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Mesafeyi LCD'de göster:

  • LiquidCrystal.h'yi ekle ve lcd(12, 11, 5, 4, 3, 2) oluştur
  • setup() içinde: lcd.begin(16, 2) ve üst satırda Distance:
  • loop() içinde: alt satırda mesafe ve cm, örneğin 57 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);
}
quiz iconKendini test et

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