Your cart is currently empty!


♦
Jekaterina Guzek, Õpimapp / Portfolio
Компоненты:
Схема:
Код:
// добавляем библиотеку LiquidCrystal
#include <LiquidCrystal.h>
// указываем, к каким цифровым пинам подключён LCD экран
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// создаём пользовательские символы (пиксельные изображения 5x8)
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,0b11111,0b01110,0b00100};
void setup() {
// инициализируем LCD экран: 16 столбцов, 2 строки
lcd.begin(16, 2);
// сохраняем пользовательские символы в память LCD
lcd.createChar(1, smiley);
lcd.createChar(3, armsDown); // мальчик с опущенными руками
lcd.createChar(4, armsUp); // мальчик с поднятыми руками
lcd.createChar(5, kass); // кот
lcd.createChar(6, tydruk); // девочка
lcd.createChar(7, v2ikesyda); // сердце
}
void loop() {
// ставим курсор на 3-й столбец первой строки
lcd.setCursor(2, 0);
// рисуем кота
lcd.write(5);
// рисуем девочку
lcd.write(6);
// устанавливаем курсор: 2-я строка, 14-й столбец
lcd.setCursor(13, 1);
// рисуем мальчика с опущенными руками
lcd.write(3);
delay(400);
// курсор: 1-я строка, 5-й столбец
lcd.setCursor(4, 0);
// рисуем 10 смайликов с паузой
for (int koht = 0; koht < 10; koht++) {
lcd.write(1);
delay(400);
}
// заменяем мальчика на вариант с поднятыми руками
lcd.setCursor(13, 1);
lcd.write(4);
// "разбрасываем" сердечки справа налево
for (int koht = 13; koht >= 4; koht--) {
lcd.setCursor(koht, 0);
lcd.write(7);
delay(400);
}
delay(400);
}
Объяснение, что делает программа:
Компоненты:
Arduino Uno
Код:
unsigned long algusAeg;
unsigned long kestus;
void setup() {
Serial.begin(9600);
algusAeg = millis(); // Сохраняем момент старта
Serial.println("Too algas!");
}
void loop() {
kestus = millis() - algusAeg;
unsigned long sekundid = kestus / 1000;
unsigned int tunnid = sekundid / 3600;
unsigned int minutid = (sekundid % 3600) / 60;
unsigned int sek = sekundid % 60;
Serial.print("Töö kestus: ");
if (tunnid < 10) Serial.print('0');
Serial.print(tunnid);
Serial.print(':');
if (minutid < 10) Serial.print('0');
Serial.print(minutid);
Serial.print(':');
if (sek < 10) Serial.print('0');
Serial.println(sek);
delay(1000);
}
Можно увидить результат и выводить информацию на Serial Monitor.
В данный момент мы видим сколько секунд/минут работает наша программа.
Компоненты:
Схема:
Код:
#include <LiquidCrystal.h>
// Подключение LCD по пинам: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int tempPin = A0; // TMP36
const int ldrPin = A1; // Фоторезистор
unsigned long lastUpdate = 0;
unsigned long startTime;
// Кастомные символы
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
};
void setup() {
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();
}
void loop() {
unsigned long currentMillis = millis();
// Температура и свет обновляются каждые 5 секунд
if (currentMillis - lastUpdate >= 5000) {
lastUpdate = currentMillis;
// Температура
int tempValue = analogRead(tempPin);
float voltage = tempValue * 5.0 / 1024.0;
float temperatureC = (voltage - 0.5) * 100;
// Свет
int ldrValue = 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));
} else if (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 long seconds = (millis() - startTime) / 1000;
unsigned int mins = (seconds / 60) % 60;
unsigned int hrs = (seconds / 3600);
unsigned int sec = 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, которая возвращает количество миллисекунд, прошедших с момента включения платы.
unsigned long seconds = (millis() - startTime) / 1000;
unsigned int mins = (seconds / 60) % 60;
unsigned int hrs = (seconds / 3600);
unsigned int sec = seconds % 60;
Расчёт времени с начала работы
При подключении питания на дисплее появляется:
PaiksePesa Loading...
Заголовок станции и сообщение о загрузке
Через 3 секунды начинается отображение текущей погоды, и пользователь видит:
Vaga kulm! ❄0:20
Coffie ☕ 00:0
Vihmane ilm 🌧
Coffie ☕ 00:00:45
Soe ja monus ☀
Coffie ☕ 00:01:29
Погода обновляется каждые 5 секунд, и пользователь замечает изменение символов и текста.
Внизу справа отображаются часы с момента включения:
00:12:08
Идут в реальном времени — это добавляет ощущения, что устройство «живое».
Видео схемы, как работает код на www.tinkercad.com
Так же видео как работает в реальности наш проект метеостанция
клип получился из несколько частей, т.к. был сделан за 2 учебных дня
millis()
без delay()