Arduino для початківців. Магічна куля передбачень – робота з LCD та випадковими відповідями (Частина 11)

25.02.2025 2 хвилин Автор: Lady Liberty

У цій частині детально розглянуто схему підключення дисплея, використання функції random() та роботу з switch…case для відображення випадкових відповідей. Дізнайтеся, як запрограмувати ваш Arduino для роботи з текстовим екраном, додати власні відповіді та покращити взаємодію з користувачем!

Магічна куля передбачень

Магічні кулі можуть допомогти «передбачити» майбутнє. Ви ставите запитання всезнаючій кулі, перевертаєте її – і отримуєте відповідь.

Відповіді будуть заданими заздалегідь, але ви можете написати будь-які власні варіанти. Ваш Arduino вибиратиме одну з 8 можливих відповідей. Тумблерний датчик у вашому наборі імітуватиме рух струшування кулі, а LCD-дисплей використовуватиметься для виведення тексту. У вашому комплекті екран має 16 стовпців та 2 рядки, що дає загалом 32 символи.

На платі є багато з’єднань, які використовуються для живлення та обміну даними, щоб пристрій знав, що саме потрібно відобразити на екрані. Проте вам не доведеться підключати всі контакти. Подивіться Рис. 1, щоб дізнатися, які саме піни необхідно з’єднати.

Шпильки на РК-екрані, які використовуються в проекті, і мітки

Збірка схеми

На цій схемі розташування контактів РК-дисплея не відповідає фізичному порядку, зображеному на рис. 2. На схемі контакти переставлено за допомогою логічного групування, щоб зробити схему максимально зрозумілою. Це трохи бентежить новачків, поки ви до цього не звикнете.

Схема не надто складна, але проводів багато. Зверніть увагу, підключаючи все, щоб переконатися, що це правильно.

  1. Підключіть живлення до однієї сторони макетної плати, з’єднавши 5V і GND.

  2. Встановіть тумблерний датчик на макетну плату. Один його контакт підключіть до 5V, а інший – до землі через резистор 10 кОм. Цей же контакт підключіть до 6-го піну Arduino, оскільки датчик використовуватиметься як цифровий вхід.

  3. Контакт RS (Register Select) відповідає за розташування символів на екрані. Контакт R/W (Read/Write) визначає режим читання або запису. У цьому проєкті використовується режим запису. Контакт EN (Enable) повідомляє дисплею, що він отримує команду. Для передачі символів на екран використовуються контакти D0-D7, але в цьому проєкті задіяні лише D4-D7. Також необхідно підключити змінний резистор для регулювання контрастності дисплея.

  4. Бібліотека LiquidCrystal, яка входить до складу Arduino IDE, забезпечує керування цими контактами та спрощує процес виведення тексту на екран. Контакти Vss і LED- дисплея потрібно підключити до GND. Контакт R/W також з’єднується із землею, щоб екран працював у режимі запису. Живлення дисплея Vcc підключається безпосередньо до 5V. Контакт LED+ екрану з’єднується з живленням через резистор 220 Ом.

  5. Підключіть 2-й цифровий пін Arduino до контакту D7 дисплея, 3-й пін – до D6, 4-й пін – до D5, а 5-й пін – до D4. Ці контакти передають дані для виведення символів на екран.

  6. Контакт EN дисплея підключіть до 11-го піну Arduino, а RS – до 12-го піну. Ці підключення дозволять Arduino керувати виведенням тексту на екран.

  7. Встановіть потенціометр на макетну плату, підключивши один крайній контакт до 5V, інший – до GND, а середній контакт – до V0 дисплея. Це дозволить регулювати контрастність екрану.

Налаштування бібліотеки LiquidCrystal

Спочатку потрібно імпортувати бібліотеку LiquidCrystal. Потім ініціалізуйте її, вказавши, які саме піни будуть використовуватися для зв’язку, аналогічно до роботи з бібліотекою Servo.

Після цього створіть необхідні змінні та константи. Вам знадобиться константа для збереження номера піну перемикача, змінна для поточного стану перемикача, змінна для попереднього стану перемикача та змінна для вибору відповіді, яку буде показувати екран.

Вивід першого рядка

У функції setup() потрібно налаштувати switchPin як вхідний, використовуючи pinMode(). Далі ініціалізуйте бібліотеку LiquidCrystal і задайте розмір екрану, вказавши кількість стовпців і рядків.

Переміщення курсора

Настав час створити стартовий екран, який привітає користувача у магічній кулі. Функція print() використовується для виведення тексту на LCD-дисплей. Спочатку виведіть слова “Ask the” у першому рядку екрану. Курсор автоматично знаходиться на початку першого рядка.

Щоб перейти до наступного рядка, потрібно явно вказати дисплею нову позицію курсора. Координати першої колонки другого рядка – (0,1) (оскільки нумерація в програмуванні починається з нуля: (0,0) – це перший стовпець першого рядка). Використовуйте функцію lcd.setCursor(), щоб встановити курсор у правильне місце, та виведіть текст “Crystal ball!”.

Після запуску програми екран покаже “Ask the Crystal ball!”. У функції loop() спочатку потрібно перевірити стан перемикача та зберегти його значення у змінній switchState.

Вибір випадкової відповіді

Використовуйте if(), щоб перевірити, чи змінився стан перемикача порівняно з попереднім. Якщо він став LOW, тоді потрібно вибрати випадкову відповідь.

Функція random() повертає число у заданому діапазоні. Використовуючи random(8), ми отримаємо випадкове число від 0 до 7, що дозволить вибрати одну з восьми можливих відповідей. Отримане значення збережіть у змінну reply, яка визначатиме, що саме буде виведено на екран.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int switchPin = 6;
int switchState = 0;
int prevSwitchState = 0;
int reply;
void setup() {
 lcd.begin(16, 2);
 pinMode(switchPin,INPUT);
 lcd.print(“Ask the”);
 lcd.setCursor(0, 1);
 lcd.print(“Crystal Ball!”);
}
void loop() {
 switchState = digitalRead(switchPin);
 if (switchState != prevSwitchState) {
 if (switchState == LOW) {
 reply = random(8);

Передбачення майбутнього

Очистьте екран за допомогою функції lcd.clear(). Це також автоматично поверне курсор у позицію 0,0 – перший стовпець першого рядка на LCD-дисплеї. Виведіть рядок “The ball says:”, а потім перемістіть курсор для відображення відповіді.

Оператор switch() виконує різні блоки коду залежно від значення змінної reply. Кожен із цих блоків називається case. Функція switch() перевіряє значення змінної reply, і залежно від отриманого числа виконує відповідний case.

Усередині case-код буде однаковим за структурою, але відрізнятиметься повідомленнями. Наприклад, у випадку case 0 код виведе lcd.print(“Yes”). Після lcd.print() йде команда break – вона позначає завершення поточного блоку case і припиняє виконання switch().

Спочатку створіть 8 різних варіантів відповідей:

  • 4 позитивні,

  • 2 негативні,

  • 2 нейтральні (спробуй ще раз).

У кінці циклу loop() присвойте значення switchState змінній prevSwitchState. Це дозволяє контролювати зміни стану перемикача при наступному запуску циклу.

lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(“The ball says:”);
 lcd.setCursor(0, 1);
 switch(reply){
 case 0:
 lcd.print(“Yes”);
 break;
 case 1:
 lcd.print(“Most likely”);
 break;
 case 2:
 lcd.print(“Certainly”);
 break;
 case 3:
 lcd.print(“Outlook good”);
 break;
 case 4:
 lcd.print(“Unsure”);
 break;
 case 5:
 lcd.print(“Ask again”);
 break;
 case 6:
 lcd.print(“Doubtful”);
 break;
 case 7:
 lcd.print(“No”);
 break;
 }
 }
 }
 prevSwitchState = switchState;
}

Використання

Щоб скористатися магічною кулею, підключіть Arduino до живлення. Переконайтеся, що на екрані з’явився напис “Ask the Crystal ball!”. Якщо текст не відображається або виглядає нечітко, спробуйте повернути потенціометр – він змінює контрастність дисплея.

Задайте запитання магічній кулі та нахиліть тумблерний перемикач, перевертаючи його вгору-вниз. На екрані з’явиться випадкова відповідь. Якщо отримана відповідь вас не влаштовує – спробуйте ще раз!

Спробуйте додати власні вислови до операторів print(), але пам’ятайте, що в рядку можна використовувати лише 16 символів. Ви також можете спробувати додати більше відповідей. Переконайтеся, що коли ви додаєте додаткові випадки перемикання, ви регулюєте кількість параметрів, які випадковим чином заповнюватимуть змінну відповіді.

LCD-дисплеї функціонують, змінюючи електричні властивості рідини, розташованої між шарами поляризованого скла. Це скло пропускає лише певні види світла.

Коли рідина між шарами отримує електричний заряд, вона переходить у напівтвердий стан. У цьому стані молекули рідини змінюють свій напрямок, що відрізняється від напрямку поляризованого скла. Внаслідок цього світло блокується, створюючи на екрані символи, які ми бачимо.

Розглянуті тут функції для роботи з LCD-дисплеєм є досить простими. Як тільки ви освоїте основи, спробуйте вивчити інші можливості бібліотеки LiquidCrystal. Наприклад, можна реалізувати прокручування тексту або динамічне оновлення екрану.

Докладніше про можливості бібліотеки LiquidCrystal можна дізнатися на офіційному сайті: arduino.cc/lcd.

Завдяки LCD-дисплею можна виводити текст на екран, використовуючи бібліотеку LiquidCrystal. Використання оператора switch…case дозволяє контролювати логіку програми, порівнюючи змінну з певними значеннями.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.