Katse 5.1.

// 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);
}
include LiquidCrystal.h – Lisame LiquidCrystal raamatukogu, et saaks LCD-ekraani juhtida.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); – Määrame, millised digitaalsed pesad on ühendatud LCD ekraani pinidega
byte smiley[8] = { … }; – Loome “naerunäo” sümboli, määrates iga rea pikslid.
lcd.begin(16, 2); – Seadistame LCD ekraani, millel on 16 veergu ja 2 rida.
lcd.createChar(1, smiley); – Loome LCD jaoks erisümboli koodiga 1 (naerunägu)
lcd.setCursor(2, 0); – Määrame kursori asukoha: 3. veerg, 1. rida (indekseerimine alates 0).
lcd.write(5); – Joonistame sümboli (kass), mille kood on 5.
lcd.write(6); – Joonistame tüdruku sümboli.
lcd.setCursor(13, 1);
lcd.write(3); – Teises reas (1. rida), joonistame sümboli käed all (poiss)
Katse 5.2.

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
}
unsigned long algusAeg;
unsigned long kestus; – Määrame kaks muutujat: algusAeg (algusaja salvestamiseks) ja kestus (kogu töö kestuse jaoks)
Serial.begin(9600); – Algatame seeriaühenduse kiirusel 9600 bitti sekundis.
algusAeg = millis(); Salvestame, millal töö algas – Salvestame aja, mil kood käivitus (millal algas töö), kasutades millis() funktsiooni, mis tagastab aja millisekundites
kestus = millis() – algusAeg; – Arvutame, kui palju aega on möödunud alates töö algusest, lahutades algusaja praegusest ajast (saadud millis() abil). /
unsigned int tunnid = sekundid / 3600; – Arvutame täistunnid, jagades sekundid 3600-ga (tundides on 3600 sekundit)
unsigned int minutid = (sekundid % 3600) / 60; – Arvutame minutid, võttes jäägi jagamisest 3600-ga (seega alles jäävad sekundid, mis ei mahuks täis tunniks) ja jagades selle 60-ga (ühes minutis 60 sekundit).
unsigned int sek = sekundid % 60; – Arvutame sekundid, kasutades jääki, mis jääb pärast jagamist 60-ga (kui palju on jäänud )
if (tunnid < 10) Serial.print(‘0’); – Kui tunnid on väiksemad kui 10, siis lisame eelnevalt “0”, et formaat oleks alati kahe numbriga
Serial.print(tunnid); – Trükkige tunnid.
if (minutid < 10) Serial.print(‘0’); – Kui minutid on väiksemad kui 10, siis lisame “0”.
Serial.print(minutid); – Trükkige minutid.
if (sek < 10) Serial.print(‘0’); – Kui sekundid on väiksemad kui 10, siis lisame “0”
Serial.println(sek); – Trükkige sekundid ja läheme järgmisele reale.
Interaktiivne infoekraan “Ilmajaam”
Töö kirjeldus:
Interaktiivne teabeekraan Ilmajaam, mis kuvab ekraanil ilma sõltuvalt temperatuurianduri temperatuurist ja fotoresistori heledusest.
1) Jahe
2) Väga kuum
3) Päikeseline päev
4) Pilvine
5) Soe ja selge
6) Pilvine
Ekraanil oleva teksti heledust saab muuta ka potentsiomeetri abil.
Ekraanil T = temperatuur ja L = valgustase
Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (22tk)
Takisti (2tk, 220Om ja 10000Om)
PHOTORESISTOR (1tk)
Temperature Sensor (1tk)
Potentiometer (1tk)
LCD ekraan 16×2 (1tk)
Töö protsess:
Interaktiivne infoekraan Ilmajaam, mis kuvab ekraanil ilma sõltuvalt temperatuurianduri temperatuurist.
1) Väga kuum
2) Päikeseline päev
3) Soe ja selge
4) Jahe
Ekraanil oleva teksti heledust saab muuta ka potentsiomeetri abil. Fotoresistori heledus mõjutab seda, kui eredalt on väljas, lisades järgmised režiimid
1) Pilvine
2) Jahe
( kui heledus on minimaalne )
Ekraanil T = temperatuur ja L = valgustase ja Time
– Kui temperatuur on alla 10 °C, kuvatakse „Prokhladno“ (jahe).
– Kui temperatuur on kõrgem kui 28 °C, siis „Ochen zharko“ (väga kuum).
– Kui temperatuur on üle 18 °C ja valgustase on üle 600, siis „Solnechny den“ (päikesepaisteline päev).
– Kui valgustase on alla 300, „Pasmurno“ (pilves).
– Vastasel juhul kuvatakse „Teplo i yasno“ (soe ja selge).
LED-ide rakendamine:
Ilmateade kaubanduskeskustes, majades, tänavatel
Skeem:

Programm:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int tempPin = A0;
const int lightPin = A1;
unsigned long previousMillis = 0;
int secondsPassed = 0;
void setup() {
lcd.begin(16, 2);
lcd.print("Meteostantsiya");
delay(2000);
lcd.clear();
}
void loop() {
// Värskendamine iga 1000 ms järel
if (millis() - previousMillis >= 1000) {
previousMillis = millis();
secondsPassed++;
}
// Temperatuur
int tempRaw = analogRead(tempPin);
float voltage = tempRaw * (5.0 / 1023.0);
float temperature = (voltage - 0.5) * 100;
// Valgustus
int lightLevel = analogRead(lightPin);
// Ilm
String phrase;
if (temperature < 10) phrase = "Prokhladno";
else if (temperature > 28) phrase = "Ochen zharko";
else if (temperature > 18 && lightLevel > 600) phrase = "Solnechny den";
else if (lightLevel < 300) phrase = "Pasmurno";
else phrase = "Teplo i yasno";
// Kellaaeg (MM:SS)
int minutes = secondsPassed / 60;
int seconds = secondsPassed % 60;
char timeStr[6];
sprintf(timeStr, "%02d:%02d", minutes, seconds);
// Rida 1
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print((char)223);
lcd.print(" L:");
lcd.print(lightLevel);
// Rida 2
lcd.setCursor(0, 1);
lcd.print(phrase);
lcd.setCursor(11, 1);
lcd.print(timeStr);
delay(500);
}
Video:
https://drive.google.com/file/d/1borwwZkx1wWLfb4G_x__yzbjZJX2-1SN/view?usp=sharing
Uued funktsioonid :
lcd.begin(16, 2); – Initsialiseerib 16×2 LCD-ekraani (16 märki kahel real). // Инициализирует LCD экран с размерами 16×2 (16 символов на 2 строки).
lcd.clear(); – Tühjendab ekraani pärast viivitust // Очищает экран после задержки
sprintf(timeStr, “%02d:%02d”, minutes, seconds); – vormindab kellaaja stringi MM:SS formaadis // форматирует строку времени в формат MM:SS
lcd.setCursor(0, 0); – Ekraani esimene rida näitab andmeid temperatuuri ja valgustugevuse kohta. // В первой строке дисплея отображаются данные о температуре и силе света.
lcd.setCursor(0, 1); – Ekraani teisel real kuvatakse lause ilma kohta. // На второй строке экрана выводится фраза о погоде.


