Menu
CoddyTech

주차 센서: 디스플레이

Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 12번째.

마지막 단계에서는 정확한 거리를 화면에 표시합니다. 16x2 LCD는 일반적인 방식으로 연결합니다. RS는 12번, E는 11번, D4부터 D7까지는 각각 5, 4, 3, 2번에 연결합니다.

#include <LiquidCrystal.h>

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

맨 윗줄은 바뀌지 않으므로 lcd.begin(16, 2) 다음에 setup()에서 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처럼 표시하고, 그 뒤에 공백을 넣으세요

불빛, 삐 소리, 출력은 그대로 유지하세요. Run을 누른 다음 Check를 누르세요.

직접 해보기

// 거리 센서
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 플레이그라운드