Парковочный датчик: дисплей
Часть раздела Проекты путешествия по Arduino на Coddy. Урок 12 из 24.
Последний шаг выводит точное расстояние на экран. ЖК-дисплей 16x2 подключён стандартным способом: RS к 12, E к 11, D4—D7 к 5, 4, 3 и 2.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);Верхняя строка не меняется, поэтому выведите Distance: один раз в setup(), после lcd.begin(16, 2). В loop() обновляется только нижняя строка.
ЖК-дисплей хранит каждый символ, пока его чем-нибудь не заменят. При переходе от 250 cm к 8 cm вывод 8 cm поверх 250 cm оставляет в конце строки старые символы, и на экране отображается 8 cmcm. Выводите после текста несколько пробелов, чтобы перекрыть символы, оставшиеся от более длинного числа:
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");Пробелы также позволяют избежать мерцания при использовании lcd.clear(), которая очищала бы весь экран десять раз в секунду.
Задание
ЛегкоВыведи расстояние на 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);
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проекты
3Парковочный датчик
Парковочный датчик: расстояниеПарковочный датчик: световые сигналыПарковочный датчик: звуковые сигналыПарковочный датчик: дисплейПотренируйтесь самостоятельно: Песочница Arduino