Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:arduino:sensorss:project1 [2017/04/17 07:57] Somepubet:arduino:sensorss:project1 [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
- 
 ====== Projekt 3 Alfabeetiline LCD  ====== ====== Projekt 3 Alfabeetiline LCD  ======
  
Line 5: Line 4:
  
 ===== Näide #3.1 LCD ekraanile kirjutamine ===== ===== Näide #3.1 LCD ekraanile kirjutamine =====
-Alfabeetiline ekraan on ühevärviline LCD, mida võib ette kujutada kui paljudest väikestest graafilistest ekraanidest koosnevat moodulit. Ühe sellise väikse graafilise ala suurus on 8x5 pikslit, mis on optimaalne kõiksugu tähemärkide kuvamiseks. Need väiksed pikslite kogumid asetsevad üksteise suhtes sümmeetriliselt ridades ja veergudes.\\ +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 "LiquidCrystal" selle töö juba kasutaja eest ära ja ekraanile kirjutamine ei ole keerulisem kui jadaporti teksti kirjutamine. Lisaks LCD-le kirjutamisele tuleb aeg-ajalt muuta ka kursori asukohta, mida saab teha //setCursor(veerg, rida)// käsuga.\\ 
-Tähemärgid on ekraani draiveri mälus juba olemas ja nende kuvamiseks on vaja saata ASCII tabeli järgi vastav number. Lihtsuse mõttes teeb teek "LiquidCrystal" selle töö juba kasutaja eest ära ja ekraanile kirjutamine ei ole keerulisem kui jadaporti teksti kirjutamine. Lisaks LCD-le kirjutamisele tuleb aeg-ajalt muuta ka kursori asukohta, mida saab teha //setCursor(veerg, rida)// käsuga.\\ +Näiteprogramm alustab ekraani seadistamisega. Määrame ära ühendusviigud ja ekraani suuruse, mis on tarvilik ekraani korrektseks funktsioneerimiseks. Järgnevalt trükime ekraanile tervitusteksti, mis jääb püsivalt ülemisele reale alles. Teisele reale liigume käsuga //setCursor// ning kirjutame sinna programmi töötamise aja sekundites. Kuna pärast tähemärkidele kirjutamist liigub kursor automaatselt edasi, siis tuleb pärast igat tsükli läbimist ka kursori positsioon uuesti algusesse liigutada. Kui käesolevale tähemärgile ekraanil on juba midagi trükitud, siis uue tähemärgi samale kohale trükkimisel kustutatakse eelnev tähemärk automaatselt ära.\\
-Näiteprogramm alustab ekraani seadistamisega: määratakse ära ühendusviigud ja ekraani suurus, mis on tarvilik ekraani korrektseks funktsioneerimiseks. Järgnevalt trükime ekraanile tervitusteksti, mis jääb püsivalt ülemisele reale alles. Teisele reale liigume eelnevalt mainitud käsuga ning kirjutame sinna programmi töötamise aja sekundites. Kuna pärast tähemärkidele kirjutamist liigub kursor automaatselt edasi, siis tuleb pärast igat tsükli läbimist ka kursori positsioon uuesti algusesse määrata. Kui käesolevale tähemärgile ekraanil on juba midagi trükitud, siis uue tähemärgi samale kohale trükkimisel kustutatakse eelnev tähemärk automaatselt ära.\\+
 Täpsemalt teegi "LiquidCrystal" toetatud käskudest leiab siit: https://www.arduino.cc/en/Reference/LiquidCrystal Täpsemalt teegi "LiquidCrystal" toetatud käskudest leiab siit: https://www.arduino.cc/en/Reference/LiquidCrystal
 +<pagebreak>
 <code c> <code c>
 /* /*
Line 43: Line 41:
  
 ===== Näide #3.2 Erikujuliste tähemärkide kuvamine LCD ekraanil ===== ===== Näide #3.2 Erikujuliste tähemärkide kuvamine LCD ekraanil =====
-Käesoleva LCD mooduli 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 //createChar()//, on see püsivalt ekraani mälus, kuni see kirjutatakse kasutaja poolt üle uue tähemärgiga.. Tähemärk säilub mälus ka pärast toite lahti ühendamist. Tähemärgi kuvamine toimub käsuga //write(tähemärgi nr)//. Programmis sulgudes olev //uint8_t// on vajalik muutuja tüübi konverteerimiseks ekraanile sobilikuks. Kuna draiveri mälu on piiratud, siis maksimaalselt saab tekitada 8 erikujulist tähemärki.+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 //createChar(id_nr, massiiv)//, on see püsivalt ekraani mälus, kuni see kirjutatakse kasutaja poolt üle uue tähemärgiga. Tähemärk säilib mälus ka pärast toite lahti ühendamist. Tähemärgi kuvamine toimub käsuga //write(tähemärgi_nr)//. Näiteprogrammis sulgudes olev //uint8_t// on vajalik muutuja tüübi konverteerimiseks ekraanile sobilikuks. Kuna draiveri mälu on piiratud, siis maksimaalselt saab tekitada 8 erikujulist tähemärki. 
  
 <code c> <code c>
Line 57: Line 56:
    
 /* Massiiv erikujulise tähemärgi tekitamiseks, /* Massiiv erikujulise tähemärgi tekitamiseks,
-   "0b" numbrite ees ütleb kompilaatorile, et tegemist on kahendsüsteemis arvuga, +   "0b" numbrite ees ütleb kompilaatorile, et tegemist on kahendsüsteemis arvuga. 
-   kahendsüsteemi arvude kasutamisel tekib parem arusaam +   Kahendsüsteemi arvude kasutamisel tekib parem arusaam 
-   kuvatavate pikslite asukohtadest */+   kuvatavate pikslite asukohtadest*/
 byte customChar[8] =  byte customChar[8] = 
 { {
Line 80: Line 79:
   lcd.begin(16, 2);    lcd.begin(16, 2); 
    
-  // Erikujuliste tähemärkide kuvamine ekraanil kohal 0 +  //  Draiveri mälus kohal 0 oleva erikujulise tähemärgi kuvamine ekraanile
   lcd.write((uint8_t)0);    lcd.write((uint8_t)0); 
 } }
Line 86: Line 85:
 { {
   /* Tsüklis ei tehta midagi kogu tegevus   /* Tsüklis ei tehta midagi kogu tegevus
-     on sooritatud juba setup funktsioonis */+     on sooritatud juba //setup// funktsioonis */
 } }
 </code> </code>
  
 ===== Näide #3.3 LCD laiendusplaadi nuppude lugemine ===== ===== Näide #3.3 LCD laiendusplaadi nuppude lugemine =====
-Järgnevas näites võtame kasutusele LCD laindusplaadil olevad nupud. Programmi tööpõhimõtte mõistmiseks on soovitav tutvuda nuppude ühendusskeemiga 5. peatüki sissejuhatuses. Nimelt kasutame nuppude lugemiseks eelnevast peatükist tuttavat //analogRead()// käsku. Iga nupu vajutamisel saame erineva analoogväärtuse, mida kasutame ära, et tuvastada vajutatud nupp. Mitme nupu samaaegsel vajutamisel programm eelistab väiksema väärtusega nuppu.\\ +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 //analogRead// käsku. Iga nupu vajutamisel saame erineva analoogväärtuse, mida kasutame ära, et tuvastada vajutatud nupp. Mitme nupu samaaegsel vajutamisel programm eelistab väiksema väärtusega nuppu.\\ 
-Programm alustab sarnaselt eelnevatele näidetele LCD seadistustega. Loetavuse parendamiseks tekitatame konstandid iga nupu jaoks. Peatsükli (loop) koodi ridade arvu vähendamiseks loome uue funktsiooni nimega //kontrolliNuppe//. Kutsume seda välja võimalikult tihedalt, et ükski nupu vajutus ei jääks mikrokontrolleril märkamata. Kui ühtegi nuppu pole vajutatud, siis tagastab funktsioon alati konstandi //nuppNone//. See tuleneb, sellest, et tavaolekus on analoogsisendi peal //pull-up// takisti ja seetõttu on analoogsisendi väärtus suurem kui 790. Tuvastanud nupu vajutuse kuvab programm saadud analoogsisendi väärtuse ekraanile. Lisaks on programmi lisatud käsk //clear()//, mis on vajalik, et uue väärtuse kuvamisel ei jääks ükski number vanast väärtusest ekraanile näha. Vastasel juhul näiteks väärtuse 783 üle kirjutamisel väärtusega 50 jääks eelmisest väärtusest kolmanda positsiooni number 3 ikka veel ekraanile ja tekitab seetõttu arusaama nagu oleks tegelik väärtus 503.+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 //kontrolliNuppe//. Kutsume seda välja võimalikult tihedalt, et ükski nupu vajutus ei jääks mikrokontrolleril märkamata. Kui ühtegi nuppu pole vajutatud, siis tagastab funktsioon alati konstandi "nuppNone". See tuleneb, sellest, et tavaolekus on analoogsisendi peal //pull-up// takisti ja seetõttu on analoogsisendi väärtus suurem kui 790. Tuvastanud nupu vajutusekuvab programm saadud analoogsisendi väärtuse ekraanile. Lisaks on programmi lisatud käsk //clear//, mis on vajalik, et uue väärtuse kuvamisel ei jääks ükski number vanast väärtusest ekraanile näha. Vastasel juhul näiteks väärtuse 783 üle kirjutamisel väärtusega 50 jääks eelmisest väärtusest kolmanda positsiooni number 3 ikka veel ekraanile ja tekitab seetõttu arusaama nagu oleks tegelik väärtus 503.
  
 +<pagebreak>
 <code c> <code c>
 /* /*
Line 116: Line 116:
 // Vajutatud nupu muutuja konstandi salvestamine // Vajutatud nupu muutuja konstandi salvestamine
 int vajutatudNupp; int vajutatudNupp;
-// Aanaloog sisendi muutuja väärtuse salvestamine+// Aanaloogsisendi muutuja väärtuse salvestamine
 int nupuSisend;  int nupuSisend; 
    
Line 127: Line 127:
   lcd.print("ADC: ");   lcd.print("ADC: ");
      
-  // Ekraani analoog sisendi A0 väärtuse kuvamine+  // Ekraani analoogsisendi A0 väärtuse kuvamine
   lcd.print(analogRead(A0));    lcd.print(analogRead(A0)); 
 } }
 void loop()  void loop() 
 { {
-  /* Kutsub välja funktsiooni "kontrolliNuppue()" +  /* Kutsub välja funktsiooni kontrolliNuppe 
    ja salvestab tagastatud väärtuse muutujasse */    ja salvestab tagastatud väärtuse muutujasse */
   vajutatudNupp = kontrolliNuppe();    vajutatudNupp = kontrolliNuppe(); 
Line 148: Line 148:
   }   }
 } }
- +</code> 
-// Funktsioon võtab analoog sisendi väärtuse ja võrdleb olemasolevate väärtustega.+<pagebreak> 
 +<code c> 
 +// Funktsioon võtab analoogsisendi väärtuse ja võrdleb olemasolevate väärtustega.
 // Tagastab arvu vahemikus 0 kuni 5 vastavalt defineeritud konstandile // Tagastab arvu vahemikus 0 kuni 5 vastavalt defineeritud konstandile
 int kontrolliNuppe() int kontrolliNuppe()
 { {
- // Salvestab muutujasse analoog väärtuse viigult A0     + // Salvestab muutujasse analoogväärtuse viigult A0 
- nupuSisend = analogRead(A0); + nupuSisend = analogRead(A0);
  if (nupuSisend < 50)   return nuppRIGHT;  if (nupuSisend < 50)   return nuppRIGHT;
  if (nupuSisend < 195)  return nuppUP;  if (nupuSisend < 195)  return nuppUP;
  if (nupuSisend < 380)  return nuppDOWN;  if (nupuSisend < 380)  return nuppDOWN;
  if (nupuSisend < 555)  return nuppLEFT;  if (nupuSisend < 555)  return nuppLEFT;
- if (nupuSisend < 790)  return nuppSELECT;  + if (nupuSisend < 790)  return nuppSELECT; 
- + // Kui ühtegi nuppu pole vajutatud, siis tagastatakse "nuppNONE
- return nuppNONE;  // Kui ühtegi nuppu pole vajutatud, siis tagastatakse nuppNONE+ return nuppNONE;
 } }
 </code> </code>
 +
 +
 ===== Harjutused ===== ===== Harjutused =====
  
et/arduino/sensorss/project1.1492415826.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0