Differences

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

Link to this comparison view

et:arduino:programming [2017/05/11 07:39] Somepubet:arduino:programming [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Programmeerimine ====== ====== Programmeerimine ======
 ===== Programmi struktuur ===== ===== Programmi struktuur =====
Line 48: Line 48:
 === Andmetüübid === === Andmetüübid ===
  
-Arduino programmikeele baasandmetüübid (enamus neist on täisarvud, kaks viimast on ujukomaarvud):+Arduino programmeerimiskeele baasandmetüübid (enamus neist on täisarvud, kaks viimast on ujukomaarvud):
  
 ^ Tüüp             ^ Miinimum    ^ Maksimum   ^ Bitte ^  ^ Tüüp             ^ Miinimum    ^ Maksimum   ^ Bitte ^ 
Line 63: Line 63:
  
 Sulgudes olevat sõna //signed// ei pea kasutama, kuna vaikimisi on andmetüübid bipolaarsed. Arduino programmeerimiskeeles on teksti hoidmiseks //String// objekt, mis lubab teha erinevaid tekstitöötluse toiminguid: teksti lisamine ja eemaldamine, võrdlus ning toimingud tähemärkide kaupa.\\ Sulgudes olevat sõna //signed// ei pea kasutama, kuna vaikimisi on andmetüübid bipolaarsed. Arduino programmeerimiskeeles on teksti hoidmiseks //String// objekt, mis lubab teha erinevaid tekstitöötluse toiminguid: teksti lisamine ja eemaldamine, võrdlus ning toimingud tähemärkide kaupa.\\
 +\\
 Konstante saab tekitada kahel viisil: Konstante saab tekitada kahel viisil:
   * makro #define kaudu   * makro #define kaudu
Line 125: Line 126:
  
 === Loogilised tehted === === Loogilised tehted ===
-Loogilised tehted on eitus (**!**), loogiline korrutamine (**&&**) ja loogiline liitmine (**||**). Kui kasutada koos erinevaid loogikatehteid siis täidetakse esmalt eitus ja seejärel vasakult paremale järjekorras loogiline liitmine ja korrutamine. Samuti võib kindla tehte eelistamiseks kasutada sulge.+Loogilised tehted on eitus (!), loogiline korrutamine (&&) ja loogiline liitmine (||). Kui kasutada koos erinevaid loogikatehteid siis täidetakse esmalt eitus ja seejärel vasakult paremale järjekorras loogiline liitmine ja korrutamine. Samuti võib kindla tehte eelistamiseks kasutada sulge.
  
 [{{  :et:arduino:logic_all_3.png?550  |Eitus, loogiline korrutamine ja loogiline liitmine}}] [{{  :et:arduino:logic_all_3.png?550  |Eitus, loogiline korrutamine ja loogiline liitmine}}]
Line 162: Line 163:
 === Võrdlused === === Võrdlused ===
 Arvude väärtuste võrdlemisel saadakse loogilised väärtused. Võrdlustehted on samaväärsus (==), erinevus (!=), suurem (>), suurem-võrdne (> =), väiksem (<) ja väiksem-võrdne (< =).  Arvude väärtuste võrdlemisel saadakse loogilised väärtused. Võrdlustehted on samaväärsus (==), erinevus (!=), suurem (>), suurem-võrdne (> =), väiksem (<) ja väiksem-võrdne (< =). 
-~~PB~~+<pagebreak>
 **Näited võrdluste kasutamisest:** **Näited võrdluste kasutamisest:**
 <code c> <code c>
Line 213: Line 214:
  
 === Tsüklid === === Tsüklid ===
-Tsüklid võimaldavad ühte tegevust või programmi lõiku täita mitu korda järjest. Peamised tsüklite tüübid on //for// ja //while//.+Tsüklid võimaldavad ühte tegevust või programmilõiku täita mitu korda järjest. Peamised tsüklite tüübid on //for// ja //while//.
  
   * **for**(muutuja algväärtustamine; võrdlus; tehe)\\   * **for**(muutuja algväärtustamine; võrdlus; tehe)\\
Line 245: Line 246:
 </code> </code>
  
-**Tsüklis liikumine**+**Tsüklis liikumine**\\
 Tsüklites on võimalik käimasoleva tsükli mõjutamiseks kasutada käske //break// ja //continue//. \\ Tsüklites on võimalik käimasoleva tsükli mõjutamiseks kasutada käske //break// ja //continue//. \\
  
 <code c> <code c>
 /* Tsüklis suurendatakse muutujat loendur. /* Tsüklis suurendatakse muutujat loendur.
-   Osadel juhtudel kasutatakse käsku //continue//,+   Osadel juhtudel kasutatakse käsku continue,
    mis sunnib programmi alustama uue tsükliga.    mis sunnib programmi alustama uue tsükliga.
    Seega loenduri suurendamine jääb kolmel juhul vahele. */    Seega loenduri suurendamine jääb kolmel juhul vahele. */
Line 302: Line 303:
 ===== Viikude juhtimise funktsioonid ===== ===== Viikude juhtimise funktsioonid =====
  
-Arduino programmeerimiseks on juba defineeritud hulk erinevaid funktsioone. Need ei ole standard C keele käsud vaid spetsiaalselt Arduino riistvara jaoks loodud funktsioonid. Kõige olulisemad ja vältimatult enamus programmide jaoks vajalikud on viikude juhtimise funktsioonid. Enne viikude kasutamist tuleb määrata nende töörežiim. Esmalt on vaja määrata, kas viik hakkab tööle sisendina või väljundina. Kui viik peaks töötama sisendina on vaja otsustada, kas aktiveerida sisemine //pull-up// takisti.+Arduino programmeerimiseks on juba defineeritud hulk erinevaid funktsioone. Need ei ole standard C keele käsud vaid spetsiaalselt Arduino riistvara jaoks loodud funktsioonid. Kõige olulisemad ja vältimatult mikrokontrollerite programmide jaoks vajalikud on viikude juhtimise funktsioonid. Enne viikude kasutamist tuleb määrata nende töörežiim. Esmalt on vaja määrata, kas viik hakkab tööle sisendina või väljundina. Kui viik peaks töötama sisendina on vaja otsustada, kas aktiveerida sisemine //pull-up// takisti.
  
 **Viigu seadistamine:** **Viigu seadistamine:**
Line 313: Line 314:
 **Viigu oleku lugemine:** **Viigu oleku lugemine:**
   * digitalRead(viigu_nr) - viigu oleku lugemine digitaalsel kujul ehk 0 või 1.   * digitalRead(viigu_nr) - viigu oleku lugemine digitaalsel kujul ehk 0 või 1.
-  * analogRead(viigu_nr) - viigu oleku lugemine analoog väärtusena ehk 0 - 1023. Funktsioon töötab ainult analoogviikudel, mis on tähistatud tähega A.+  * analogRead(viigu_nr) - viigu oleku lugemine analoogväärtusena ehk 0 - 1023. Funktsioon töötab ainult analoogviikudel, mis on tähistatud tähega A.
  
  
Line 342: Line 343:
   pinMode(andurAN, INPUT);   pinMode(andurAN, INPUT);
 } }
- 
 void loop(){ void loop(){
   if(analogRead(andurAN) > 500){   if(analogRead(andurAN) > 500){
-    // Kui anduri analoog väärtus on suurem kui 500, siis täidetakse programmi osa+    // Kui anduri analoogsisendi väärtus on suurem kui 500,  
 +    // siis täidetakse see programmi osa
   }   }
 } }
Line 358: Line 359:
 } }
 void loop(){ void loop(){
-  digitalWrite(led, HIGH); // led viigu kõrgeks seadistamine+  digitalWrite(led, HIGH); // LED-i viigu kõrgeks seadistamine
 } }
 </code> </code>
  
 <code c> <code c>
-// Analoog väljundi (PWM signaali) seadistamine ja oleku muutmine+// Analoogväljundi (PWM signaali) seadistamine ja oleku muutmine
 const int led = 11; const int led = 11;
  
Line 370: Line 371:
 } }
 void loop(){ void loop(){
-  analogWrite(led, 180); // led-i heleduse seadmine vahemikus 0-255+  analogWrite(led, 180); // LED-i heleduse seadmine vahemikus 0-255
 } }
 </code> </code>
  
-===== Ajastus funktsioonid =====+===== Ajastusfunktsioonid =====
 Programmi töös on tihti vaja teostada kindla ajastusega tegevusi. Selleks on Arduino-l olemas neli funktsiooni, millest esimesed 2 on viited ja ülejäänud 2 loendurid. Loenduritel on maksimaalne arv, mille saavutamisel ehk ületäitumisel (inglise keeles //overflow//) alustatakse lugemist taas 0-st. Programmi töös on tihti vaja teostada kindla ajastusega tegevusi. Selleks on Arduino-l olemas neli funktsiooni, millest esimesed 2 on viited ja ülejäänud 2 loendurid. Loenduritel on maksimaalne arv, mille saavutamisel ehk ületäitumisel (inglise keeles //overflow//) alustatakse lugemist taas 0-st.
  
Line 383: Line 384:
  
 void loop() { void loop() {
-// Loenduri tekitamine, mis loendab sekundeid 
   delay(1000); // Programm on 1000 millisekundit ehk 1 sekund siin kinni   delay(1000); // Programm on 1000 millisekundit ehk 1 sekund siin kinni
-  stopper++; // Muutujale ühe kordne liitmine+  stopper++; // Muutujale ühe liitmine
 } }
 </code> </code>
Line 395: Line 395:
 void loop() { void loop() {
   delayMicroseconds(1000); // Programm on 1000 mikrosekundit ehk 1 ms siin kinni   delayMicroseconds(1000); // Programm on 1000 mikrosekundit ehk 1 ms siin kinni
-  stopper++; // Muutujale ühe kordne liitmine+  stopper++; // Muutujale ühe liitmine
 }   }  
 </code> </code>
Line 406: Line 406:
  
 void loop() { void loop() {
-// Pidev võrdlemine mikrosekundite hetke arvu eelneva mikrosekundite arvuga+// Pidev millisekundite arvu võrdlemine eelneva millisekundite arvuga
 // Kui kahe arvu vahe on suurem kui 1000,siis suurendame muutujat stopper ühe võrra // Kui kahe arvu vahe on suurem kui 1000,siis suurendame muutujat stopper ühe võrra
   if((long)(millis() - aeg) > 1000){   if((long)(millis() - aeg) > 1000){
-    stopper++; // Muutujale ühe kordne liitmine +    stopper++; // Muutujale ühe liitmine 
-    aeg = millis(); // Millisekundite hetke arvu salvestamine+    aeg = millis(); // Millisekundite arvu salvestamine muutujasse
   }   }
 // Programm saab muul ajal vabalt joosta // Programm saab muul ajal vabalt joosta
Line 423: Line 423:
  
 void loop() { void loop() {
-// Pidev võrdlemine mikrosekundite hetke arvu eelneva mikrosekundite arvuga +// Pidev mikrosekundite arvu võrdlemine eelneva mikrosekundite arvuga 
-// Kui kahe arvu vahe on suurem kui 1000, siis suurendame muutujat stopper ühe võrra+// Kui kahe arvu vahe on suurem kui 1000, siis suurendame muutujat stopper võrra
   if((long)(micros() - aeg) > 1000){   if((long)(micros() - aeg) > 1000){
     stopper++; // Liidame muutujale ühe     stopper++; // Liidame muutujale ühe
-    aeg = micros(); // Millisekundite hetke arvu salvestamine+    aeg = micros(); // Millisekundite arvu salvestamine muutujasse
   }   }
 // Programm saab muul ajal vabalt joosta // Programm saab muul ajal vabalt joosta
Line 434: Line 434:
  
 ===== Teegid ===== ===== Teegid =====
-Kontrolleri programmeerimise lihtsustamiseks on riistvara tootjad ja/või vabatahtlikud loonud tarkvarateegid erinevate seadmete kasutamiseks. Tarkvarateegid on funktsioonide kogumid, mis on loodud riistvara lihtsamaks kasutamiseks ja haldamiseks. See võimaldab kasutada valmis funktsioone ja sisuliselt ühe käsureaga teha operatsioone, mis riistvara tasemel võivad nõuda lehekülgedepikkust koodi. Need funktsioonid on tavaliselt koondatud kas seadme või seadmete grupi järgi teekidesse.+Kontrolleri programmeerimise lihtsustamiseks on riistvara tootjad ja/või vabatahtlikud loonud tarkvarateegid erinevate seadmete kasutamise. Tarkvarateegid on funktsioonide kogumid, mis on loodud riistvara lihtsamaks kasutamiseks ja haldamiseks. Nii on võimalik sisuliselt ühe käsureaga teha operatsioone, mis riistvara tasemel võivad nõuda lehekülgedepikkust koodi. Üldiselt on teegid ka paindlikud, mis tähendab, et üks teek võib toetada tervet tooteseeriat.
  
 **Mõned Arduino IDE-s vaikimisi olevad teegid:** **Mõned Arduino IDE-s vaikimisi olevad teegid:**
     * Wire - I2C andmeliides     * Wire - I2C andmeliides
     * EEPROM - püsimälu kasutamine     * EEPROM - püsimälu kasutamine
-    * Servo - hobi servo juhtimine+    * Servo - hobi servomootori juhtimine
     * GSM - mobiilivõrgu kaudu kommunikatsioon     * GSM - mobiilivõrgu kaudu kommunikatsioon
-    * SPI - Sünkroonne jadaliides+    * SPI - sünkroonne jadaliides
     * Ethernet - kaabliga võrgu kaudu kommunikatsioon     * Ethernet - kaabliga võrgu kaudu kommunikatsioon
     * Wifi - juhtmevaba võrgu kaudu kommunikatsioon     * Wifi - juhtmevaba võrgu kaudu kommunikatsioon
     * Liquid Crystal - tähemärgiliste LCD ekraanide juhtimine     * Liquid Crystal - tähemärgiliste LCD ekraanide juhtimine
-~~PB~~+ 
 +\\ 
 +Teeke võib ka ise koostada ja seda on mõttekas teha, kui on mingid funktsioonid, mida on soov läbi projektide korduvkasutada või on loodud mõni spetsiifiline riistvara, mille lihtsamaks kasutamiseks on mõistlik oma teek teha.  
 + 
 +Uue teegi loomiseks võib alustada tavalisest Arduino programmist, kus on loodud soovitud funktsioonid. Teegiks vormistamise jaoks on vaja koostada vähemalt kaks faili: päisfail (.h laiendiga) ja koodi fail (.cpp laiendiga). Päisfailis on teegi definitsioonid, sisuliselt info, mis kirjeldab teegi koodis olevaid funktsioone ja koodifail, mis sisaldab reaalset funktsiooni sisu ja tegevusi. Päisfailis koondatakse funktsioonide kirjeldused koos parameetritega klassidesse. Funktsioonid võivad olla kas //Public// või //Private// tüüpi. //Public// tüüpi funktsioonid on mõeldud teegi kasutajale, //Private// tüüpi klassi saab kasutada aga ainult klassi siseselt. Iga klass sisaldab spetsiaalset //construct// tüüpi funktsiooni, mis loob klassi eksemplari. //Construct// tüüpi funktsioon on sama nimega, mis klass ise. 
 + 
 +Teegi loomise täpsema juhendi leiab siit:\\ 
 +https://www.arduino.cc/en/Hacking/LibraryTutorial 
 + 
 +Teegi loomise stiilinäite ja soovitused leiab siit:\\ 
 +https://www.arduino.cc/en/Reference/APIStyleGuide 
 + 
 + 
 +<pagebreak>
 === Välise teegi lisamine Arduino arenduskeskkonda === === Välise teegi lisamine Arduino arenduskeskkonda ===
  
et/arduino/programming.1494488379.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