Praktika 5 LCD ekraan, 5.1 Katse LCD ekraani kasutamine, Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

5.1 Katse LCD ekraani kasutamine

Tinkercad

Kood

// 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);

}

Kuidas kood töötab

Kood kuvab LCD-ekraanil enda loodud sümbolite abil animatsiooni: tüdruk, kass, poiss ja südamed. Eri sümbolid luuakse alguses ning kuvatakse ekraanile erinevates asukohtades. Smailid joonistatakse järjestikku ja südamed liiguvad tüdruku juurest poisi suunas. Animatsioon kordub pidevalt.

Uued Funktsioonid

  • lcd.begin(cols, rows) – initsialiseerib LCD-ekraani määratud veergude ja ridade arvuga.
  • lcd.createChar(num, data) – loob kohandatud sümboli, kus num on ID (0–7) ja data on baitide massiiv.
  • lcd.setCursor(col, row) – seab kursori asukoha LCD-ekraanil, kuhu järgnev tekst/sümbol kuvatakse.
  • lcd.write(value) – kuvab sümboli LCD-ekraanile, näiteks kohandatud sümboli ID.

Kuidas elus kasutada

  • Õppematerjalina programmeerimise ja LCD-ekraanide tööpõhimõtete õpetamisel algajatele.
  • Dekoratiivse ekraanina näiteks kingituse osana, mis kuvab armsat animatsiooni (tüdruk, poiss, süda).
  • Interaktiivse projektina, kus sümbolid või animatsioon muutuvad vastavalt näiteks nupuvajutusele või anduri väärtusele (nt liikumisanduriga armastusrobot).

Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

Tinkercad

Kood

#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() {
  // Обновляем каждые 1000 мс
  if (millis() - previousMillis >= 1000) {
    previousMillis = millis();
    secondsPassed++;
  }

  // Температура
  int tempRaw = analogRead(tempPin);
  float voltage = tempRaw * (5.0 / 1023.0);
  float temperature = (voltage - 0.5) * 100;

  // Освещённость
  int lightLevel = analogRead(lightPin);

  // "Погода"
  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";

  // Время (MM:SS)
  int minutes = secondsPassed / 60;
  int seconds = secondsPassed % 60;
  char timeStr[6];
  sprintf(timeStr, "%02d:%02d", minutes, seconds);

  // Строка 1
  lcd.setCursor(0, 0);
  lcd.print("T:");
  lcd.print(temperature, 1);
  lcd.print((char)223);
  lcd.print(" L:");
  lcd.print(lightLevel);

  // Строка 2
  lcd.setCursor(0, 1);
  lcd.print(phrase);
  lcd.setCursor(11, 1);  // Пишем время справа
  lcd.print(timeStr);

  delay(500);
}

Kuidas kood töötab

1. Initsialiseerimine:
Pärast sisselülitamist kuvatakse ekraanile tekst “Meteostantsiya”, seejärel algab põhitsükkel.

2. Andmete kogumine:

  • Temperatuur loetakse TMP36 andurilt (A0 pin) ja teisendatakse Celsiuse kraadideks.
  • Valgustugevus loetakse LDR-ilt (A1 pin), väärtuses vahemikus 0 kuni 1023.

3. Kuvamine ekraanil:

  • Esimene rida: temperatuur (°C) ja valguse tase.
  • Teine rida: ilmastikutingimuste kirjeldus sõltuvalt temperatuurist.

4. Fraasid ja tingimused:

  • temperatuur < 5“Prokhladno”
  • 5 ≤ temperatuur < 20“Pasmurno”
  • 20 ≤ temperatuur < 28“Teplo i yasno”
  • 28 ≤ temperatuur < 35“Solnechny den”
  • temperatuur ≥ 35“Ochen zharko”

5. Andmete uuendamine: toimub iga sekund, fraas valitakse uuesti vastavalt temperatuurile.

Uued Funktsioonid

  • millis() – Tagastab millisekundite arvu, mis on möödunud programmi käivitamisest, võimaldades jälgida aega ilma delay() kasutamata.
  • analogRead(pin) – Analoogsignaali lugemine pinnilt, mis on kasulik andurite, näiteks temperatuuri või valguse taseme mõõtmiseks.
  • (voltage - 0.5) * 100; – Analoogsignaali teisendamine temperatuurianduri väärtuseks, mis võimaldab töötada anduritega, nagu TMP36.
  • String phrase; – Muutujat, millele salvestatakse hetkeilma kirjeldus, mis muutub sõltuvalt temperatuurist ja valguse tasemest.
  • sprintf(timeStr, "%02d:%02d", minutes, seconds); – Aja vormindamine stringiks formaadis MM:SS, mis on kasulik aja kuvamiseks ekraanil.
  • lcd.setCursor(0, 0); – Kursorite positsiooni seadistamine ekraanil, et kuvada teavet, võimaldades teksti paigutuse kontrollimist.
  • lcd.print(temperature, 1); – Temperatuuri kuvamine ekraanil ühe koma järel, mis teeb andmed täpsemaks ja arusaadavamaks.

Kuidas elus kasutada

  • Ilmastijaam kodus või aias: Selle seadme abil saab jälgida kliimatingimusi teatud piirkonnas (näiteks toas või õues). Sa saad jälgida temperatuuri ja valgustust, mis on kasulik kasvuhoonetes, talveaedades või lihtsalt mugava elu tagamiseks.
  • Ilmajaama süsteem: Seda koodi saab kohandada kasutamiseks ilmajaamades, kus tuleb jälgida temperatuuri ja valgustuse taseme muutusi. Näiteks, kui paigaldada andurid erinevatesse kohtadesse linnas või õues, saab saada reaalajas ilmastikuandmeid.
  • Interjöörivalgustus: Valgustuse taseme andmete põhjal saab automaatselt reguleerida valgustuse heledust ruumis. Näiteks, kui valgustuse tase on alla teatud normi, saab sisse lülitada täiendavad valgustusallikad või ühendada automatiseeritud süsteemid valgustuse reguleerimiseks.

Video

https://drive.google.com/file/d/1borwwZkx1wWLfb4G_x__yzbjZJX2-1SN/view?usp=sharing