Урок 9 · Крок 1 / 6
Відстань уже є в моніторі
- Візьми справну схему з уроку 07.
- Додай готовий LCD I²C, макетну плату й дроти.
- Переконайся, що монітор показує відстань до картону.
Датчик перевірений окремо. Спочатку працює код без LCD з цього кроку.
Що можна змінити
READ_MS = 500. LCD_ADDRESS з’явиться в наступній програмі.
Крок 1: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
delay(READ_MS);
}
Крок 1: код · 1/1
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 1 · ZIPУрок 9 · Крок 2 / 6
Спільне живлення двох модулів
- Від’єднай USB.
- Uno
5V → шина +, GND → шина −. VCC датчика й LCD → шина +; обидва GND → шина −.- LCD SDA →
A4, SCL → A5. - TRIG лиш на
D7, ECHO на D6. - Звір підключення зі схемою, під’єднай USB і завантаж код.
Датчик і екран під’єднані паралельно. Якщо шина розірвана посередині, користуйся однією половиною. Встанови LiquidCrystal I2C, як у 06.
Що можна змінити
LCD_ADDRESS — перевірена адреса модуля (Wokwi: 0x27). TITLE — заголовок до 16 символів.
Крок 2: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Крок 2: код · 1/2
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
Крок 2: код · 2/2
Це одна програма. Частини коду читаємо по черзі.
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 2 · ZIPУрок 9 · Крок 3 / 6
Одна відстань у двох місцях
- В Arduino IDE вибери плату Arduino Uno та її порт.
- Завантаж код.
- Відкрий «Інструменти → Монітор порту» (Tools → Serial Monitor).
- Унизу вибери 115200 baud — як у Serial.begin(115200).
- Поле надсилання залиш порожнім.
- У Wokwi запусти симуляцію: внизу з’явиться Serial Monitor.
- Подивись одночасно на LCD і монітор.
- Перемісти картон з 20 на 40 см.
У LCD другий рядок показує число й cm. У моніторі — те саме вимірювання; невелика затримка між оновленнями нормальна.
Що можна змінити
READ_MS: 200–1000 мс. TITLE: наприклад "Vidstan:". Контраст налаштуй регулятором.
Крок 3: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Крок 3: код · 1/2
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
Крок 3: код · 2/2
Це одна програма. Частини коду читаємо по черзі.
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 3 · ZIPУрок 9 · Крок 4 / 6
Зі 120 см до 8 см
- У Wokwi задай 120 см, потім 8 см.
- На фізичному датчику використай доступні в класі велику й малу відстані.
Після коротшого числа не лишаються цифри попереднього. 16 пробілів стирають лише другий рядок; курсор повертається на його початок.
Що можна змінити
Зміни TITLE на власний заголовок. Залиш 16 пробілів та обидва setCursor(0, 1).
Крок 4: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Крок 4: код · 1/2
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
Крок 4: код · 2/2
Це одна програма. Частини коду читаємо по черзі.
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 4 · ZIPУрок 9 · Крок 5 / 6
Замість вигаданого числа
- Поверни картон убік або прибери його.
- Поспостерігай, коли замість відстані з’являється No echo.
No echo з’являється замість числа. Коли відлуння повертається, знову бачиш сантиметри без залишків старого напису.
Що можна змінити
Не міняй умову cm < 0: вона відокремлює помилку від відстані.
Крок 5: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Крок 5: код · 1/2
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
Крок 5: код · 2/2
Це одна програма. Частини коду читаємо по черзі.
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 5 · ZIPУрок 9 · Крок 6 / 6
Власний заголовок і темп
- Задай TITLE = "Vidstan:" та READ_MS = 300.
- Перевір 10, 20 і 40 см, збережи скетч Distance_LCD.
Заголовок залишається на місці, а відстань оновлюється приблизно тричі на секунду.
Що можна змінити
TITLE — текст; READ_MS — пауза. Датчик, формула та піни залишаються тими самими.
Крок 6: повний код
Заміни весь скетч. Потім завантаж його в Uno або перезапусти Wokwi.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Крок 6: код · 1/2
Це одна програма. Частини коду читаємо по черзі.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
Крок 6: код · 2/2
Це одна програма. Частини коду читаємо по черзі.
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Код, схема й бібліотека кроку 6 · ZIPНаступний урок: Серво: перші положення →
Повний код і файли проєкту
Додаємо LCD до вже перевіреного датчика.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}
Wokwi потребує інтернету. Завантажений HTML-урок працює офлайн.
Урок 9 · Повний код
Відстань на власному екрані
Додаємо LCD до вже перевіреного датчика.
#include <Arduino.h>
const byte TRIG_PIN = 7;
const byte ECHO_PIN = 6;
const unsigned long READ_MS = 500;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte LCD_ADDRESS = 0x27;
const char TITLE[] = "Distance:";
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long echoUs = pulseIn(ECHO_PIN, HIGH, 25000UL);
float cm = echoUs / 58.0;
if (echoUs == 0 || cm < 2 || cm > 400) {
return -1;
}
return cm;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(TITLE);
}
void loop() {
float cm = readDistanceCm();
if (cm < 0) {
Serial.println("No echo");
} else {
Serial.print("Distance: ");
Serial.print(cm, 1);
Serial.println(" cm");
}
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (cm < 0) {
lcd.print("No echo");
} else {
lcd.print(cm, 1);
lcd.print(" cm");
}
delay(READ_MS);
}