Компоненты:

- 1 LCD экран (1602)
- 1 Потенциометр
- 1 Резистор 220 Ω
Схема:

Код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// loome erisümbolid
byte smiley[8] ={0b00000,0b00000,0b01010,0b00000,0b00000,0b10001,0b01110,0b00000};
byte armsDown[8] ={0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010};
byte armsUp[8] ={0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010};
byte kass[8] ={0b00000,0b00000,0b00000,0b10000,0b10011,0b11111,0b01110,0b01010};
byte tydruk[8] ={0b00100,0b01010,0b00100,0b11111,0b00100,0b00100,0b01110,0b11111};
byte v2ikesyda[8] ={0b00000, 0b00000, 0b00000, 0b11011, 0b11111, 0b01110, 0b00100, 0b00000};
void setup() {
// algväärtustatakse LDC ekraani read ja veerud
lcd.begin(16, 2);
// defineerime erisümbolid
lcd.createChar(1, v2ikesyda);
lcd.createChar(3, armsDown);
lcd.createChar(4, armsUp);
lcd.createChar(5, kass);
lcd.createChar(6, tydruk);
lcd.createChar(7, smiley);
}
void loop() {
// koht kuhu hakkame joonistama - 3. veerg, esimene rida
lcd.setCursor(2, 0);
// joonistame kassi
lcd.write(5);
// ja tüdruku
lcd.write(6);
//muudame kursori asukohta: 2. rida 14. veerg
lcd.setCursor(13, 1);
// joonistame poisi
lcd.write(3);
delay(400);
//muudame kursori asukohta: 1. rida 5. veerg
lcd.setCursor(4, 0);
//joonistame for tsükli abil väikese pausiga 10 smaili
for (int koht = 0; koht < 10; koht++) {
lcd.write(1);
delay(400);
}
lcd.setCursor(13, 1);
lcd.write(4);
//loobime südameid
for (int koht = 13; koht >= 4; koht--) {
lcd.setCursor(koht, 0);
lcd.write(7);
delay(400);
}
delay(400);
}
Описание процессов
Инициализация дисплея и создание символов
- Подключаем библиотеку
LiquidCrystalи настраиваем интерфейс: пины 12,11→RS,E и 5,4,3,2→D4–D7. - В
setup()вызываемlcd.begin(16, 2)для 16×2-строчного дисплея. - С помощью
lcd.createChar()загружаем в память шесть пользовательских символов (кошку, девочку, мальчика с опущенными и поднятыми руками, смайлик и маленькое сердечко).
Первый кадр: кот и девочка + мальчик внизу
lcd.setCursor(2, 0)— ставим курсор на 1-й строке в колонку 3 (индексация с 0).lcd.write(5)рисуем символ кошки, затемlcd.write(6)— девочку.lcd.setCursor(13, 1)— переходим на 2-ю строку, колонку 14, иlcd.write(3)рисуем мальчика с опущенными руками.
Анимация смайликов вверху
- Через
forот 0 до 9: каждую итерациюlcd.write(1)рисует на текущей позиции маленькое сердечко,- затем
delay(400)даёт паузу в 0,4 с, чтобы сердца появлялись одно за другим.
Переход к позе «руки вверх» у мальчика
- После цикла смайликов снова
lcd.setCursor(13, 1)иlcd.write(4)заменяет символ мальчика на вариант с поднятыми руками.
Анимация больших сердец, идущих назад
for (int koht = 13; koht >= 4; koht--): с позиции 14 по 5 на первой строке ставим смайлик (lcd.write(7)),- между ними по 0,4 с
delay(400), так что большие сердца «идут» справа налево.
Задержка перед перезапуском
- В конце
delay(400)— пауза и затем циклloop()повторяется, а всё анимация начинается заново.
Интерактивный информационный экран «Метеостанция»
Компоненты:

- 1 LCD экран (1602)
- 1 Потенциометр
- 1 Резистор 220 Ω
- 1 Резистор 10 КΩ
- Температурный датчик
- Фоторезистр
Схема:

Код:
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | #include <LiquidCrystal.h>// Подключение LCD по пинам: RS, E, D4, D5, D6, D7LiquidCrystal lcd(12, 11, 5, 4, 3, 2);constinttempPin = A0; // TMP36constintldrPin = A1; // Фоторезисторunsigned longlastUpdate = 0;unsigned longstartTime;// Кастомные символыbyte snow[8] = { 0b00000, 0b10001, 0b01010, 0b01110, 0b01010, 0b10001, 0b00000, 0b00000};byte sun[8] = { 0b00000, 0b10101, 0b01110, 0b11111, 0b01110, 0b10101, 0b00000, 0b00000};byte rain[8] = { 0b11110, 0b11110, 0b00111, 0b01000, 0b00010, 0b01000, 0b00010, 0b01000};byte tea[8] = { 0b00001, 0b01110, 0b10000, 0b01100, 0b00000, 0b11111, 0b01110, 0b01110};voidsetup() { lcd.begin(16, 2); Serial.begin(9600); // Загрузка масива в память дисплея (ячейки 0–3) lcd.createChar(0, snow); lcd.createChar(1, sun); lcd.createChar(2, rain); lcd.createChar(3, tea); // Приветствие lcd.setCursor(0, 0); lcd.print("PaiksePesa"); lcd.setCursor(0, 1); lcd.print("Loading..."); delay(3000); lcd.clear();}voidloop() { unsigned longcurrentMillis = millis(); // Температура и свет обновляются каждые 5 секунд if(currentMillis - lastUpdate >= 5000) { lastUpdate = currentMillis; // Температура inttempValue = analogRead(tempPin); floatvoltage = tempValue * 5.0 / 1024.0; floattemperatureC = (voltage - 0.5) * 100; // Свет intldrValue = analogRead(ldrPin); Serial.print("Temp: "); Serial.print(temperatureC); Serial.print(" Light: "); Serial.println(ldrValue); // Очистим только верхнюю строку (где погода) lcd.setCursor(0, 0); lcd.print(" "); //чтобы стереть пишим пустую строку lcd.setCursor(0, 0); // Условия погоды if(temperatureC < 10) { lcd.print("Vaga kulm! "); lcd.write(byte(0)); } elseif(ldrValue >300) { lcd.print("Vihmane ilm "); lcd.write(byte(2)); } else{ lcd.print("Soe ja monus "); lcd.write(byte(1)); } // Кофе / т.к. С чаем все плохо было lcd.setCursor(0, 1); lcd.print("Coffie "); lcd.write(byte(3)); } // Отображение часов unsigned longseconds = (millis() - startTime) / 1000; unsigned intmins = (seconds / 60) % 60; unsigned inthrs = (seconds / 3600); unsigned intsec = seconds % 60; // Часы справа на нижней строке lcd.setCursor(9, 1); // после "Coffie" if(hrs < 10) lcd.print("0"); lcd.print(hrs); lcd.print(":"); if(mins < 10) lcd.print("0"); lcd.print(mins); lcd.print(":"); if(sec < 10) lcd.print("0"); lcd.print(sec);} |
#include <LiquidCrystal.h>
Подключает библиотеку для работы с LCD 16×2 (или 20×4) дисплеем, который работает по 4-битному интерфейсу.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Указывает, какие пины Arduino подключены к дисплею:
| LCD Пин | Назначение | Arduino Пин |
|---|---|---|
| RS | Регистр | 12 |
| E | Enable | 11 |
| D4 | Данные | 5 |
| D5 | Данные | 4 |
| D6 | Данные | 3 |
| D7 | Данные | 2 |
lcd.begin(16, 2);
Запускает дисплей размером 16 символов на 2 строки.
lcd.setCursor(colum, row);
Устанавливает позицию курсора перед тем как печатать текст.
lcd.print("текст");
Печатает строку текста на дисплей с текущей позиции курсора.
lcd.clear();
Очищает весь экран и устанавливает курсор в начало (0,0).
lcd.createChar(номер, массив);
Создаёт символ, например снежинку, солнце или чашку чая.
millis()
Функция Arduino, которая возвращает количество миллисекунд, прошедших с момента включения платы.
| 1234 | unsigned longseconds = (millis() - startTime) / 1000;unsigned intmins = (seconds / 60) % 60;unsigned inthrs = (seconds / 3600);unsigned intsec = seconds % 60; |
Расчёт времени с начала работы
Как пользователь видит работу:
1.Включение
При подключении питания на дисплее появляется:
PaiksePesa Loading...
Заголовок станции и сообщение о загрузке
2. Определение погоды
Через 3 секунды начинается отображение текущей погоды, и пользователь видит:
Пример при холоде:
Vaga kulm! ❄
Coffie ☕ 00:00:20
- Указывает, что очень холодно
- Советы: выпей чай, грейся
Пример при темноте (дождливая погода):
Vihmane ilm 🌧Coffie ☕ 00:00:45
Пример при свете и тёплой температуре:
Soe ja monus ☀Coffie ☕ 00:01:29
Погода обновляется каждые 5 секунд, и пользователь замечает изменение символов и текста.
⏰ 3. Часы
Внизу справа отображаются часы с момента включения:
00:12:08
Идут в реальном времени — это добавляет ощущения, что устройство «живое».
Видео
Так же видео как работает в реальности наш проект метеостанция