Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet Ehtolauseet Esimerkki ehtolauseista Silmukkarakenteet Silmukkarakenteet Esimerkki silmukkarakenteista Yhteenveto Esimerkki
Arduino-sovelluksen rakenne Funktio on ohjelman osa, joka suoritetaan vain kutsuttaessa. Toiminta voidaan määritellä parametreilla. Funktio voi palauttaa palautusarvon Arduino-sovellus koostuu kahdesta funktiosta: void setup() ja void loop() setup on tarkoitettu mikrokontrollerin ja sen sisältämän ohjelman alustukseen. Alustuksessa voidaan määritellä esimerkiksi pinnien I/O tai alustaa globaaleja muuttujia loop on ohjelman pääsilmukka, jota suoritetaan loputtomasti
Syntaksi ja käytännöt Käskyt lopetetaan puolipisteeseen; Aaltosulkeiden sisältö sisennetään Puolipistettä ei tule joka rivin loppuun suorita_funktio(); // Kommentti /* Myös kommentti */ "Merkkijono" vs a (merkki)
Esimerkki ohjelman rakenteesta #d e f i n e LED_PIN 13 v o i d s e t u p ( ) pinmode ( LED_PIN, OUTPUT) ; v o i d l o o p ( ) d i g i t a l W r i t e (LED_PIN, HIGH ) ; d e l a y ( 1 0 0 ) ; d i g i t a l W r i t e (LED_PIN, LOW) ; d e l a y ( 9 0 0 ) ;
Muuttujat ja tietotyypit Muuttuja on mikrokontrollerin sisällä sijaitseva muistialue, jolla on tietty arvo ja jota voidaan käsitellä C99 standardi määrittelee valmiiksi useita tietotyyppejä: char, int, float... Tietotyyppejä voi määritellä myös itse!
Tietotyypit (käytetyimmät) boolean voi saada arvon true tai false char yhden tavun kokoinen, ja käytetään usein yhen merkin tallentamiseen int kahden tavun kokoinen (16 bittiä), kun käytössä ATmega pohjainen piiri. Tarkoitettu kokonaisluvun (integer) säilytykseen
float 32 bittiä tietotyyppi liukuluvuille (floating-point number) double 64 bittinen tietotyyppi liukuluvuille (double precision floating-point number) String merkkijonoille tarkoitettu abstrakti tietotyyppi, joka mahdollistaa esimerkiksi kahden merkkijonon vertailun
Esimerkkejä tietotyypeistä char c = a ; // c h a r a c t e r, k i r j a i n char d = 2 5 5 ; char e = 0 x f f ; // h e k s a d e s i m a a l i a r v o i n t i = 1 2 3 ; // i n t e g e r, k o k o n a i s l u k u f l o a t f = 1 2. 3 ; // f l o a t i n g p o i n t, l i k u l u k u
Esimerkkejä tietotyypeistä, jatkuu S t r i n g a = " y k s i " ; S t r i n g b ; b = " k a k s i " ; S e r i a l. p r i n t l n ( a + b ) ; Kysymys: mitä yllä oleva koodi tulostaa? http://arduino.cc/en/reference/stringobject
Ehtolauseet Ehtolauseilla toteutetaan ohjelman logiikka tai älykkyys Eri rakenteita (tässä käydään läpi vain ensiksi mainittu): if else ja switch case Ehtolauseissa käytetään hyväksi vertailuoperaattoreita == (yhtäsuuri), <, >, <=, >= ja!= (erisuuri) Usein ehtoja yhdistellään logiikkaoperaattoreilla (tai) ja && (ja) Yleinen virhe on käyttää = sijoitusoperaattoria == sijasta. Älä tee tätä virhettä, useasti
b o o l a = t r u e, b = f a l s e ; i f ( a == b ) // e i t o t e u d u Esimerkki ehtolauseista e l s e i f ( b!= b ) // e i t o t e u d u e l s e // ehto e i t o t e u t u n u t, // s u o r i t e t a a n i f ( a!= b ) // t o t e u t u u i f ( a!= b && a == a ) // t o t e u t u u i f ( a == t r u e a ==! b ) // t o t e u t u u...
Silmukkarakenteet Silmukalla vältetään toistoa Käytetään, kun on tarve tehdä sama tai samankaltainen operaatio useasti Syntaksi: while(ehto) suorita() Muita rakenteita: for(alustus; ehto; inkrementointi)... ja do... while(ehto);
Esimerkki silmukkarakenteista i n t x = 1 0 ; // While l o o p w h i l e ( x > 0) S e r i a l. p r i n t l n ( x ) ; x ; // Sama f o r l o o p i l l a f o r ( i n t y = 1 0 ; y > 0 ; y = y 1) S e r i a l. p r i n t l n ( y ) ;
Kaikki asiat yhdessä v o i d r e a d L i n e ( ) ; // F u n k t i o n j u l i s t u s v o i d s e t u p ( ) S e r i a l. b e g i n ( 9 6 0 0 ) ; // A l o i t a s a r j a l i i k e n n e S e r i a l. p r i n t l n ( " Setup done " ) ; v o i d l o o p ( ) r e a d L i n e ( ) ; // Lue u u s i r i v i d e l a y ( 3 0 0 ) ;
v o i d r e a d L i n e ( ) // Luodaan u u s i a b s t r a k t i t i e t o t y y p p i s t r S t r i n g s t r = "You wrote : " ; char incoming = 0 x00 ; S e r i a l. p r i n t l n ( " Reading l i n e... " ) ; w h i l e ( incoming!= \n // Newline && incoming!= \ r // C a r r i a g e Return && s t r. l e n g t h ( ) <= 50) w h i l e ( S e r i a l. a v a i l a b l e ( ) <= 0) d e l a y ( 5 0 ) ; incoming = S e r i a l. r e a d ( ) ; s t r += incoming ; S e r i a l. p r i n t l n ( s t r ) ;