Robootika: LCD Ekraan

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 &lt;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: