include <LiquidCrystal.h>
LiquidCrystal raamatukogu võimaldab juhtida LCD-dokumente HD44780 kontrolleriga.
byte smiley[8] = { … };
byte armsDown[8] = { … };
…
Need massiivid kirjeldavad kohandatud märke (8×5 pikslit), näiteks smiley, kass, tüdruk jne.
Initsialiseerimine setup():
cpp
Kopeeri
Redigeeri
lcd.begin(16, 2); // 16 märki, 2 rida
lcd.createChar(nr, symbol);
Funktsioon createChar() laeb loodud sümbolid ekraanile:
lcd.createChar(1, smiley); – salvestab smiley lahtrisse 1
Selliseid sümboleid saab laadida maksimaalselt 8 (lahtrid 0-7).
Näita kassi ja tüdrukut:
cpp
Kopeeri
Redigeeri
lcd.setCursor(2, 0); // Asukoht: 3. märk, 1. rida
lcd.write(5); // Märk “kass” (kass)
lcd.write(6); // Märk “tydruk” (tüdruk)
Näita “poiss” käed allapoole:
cpp
Kopeeri
Redigeeri
lcd.setCursor(13, 1);
lcd.write(3); // armsDown
delay(400);
Näita smiley nägusid:
cpp
Kopeeri
Redigeeri
lcd.setCursor(4, 0);
for (int koht = 0; koht < 10; koht++) { lcd.write(1); // smiley delay(400); }
Poiss tõstab käed üles: cpp Kopeeri Redigeeri lcd.setCursor(13, 1); lcd.write(4); // käedUp “Viskab” südamed: cpp Kopeeri Redigeeri for (int koht = 13; koht >= 4; koht–) {
lcd.setCursor(koht, 0);
lcd.write(7); // v2ikesyda (süda)
delay(400);
}
Kokkuvõte:
See kood loob animeeritud stseeni LCD-ekraanil:
Vasakul on kass ja tüdruk
Paremal on poiss, kes tõstab käed üles
Keskele ilmuvad naerualused
Seejärel „lendavad“ südamed

🧩 Mis on LCD1602 & Keypad Shield?
LCD1602 & Keypad Shield on laiendusmoodul, mis ühendub otse Arduino Uno peale.
Sisaldab LCD-ekraani ja 5 juhtnuppu, sobides kasutajaliidese loomiseks.
📟 LCD-ekraan (16×2)
- Kuvab 2 rida, igaüks 16 tähemärki
- Kasutab Hitachi HD44780 protokolli
→ ühilduv LiquidCrystal teegiga - LCD ühendatud otse Arduino digitaalsete pinidega
| Funktsioon | Arduino pin |
|---|---|
| RS | D8 |
| Enable (E) | D9 |
| Data D4 – D7 | D4, D5, D6, D7 |
| Taustvalgus | D10 (valikuline) |
🎛️ Nupud (Keypad)
- 5 nuppu:
UP,DOWN,LEFT,RIGHT,SELECT - Kõik nupud ühendatud ühe analoogpinni A0 kaudu
- Nupu vajutus tuvastatakse analoogväärtuste järgi
🔌 Paigaldus ja kasutus
- Ühendub otset Arduino Uno peale (“shield” / kilp)
- Sobib väikeste liidestega projektidele
(menüüd, valikud, seadistused)
🧩 5.3. Töö kestus millis() abil
🕒 Mis on millis()?
millis()on Arduino sisemine taimer, mis tagastab aja millisekundites, mis on möödunud alates seadme käivitamisest.- 1 sekund = 1000 ms
- Sobib tööaja, loendurite või animatsioonide ajastamiseks ilma delay() funktsioonita.
📋 Mida see teeb?
- Arvutab, kui kaua on töö kestnud alates käivitamisest.
- Kuvab aega formaadis HH:MM:SS, nt:
python-replCopyEditTöö kestus: 00:00:05
Töö kestus: 00:00:06
...
🔁 Piirangud
- Ei kuva reaalset kellaaega ega kuupäeva (nagu RTC moodul teeks).
- Aeg läheb nulli, kui Arduino taaskäivitub või reset tehakse.
🎓 Kus kasutada?
- Projektides, kus on vaja töö või mängu kestust jälgida
- Asenduseks
delay()funktsioonile ajastamisel - Aegade mõõtmiseks (nt vilkumise, animatsiooni, loenduri juhtimine)
Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 5, 6, 7, 8);
const int TEMP_PIN = A0, LDR_PIN = A1;
bool toggleVariant = false;
int lastIdx = -1; // eelmise sõnumi indeks
// Eemalda 'const' – nüüd on õige tüüp uint8_t*
byte icons[5][8] = {
{0b00100,0b10101,0b01110,0b11111,0b01110,0b10101,0b00100,0b00000},
{0,0b00110,0b01111,0b11111,0b11111,0b00000,0,0},
{0b00110,0b01111,0b11111,0b00100,0b01010,0b10001,0,0},
{0b01110,0b10101,0b11011,0b00100,0b11011,0b10101,0b01110,0},
{0,0b01010,0b11111,0b11111,0b01110,0b00100,0,0}
};
const char* msgs[5] = {
"Selge taevas",
"Pilvine ilm",
"Vihm varitseb",
"Lumi langeb",
"Armasta ilma"
};
const char* alts[5] = {
"Taevas puhas",
"Pilv katmas",
"Tibutab vett",
"Karge lumi",
"Naudi ilma"
};
float readTemp() {
float v = analogRead(TEMP_PIN) * (5.0 / 1023.0);
return (v - 0.5) * 100.0;
}
int readLdr() {
return analogRead(LDR_PIN);
}
int frameCount = 0;
void setup() {
lcd.begin(16, 2);
for (int i = 0; i < 5; i++) {
lcd.createChar(i, icons[i]);
}
lcd.setCursor(0, 0);
lcd.print("IlmaNurk");
delay(2000);
lcd.clear();
Serial.begin(9600);
}
void loop() {
frameCount++;
// Iga 5. iteratsiooni järel näita reklaami
if (frameCount >= 5) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("IlmaNurk soovitab");
lcd.setCursor(0, 1);
lcd.print("Joo teed! :)");
delay(3000);
frameCount = 0;
return;
}
float t = readTemp();
int l = readLdr();
int idx = (l > 800) ? 4 : (t > 25) ? 0 : (t < 0) ? 3 : (l < 300) ? 2 : 1;
if (idx != lastIdx) {
lastIdx = idx;
toggleVariant = false;
}
// vali kas peamine või variant
const char* txt = toggleVariant ? alts[idx] : msgs[idx];
toggleVariant = !toggleVariant;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(txt);
lcd.setCursor(15, 0);
lcd.write(idx);
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(t, 1);
lcd.print("C S:");
lcd.print(millis() / 1000);
Serial.print("Temp: ");
Serial.print(t, 1);
Serial.print(" C, Light: ");
Serial.print(analogRead(LDR_PIN));
Serial.print(", Index: ");
Serial.println(idx);
delay(2000);
}
📘 Mida see projekt teeb:
- Mõõdab temperatuuri ja valgustugevust.
- Määrab ilmaolude tüübi (nt: selge, pilvine, vihmane jne).
- Kuvab tekstilise teate ja ikooni LCD ekraanil.
- Vahetab peamise ja alternatiivse teate iga kord.
- Iga 5. kord kuvab LCD reklaami/sõnumi: „IlmaNurk soovitab – Joo teed!“
- Näitab ka temperatuuri ja tööaega sekundites.
- Saadab andmed Serial Monitori kaudu.
🧠 Uued funktsioonid ja selgitused:
| Käsk / Funktsioon | Selgitus |
|---|---|
#include <LiquidCrystal.h> | Lisab teegi LCD-ekraani jaoks. |
LiquidCrystal lcd(...) | Määrab, millised pinnid on ühendatud LCD-ga. |
lcd.begin(16, 2); | Algatab LCD töö (16 tähemärki, 2 rida). |
lcd.createChar(i, icons[i]); | Loob kasutaja enda tehtud graafilised ikoonid. |
lcd.setCursor(x, y); | Määrab, kuhu tekst kirjutatakse (x = veerg, y = rida). |
lcd.print(...) | Kuvab teksti LCD-l. |
lcd.write(idx); | Kuvab enda loodud ikooni vastavalt indeksile. |
analogRead(...) | Loeb anduri väärtust (0–1023). |
millis() | Tagastab aega millisekundites alates käivitamisest. |
Serial.begin(9600); | Käivitab ühenduse Serial Monitoriga. |
Serial.print() | Kuvab andmed arvutisse (monitori). |
📦 Muutujad ja nende tähendus:
TEMP_PIN– analoogsisend temperatuurile.LDR_PIN– analoogsisend valgusele.frameCount– loeb, mitu tsüklit on tehtud (reklaamiks iga 5 kord).idx– määrab ilmaolude tüübi (0–4):0– selge1– pilvine2– vihm3– lumi4– “armasta ilma” (väga valge või muu eriline)
🖼️ Näide ekraanilt:
makefileCopyEditTaevas puhas ☼
T:24.5C S:127
Või reklaami ajal:
nginxCopyEditIlmaNurk soovitab
Joo teed! :)
📈 Kuidas ilma määratakse?
cppCopyEditint idx = (l > 800) ? 4 :
(t > 25) ? 0 :
(t < 0) ? 3 :
(l < 300) ? 2 : 1;
Tõlge lihtsamalt:
- Kui väga hele valgus →
4(“Armasta ilma”) - Kui soe (t > 25°C) →
0(“Selge taevas”) - Kui väga külm (t < 0°C) →
3(“Lumi”) - Kui väga pime (valgus < 300) →
2(“Vihm”) - Muidu →
1(“Pilvine”)

