LCD Ekraan
Skeem:

Komponendid:
- Arduino Uno
- LCD Ekraan
- Fotoristor
- Arendusplaat
- 220Ω takisti
- Juhtmed
Töö protsess:
Imporditakse LiquidCrystal-raamatukogu ja määratakse, milliste Arduino digitaalportidega LCD on ühendatud.
Defineeritakse erinevad erisümbolid (nägu, kass, tüdruk, poiss käed alla/üles, väike süda) 8-baiti pikkuste massiividena.
Setup-osas häälestatakse LCD (16×2 märki) ja luuakse need kohandatud sümbolid lcd.createChar() abil.
Loop-tsüklis paigutatakse kursori abil ekraanile esmalt kass ja tüdruk, seejärel poisi kätega alla/üles vaheldumisi (animatsioon delay()-ga).
Järgneb for-tsükkel, mis joonistab ritta 10 smile’it, ning teine tsükkel, mis liigutab südameid paremalt vasakule, tekitades lihtsa animatsiooni.
millis()
millis() on Arduino sisemine taimer, mis loeb aega alates seadme käivitumisest millisekundites.
Sellega saad luua lihtsa «peamurdmiseta» kella, mis näitab tööaja kulgu.
Kuvab aega formaadis HH:MM:SS:
Ülesanne
Töö kirjeldus:
Luua mini-ilmajaam, mis kuvab reaalajas temperatuuri, valgustaset ja kella, lisaks vahelduvaid lauseid ja ikoone LCD-ekraanil.
Kasutatud komponendid:
- Arduino Uno
- TMP36 temperatuuriandur
- Fototakisti
- 10 kΩ takisti
- 2 x 220 Ω takisti
- 16×2 LCD-ekraan
- Ühenduskaablid
- Arendusplaat
Töö protsess:
Setup-osas initsialiseeritakse LCD-ekraan ja laaditakse mällu kohandatud ikoonid; seejärel käivitub põhitsükkel, mis iga 2 sekundi järel loeb andurite mõõdetud pinged, teisendab need loetavateks väärtusteks (temperatuur, valgus), põhineb künnistel määrab, millist ikooni ning eelmääratud teksti kuvatakse. Kuvamine toimub kahe reaga – ülemisel real tekst koos ikooniga, alumisel real temperatuur ja kellaaeg – ning iga viiendal läbikäigul asendub tavaline vaade reklaamilausendi.
Skeem:

Kood:
#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);
}
Video:
Uued funktsioonid:
LiquidCrystal lcd() – konstrueerib objekti, mille kaudu juhitakse LCD-ekraani.
lcd.begin(cols, rows) – initsialiseerib ekraani mõõtude (cols × rows) jaoks.
lcd.setCursor(x, y) – seab kursori veeru x ja rea y positsiooni.
lcd.print(tekst) – kuvab ekraanil mustri kursoripositsioonist alates (C-string või arv).
const char* – tüübimääre, mis osutab muutumatule C-stringile (tekstile).
byte icons[5][8] = {} – defineerib massiivi, kuhu salvestatakse 5 kohandatud 8-baiti pikkust ikooni.
lcd.write(indeks) – kuvab ekraanil kohandatud sümbolit salvestatud indeksiga.
lcd.clear() – tühjendab kogu ekraani sisu ja liigub kursoriga algusse.