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

https://www.tinkercad.com/embed/4F6XgOCAl6E?editbtn=1

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