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

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

}

2. Töö kestus milles() abil

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).


Näide: tööaja loendur Serial Monitoris

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.

Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

Selle ülesande eesmärk on luua oma kujundatud mini-ilmajaam, mis kuvab andmete põhjal teavet LCD-ekraanil. Kasutades erinevaid andureid (nt temperatuurisensor, valgustundlik andur, kella moodul jne), kuvatakse reaalajas ilmastikutingimused, asjakohased laused ja vastavad pildid, mis võivad muutuda sõltuvalt ajast või mõõdetud andmetest. Õpilased peavad mõtlema oma ilmajaamale nime, looma iseloomuliku tööprotsessi ja kasutama vähemalt 5 erinevat sõnumit ja pilti, mida kuvatakse LCD-ekraanil.

Komponendid

1x LCD Ekraan
1x Temperatuuri Sensori
1x Fotoresistor
1x Potentsiometer
1x 220 Oom Takisti
1x 10K Oom Takisti
20x Juhtmed

Töö protsess

Ekraani algatamine (lcd.begin(16, 2)):

  • Kood alustab ekraani seadistamist, et saaksime hiljem andmeid kuvada.
  • Sensori andmete lugemine:
  • Temperatuur (analogRead(tempPin)) loetakse temperatuuriandurilt (A1). Pinge teisendatakse temperatuuriks funktsiooniga (voltage - 0.5) * 100.0.
  • Valgustase (analogRead(lightPin)) loetakse valgustundlikult sensorilt (A0).

Temperatuuri teisendamine (degreesF = temperature * (9.0 / 5.0) + 32.0):

  • Kui temperatuur on loetud, teisendatakse see Celsiuse kraadist Fahrenheit kraadiks vastavalt sellele valemile.

Ekraanile kuvamine:

  • lcd.clear() puhastab ekraani iga tsükli alguses, et kuvada uus teave.
  • lcd.print("Temp: ") ja lcd.print(lightLevel) kuvavad temperatuuri ja valgustunde taseme ekraanil.
  • Temperatuur kuvatakse kas Celsiuses või Fahrenheitis sõltuvalt sellest, kas fDegrees on true või false.

Ühiku vahetamine:

  • Iga 500 ms tagant (if (currentMillis - lastDegreeSwitch > 500)), vahetatakse temperatuuride kuvamise ühikut Celsiuse ja Fahrenheiti vahel.

Emotikonide kuvamine (lcd.print(":)") või lcd.print(":(")) :

  • Iga 10 sekundi tagant (if (currentMillis - lastEmojiShowTime >= emojiInterval)), kuvab ekraan kas naeratava või kurva näo, sõltuvalt sellest, kas temperatuur on üle 25°C või mitte.

Ajahaldus:

  • Ajatootmiseks kasutatakse millis() funktsiooni, mis annab koodile jooksva aja. Selle abil saab juhtida, millal andmeid lugeda, kuvada emotikone ja vahetada ühikuid.

Kood

Video