This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:sensorss:project1 [2017/05/11 10:53] – Somepub | et:arduino:sensorss:project1 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Projekt 3 Alfabeetiline LCD ====== | ||
| + | Ühendada Arduino plaadiga LCD laiendusplaat. Laiendusplaat toimib Arduino peal ainult ühte pidi. Õige ühenduse korral on kõik laiendusplaadi jalad Arduino plaadiga kontaktis ja plaadi serv on Arduino plaadi USB pesa poolt üle ääre. | ||
| + | |||
| + | ===== Näide #3.1 LCD ekraanile kirjutamine ===== | ||
| + | Ekraanile kirjutamiseks vajalikud tähemärgid on LCD draiveri mälus juba olemas ja nende kuvamiseks on vaja saata ASCII tabelile vastav number. Lihtsuse mõttes teeb teek " | ||
| + | Näiteprogramm alustab ekraani seadistamisega. Määrame ära ühendusviigud ja ekraani suuruse, mis on tarvilik ekraani korrektseks funktsioneerimiseks. Järgnevalt trükime ekraanile tervitusteksti, | ||
| + | Täpsemalt teegi " | ||
| + | < | ||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #3.1 | ||
| + | Kirjeldus: LCD ekraanile kirjutamine | ||
| + | */ | ||
| + | // Vajaliku teegi kaasamine | ||
| + | #include < | ||
| + | |||
| + | // LCD objekti tekitamine ja ühendusviikude määramine. | ||
| + | // NB! Need viigud võivad olla erinevatel LCD laiendusplaatidel erinevad | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // LCD ridade ja veergude määramine vastavalt riistvarale | ||
| + | lcd.begin(16, | ||
| + | | ||
| + | // Ekraani tervitusteksti kuvamine | ||
| + | lcd.print(" | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Kursori asukohta muutmine: esimene veerg(tähis 0) ja teine rida (tähis 1) | ||
| + | lcd.setCursor(0, | ||
| + | | ||
| + | // Ekraani loenduri väärtuse kuvamine | ||
| + | lcd.print(millis()/ | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Näide #3.2 Erikujuliste tähemärkide kuvamine LCD ekraanil ===== | ||
| + | Käesoleva LCD draiver võimaldab lisaks ASCII tabeli tähemärkidele lisada ka erikujulisi tähemärke. Tähemärgi lisamiseks on vaja tekitada ühe tähemärgi pikslite arvule vastav massiiv. Selle massiiviga määratakse ära tähemärgi aktiivsed pikslid. Pärast tähemärgi ekraani draiveri mällu laadimist käsuga // | ||
| + | |||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #3.2 | ||
| + | Kirjeldus: Erikujuliste tähemärkide tekitamine ja kuvamine LCD ekraanil | ||
| + | */ | ||
| + | // Vajaliku teegi kaasamine | ||
| + | #include < | ||
| + | |||
| + | // LCD objekti tekitamine ja ühendusviikude määramine | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | |||
| + | /* Massiiv erikujulise tähemärgi tekitamiseks, | ||
| + | " | ||
| + | | ||
| + | | ||
| + | byte customChar[8] = | ||
| + | { | ||
| + | 0b11111, | ||
| + | 0b00000, | ||
| + | 0b01010, | ||
| + | 0b00000, | ||
| + | 0b10001, | ||
| + | 0b01110, | ||
| + | 0b00000, | ||
| + | 0b11111 | ||
| + | }; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // Tekitab uue erikujulise tähemärgi draiveri mällu kohale 0 | ||
| + | lcd.createChar(0, | ||
| + | | ||
| + | // LCD ridade ja veergude määramine vastavalt riistvarale | ||
| + | lcd.begin(16, | ||
| + | |||
| + | // Draiveri mälus kohal 0 oleva erikujulise tähemärgi kuvamine ekraanile | ||
| + | lcd.write((uint8_t)0); | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | /* Tsüklis ei tehta midagi kogu tegevus | ||
| + | on sooritatud juba //setup// funktsioonis */ | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Näide #3.3 LCD laiendusplaadi nuppude lugemine ===== | ||
| + | Järgnevas näites võtame kasutusele LCD laiendusplaadil olevad nupud. Programmi tööpõhimõtte mõistmiseks on soovitav tutvuda nuppude ühendusskeemiga 6. peatüki alguses. Nimelt kasutame nuppude lugemiseks eelnevast peatükist tuttavat // | ||
| + | Programm alustab sarnaselt eelnevatele näidetele LCD seadistustega. Loetavuse parendamiseks tekitame konstandid iga nupu jaoks. Peatsükli (loop) koodi ridade arvu vähendamiseks loome uue funktsiooni nimega // | ||
| + | |||
| + | < | ||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #3.3 | ||
| + | Kirjeldus: LCD laiendusplaadi nuppude lugemine | ||
| + | */ | ||
| + | // Vajaliku teegi kaasamine | ||
| + | #include < | ||
| + | |||
| + | // LCD objekti tekitamine ja ühendusviikude määramine | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | |||
| + | // Nupude konstandi defineerimine | ||
| + | const int nuppRIGHT = 0; | ||
| + | const int nuppUP | ||
| + | const int nuppDOWN | ||
| + | const int nuppLEFT | ||
| + | const int nuppSELECT = 4; | ||
| + | const int nuppNONE | ||
| + | |||
| + | /* Globaalsed muutujad */ | ||
| + | // Vajutatud nupu muutuja konstandi salvestamine | ||
| + | int vajutatudNupp; | ||
| + | // Aanaloogsisendi muutuja väärtuse salvestamine | ||
| + | int nupuSisend; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // LCD ridade ja veergude määramine vastavalt riistvarale | ||
| + | lcd.begin(16, | ||
| + | | ||
| + | // Ekraani info kuvamine | ||
| + | lcd.print(" | ||
| + | | ||
| + | // Ekraani analoogsisendi A0 väärtuse kuvamine | ||
| + | lcd.print(analogRead(A0)); | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | /* Kutsub välja funktsiooni kontrolliNuppe | ||
| + | ja salvestab tagastatud väärtuse muutujasse */ | ||
| + | vajutatudNupp = kontrolliNuppe(); | ||
| + | | ||
| + | // Kontrollib kas mõni nupp on alla vajutatud | ||
| + | if(vajutatudNupp < nuppNONE) | ||
| + | { | ||
| + | lcd.clear(); | ||
| + | | ||
| + | lcd.print(" | ||
| + | | ||
| + | lcd.print(nupuSisend); | ||
| + | | ||
| + | delay(500); // Lühike viide, et ekraanil väärtust liiga kiirelt ei uuendataks | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | < | ||
| + | <code c> | ||
| + | // Funktsioon võtab analoogsisendi väärtuse ja võrdleb olemasolevate väärtustega. | ||
| + | // Tagastab arvu vahemikus 0 kuni 5 vastavalt defineeritud konstandile | ||
| + | int kontrolliNuppe() | ||
| + | { | ||
| + | // Salvestab muutujasse analoogväärtuse viigult A0 | ||
| + | | ||
| + | if (nupuSisend < 50) | ||
| + | if (nupuSisend < 195) return nuppUP; | ||
| + | if (nupuSisend < 380) return nuppDOWN; | ||
| + | if (nupuSisend < 555) return nuppLEFT; | ||
| + | if (nupuSisend < 790) return nuppSELECT; | ||
| + | // Kui ühtegi nuppu pole vajutatud, siis tagastatakse " | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Harjutused ===== | ||
| + | |||
| + | === Harjutus #3.1 === | ||
| + | Muuta näiteprogrammi nii, et mõlemale reale tekkiv tekst oleks võimalikult keskele joondatud. | ||
| + | |||
| + | === Harjutus #3.2 === | ||
| + | Koostada animatsioon LCD ekraanil, kasutades ise genereeritud tähemärke. Tähemärkide massiivide tekitamiseks kasutada generaatorit, | ||
| + | |||
| + | === Harjutus #3.3 === | ||
| + | Muuta näiteprogrammi nii, et nupud " | ||