Katse LCD ekraani kasutamine:
Projekti koostamiseks läheb vaja:
1 x 1602 LCD ekraan
1 x potentsiomeeter
16 x tavalised üksikud isane-isane juhtmed
1 x 330 Ω takisti
Nüüd võib arendusplaadi USB juhtme abil arvutiga ühendada ning testida ekraani arenduskeskkonna näidisprogrammiga. Arenduskeskkonna LCD ekraani testimiseks mõeldud näited asuvad File -> Exampes -> LyquidCrystal valime nendest näiteks “Hello World”.
Seejärel leida koodi setup () meetodist üles rida lcd.print(“hello, world!”); ning asendada sõna world enda nimega. Peale koodi plaadile laadimist peaks ekraani ülemisele reale ilmuma kiri “hello, teie nimi” ning alumisele sekundiloendur. Keerata potentsiomeetrit nii palju vasakule kui võimalik, et tagada maksimaalne kontrastsus. Teksti mitteilmumise korral peaks üle kontrollima potentsiomeetri ühendused, taustavalguse probleemide korral kahe viimane pesa (A ja K) ühendused.
Esimene katsetus tehtud, saab proovida ekraanile joonistada endale meelepärast liikuvat pilti. Selleks avada erisümbolite näide File -> Exampes -> LyquidCrystal –
>CustomCharacter, mille katsetamisel ilmub käsi üles-alla liigutav mehike. Ekraan ise koosneb 32 kastikesest (16 veergu 2 rida), millest igaüks on 5 x8 pikslit. Kujutiste kuvamine toimub 8-baitiste järjendite abil, kus iga baidi 5 parempoolset bitti defineerivad ühe pikslirea. Järgnevas koodiplokis on toodud CustomCharacker koodist inspireeritud liikuva pildi kood.
Ühendamine:
Tulemuseks on liikuv pilt, kus poiss ja tüdruk üksteiseke südameid ja naerunägusid saadavad.
Code:
// lisame LiquidCrystal library
#include <LiquidCrystal.h>
// määrame, milliste digitaalpesadega ekraan ühendatud on
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,0b11111,0b01110,0b00100};
void setup() {
// algväärtustatakse LDC ekraani read ja veerud
lcd.begin(16, 2);
// defineerime erisümbolid
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() {
// 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);
}
Töö kestus milles() abil:
Kasutuskomponeendid:
Arduino Uno
Kellaaega lugemine ja kuvamine Arduino sisemise taimeri abil, kasutades funktsiooni millis().
🕒 Mis on millis()?
millis() on Arduino sisemine taimer, mis loeb aega alates seadme käivitumisest millisekundites (1 sekund = 1000 ms).
Sellega saad luua lihtsa “peamurdmiseta” kella, mis näitab tööaja kulgu (nt Töö kestus: 00:10:25).
Code:
unsigned long algusAeg;
unsigned long kestus;
void setup() {
Serial.begin(9600);
algusAeg = millis(); // Salvestame, millal töö algas
Serial.println("Töö 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); // Uuendame iga sekund
}
Mida see teeb?
- Loeb alates Arduino käivitamisest, kui kaua töö on kestnud.
- Kuvab aega formaadis
HH:MM:SS:Töö kestus: 00:00:05 Töö kestus: 00:00:06
Piirangud:
- Ei tea tegelikku kuupäeva ega kellaaega.
- Iga kord, kui Arduino taaskäivitub, loendus algab uuesti nullist.
Scheme:

Code:
#include <LiquidCrystal.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int tempPin = A1;
const int ldrPin = A0;
unsigned long previousMillis = 0;
const long interval = 5000;
byte sun[8] = {
0b00100,
0b10101,
0b01110,
0b11111,
0b01110,
0b10101,
0b00100,
0b00000
};
byte cloud[8] = {
0b00000,
0b01100,
0b10110,
0b11111,
0b11111,
0b01110,
0b00000,
0b00000
};
byte moon[8] = {
0b00011,
0b00110,
0b01100,
0b11000,
0b11000,
0b01100,
0b00110,
0b00011
};
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, sun);
lcd.createChar(1, cloud);
lcd.createChar(2, moon);
Serial.begin(9600);
lcd.setCursor(0, 0);
lcd.print("Ilmajaam alustab");
lcd.setCursor(0, 1);
lcd.print("Laen andmeid...");
delay(3000);
lcd.clear();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int tempRaw = analogRead(tempPin);
float voltage = tempRaw * (5.0 / 1023.0);
float temperature = (voltage - 0.5) * 100.0;
int ldrValue = analogRead(ldrPin);
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print(" C | Valgus: ");
Serial.println(ldrValue);
lcd.clear();
lcd.setCursor(0, 0);
if (ldrValue > 935) {
lcd.print("Paikseline");
lcd.setCursor(13, 0);
lcd.write(byte(0)); // ☀️
} else if (ldrValue > 925) {
lcd.print("Pilvine");
lcd.setCursor(13, 0);
lcd.write(byte(1)); // ☁️
} else {
lcd.print("Oö / Kuu");
lcd.setCursor(13, 0);
lcd.write(byte(2)); // 🌙
}
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature, 1);
lcd.print((char)223);
lcd.print("C");
}
}
Video:
