5.1 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 220 Ω takisti
Piltide ekraanil kuvatavaks koodiks muutmisel aitab näiteks selline lehekülg: https://omerk.github.io/lcdchargen/
Kokkuvõte: mida programm teeb
- Tsükkel kordub lõputult (kuna see on
loop()
funktsioonis). - Kuvab ekraanile kassi ja tüdruku kujutise.
- Näitab poissi paremal all nurgas – alguses käed all, hiljem käed üles tõstetud.
- Animeerib 10 naeratavat nägu (smailit) ekraanile.
- Süda liigub animatsioonina poisi juurest tüdruku poole.

Interaktiivne skeemhttps://www.tinkercad.com/embed/hrNjUkeSEYY?editbtn=1
Skeem

Programm
// 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);
}
Ülesanne 5. Interaktiivne infoekraan “Ilmajaam”
Töö kirjeldus
Kasutatud komponenid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- LCD-ekraan (1tk)
- Potentiometer (1tk)
- Juhtmed (22tk)
- 220 Ω Takisti (1tk)
- 10 kΩ Takisti (1tk)
- Temperatuuri andur (1tk)
- Fototakisti (1tk)
Töö protsess
Uuritud funktsioonid
Kasutamisvõimalused tavaelus
Interaktiivne skeem
Skeem

Video
Programm
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int temperaturePin = A1;
const int lightPin = A0;
float voltage, degreesC;
char* tempTekstid[] = {
"Kylm ilm!", // < 15
"Monus ilm!", // 15–25
"Soojus kasvab!", // 25–30
"Palavus! Vett!" // >30
};
char* lightTekstid[] = {
"Paikseline", // < 85
"Pilvine", // 85–170
"Vihmane" // >170
};
byte smile[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
byte rain[8] = {
0b00100,
0b00100,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
0b01110
};
byte degrees[8] = {
0b01110,
0b01010,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte sad[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b01110,
0b10001,
0b00000,
0b00000
};
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.createChar(1, degrees);
lcd.createChar(2, smile);
lcd.createChar(3, rain);
lcd.createChar(4, heart);
lcd.createChar(5, sad);
lcd.setCursor(0, 0);
lcd.print("Ilmajaam:");
lcd.setCursor(0, 1);
lcd.print("TTHK ilm");
// paremale
for (int koht = 9; koht <= 15; koht++) {
lcd.setCursor(koht, 1);
lcd.write(byte(4));
delay(300);
lcd.setCursor(koht, 1);
lcd.print(" ");
}
// vasakule
for (int koht = 14; koht >= 9; koht--) {
lcd.setCursor(koht, 1);
lcd.write(byte(4));
delay(300);
lcd.setCursor(koht, 1);
lcd.print(" ");
}
lcd.setCursor(9, 1);
lcd.write(byte(4));
delay(1000);
}
void loop() {
// --- Temperatuur ---
voltage = analogRead(temperaturePin) * 0.004882814;
degreesC = (voltage - 0.5) * 100.0;
// --- Valgustus ---
int lightLevel = analogRead(lightPin);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
// Printimine Serial Monitori
Serial.print("Temp: ");
Serial.print(degreesC);
Serial.print(" °C | Light level: ");
Serial.println(lightLevel);
// Tekst temperatuuri järgi
char* tempTekst;
if (degreesC < 15) {
tempTekst = tempTekstid[0];
} else if (degreesC < 25) {
tempTekst = tempTekstid[1];
} else if (degreesC < 30) {
tempTekst = tempTekstid[2];
} else {
tempTekst = tempTekstid[3];
}
// Tekst valgustuse järgi
char* lightTekst;
byte lightIcon;
if (lightLevel > 170){
lightTekst = lightTekstid[2];
lightIcon = 3;
} else if (lightLevel > 85){
lightTekst = lightTekstid[1];
lightIcon = 5;
} else {
lightTekst = lightTekstid[0];
lightIcon = 2;
}
// Esimene ekraan: temperatuuritekst
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(tempTekst);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(degreesC, 1);
lcd.write(byte(1));
lcd.print("C");
delay(2000);
// Teine ekraan: valgustus ja ikoon
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lightTekst);
lcd.setCursor(strlen(lightTekst) + 1, 0);
lcd.write(lightIcon);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(degreesC, 1);
lcd.write(byte(1));
lcd.print("C");
delay(2000);
}