Arduinon ohjelmointi. Sami-Petteri Pukkila. 6. helmikuuta 2017

Samankaltaiset tiedostot
Arduinon ohjelmointi. Sami-Petteri Pukkila. 26. syyskuuta 2016

Arduinon ohjelmointi. Sami-Petteri Pukkila. 1. helmikuuta 2016

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Ohjelmointiharjoituksia Arduino-ympäristössä

LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström

1 Tarkistetaan että kaikki toimii

Arduino. Kimmo Silvonen (X)

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä. #include <EEPROM.h> #include <SoftwareSerial.h>

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

Arduino. Kimmo Silvonen (X)

Arduino. Kimmo Silvonen (X)

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ #include <EEPROM.h> #include <SoftwareSerial.h> SoftwareSerial gps(10, 0); // RX, TX -pinnit

Tarkempaa tietoa saat myös kurssin GitHub-alustalta. Sen wiki-osio on kattava ja yksityiskohtainen, kun tämä vihkonen taas on vain ensihätään.

Harjoitustyö: virtuaalikone

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Java-kielen perusteet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoi Arduino Grovella

ITKP102 Ohjelmointi 1 (6 op)

Arduino ja perusteita

Python-ohjelmointi Harjoitus 2

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

Tietotyypit ja operaattorit

Ohjelmoinnin perusteet Y Python

Arduino tutuksi. Kyösti Blinnikka

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Luento 5. Timo Savola. 28. huhtikuuta 2006

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

Ohjelmoinnin peruskurssi Y1

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmointi 1 Taulukot ja merkkijonot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

S Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010

WT11i-A -breakoutin Arduino-pikaopas

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

12. Javan toistorakenteet 12.1

Sisältö. 2. Taulukot. Yleistä. Yleistä

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

MITTAUSTEKNIIKAN LABORATORIOTYÖOHJE TYÖ 9 MITTAUSTIEDON KERUU JA KÄSITTELY

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Harjoitus 2 (viikko 45)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

ITKP102 Ohjelmointi 1 (6 op)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Verilogvs. VHDL. Janne Koljonen University of Vaasa

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op)

Tutoriaaliläsnäoloista

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Metodien tekeminen Javalla

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Taulukot. Jukka Harju, Jukka Juslin

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

12. Javan toistorakenteet 12.1

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

Zeon PDF Driver Trial

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

1. Omat operaatiot 1.1

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Anturityö, Tomi Pulli

Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka

17. Javan omat luokat 17.1

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

811120P Diskreetit rakenteet

Transkriptio:

Sami-Petteri Pukkila sami-petteri.pukkila@aalto.fi

Mistä kaikki lähtee liikkeelle? Ennen kuin alat ohjelmoimaan, mieti mitä projektissa kannattaa tehdä. Jaa projekti pieniin osaprojekteihin ja kehitä näille ratkaisu jonka voi myöhemmin yhdistää kokonaisuuteen. 2

Esimerkki esteitä väistelevä auto Miten auto liikkuu? Miten tunnistan esteen? Mitä teen kun tunnistan esteen? 3

Esimerkki esteitä väistelevä auto Miten auto liikkuu? Tarvitaan kai moottoreita. Miten niitä ohjataan? Miten tunnistan esteen? Jonkinlainen etäisyysanturi. Miten niitä luetaan? Mitä teen kun tunnistan esteen? Varmaankin käännyn kunnes este häviää näkökentästä? 4

Esimerkki esteitä väistelevä auto Miten auto liikkuu? Tarvitaan kai moottoreita. Miten niitä ohjataan? Voisin kokeilla ajaa moottoreita moottorinohjaimella. Voisin tehdä funktion jolle kerrotaan mitä moottoria pitäisi pyörittää millä nopeudella ja mihin suuntaan Miten tunnistan esteen? Jonkinlainen etäisyysanturi. Miten niitä luetaan? Löysin ultraäänianturin joka kertoo etäisyyden seuraavaan esteeseen. Voisin tehdä funktion joka palauttaa etäisyyden seuraavaan esteeseen. Mitä teen kun tunnistan esteen? Voinkin kätevästi yhdistää kaksi jo tehtyä funktiota Tarvitsenkohan etäohjauksen... 5

Koodin laatu Joissain osaongelmissa vierähtää pidempi aika, joissakin lyhyempi Olisi kuitenkin kiva jos muutama viikko sitten tehty koodi ei olisi täyttä mysteeriä Kirjoita mielummin yksinkertaista ja "typerää"koodia kuin kikkailuja sisältävää "fiksua"koodia 6

Kommentit Koodin sisälle voi kirjoittaa kommenttirivejä Kommentti voi olla esimerkiksi selostus, mitä funktio tekee, mitä se palauttaa ja mitä se ottaa sisään Jos luulet unohtavasti miksi olet tehnyt jonkin asian kuten olet, kannattaa siitä kirjoittaa kommentti Arduinossa kommenttirivi aloitetaan kahdella kauttaviivalla (// kommentti) 7

Sisennys Sisennetty koodi on helppolukuista sillä lohkot erottuvat visuaalisesti toisistaan Koodia saa sisennettyä painamalla tab-nappulaa kursorin ollessa rivin alussa void loop () { String nimi ; if ( tila == tila1 ) nimi = kysy_ nimi (); if ( tila == tila2 ) sano_moi ( nimi ); } void loop () { String nimi ; } if ( tila == tila1 ) nimi = kysy_ nimi (); if ( tila == tila2 ) sano_moi ( nimi ); 8

Arduinon kieli https://www.arduino.cc/en/reference/homepage Arduinon kieli on käytännössä C/C++:aa Kaikki muistakin ohjelmointikielistä tutut rakenteet löytyvät Muuttujat, funktiot silmukat, laskutoimitukset, ehtolauseet Kieli on laiteläheinen ja käännetään ennen lähettämistä binääriksi. Osa asioista vaikuttaa kankeammilta kuin esim. Pythonissa 9

Mistä löytyy tietoa? Arduinon referenssi: https://www.arduino.cc/en/reference/homepage Arduinon esimerkit: https://www.arduino.cc/en/tutorial/builtinexamples Google: "How to do x in arduino" "How x works in arduino" "How to do x in c" 10

Muuttujat https://www.arduino.cc/en/tutorial/variables }{{} int lampotila }{{} tyyppi nimi = 5 }{{} arvo ; Muuttujalla on oltava tyyppi (kokonaisluku, kirjan...) Eroaa esimerkiksi Pythonista jossa näin ei ole! Määrää mitä muuttuja voi pitää sisällään, mitä ei. 11

Funktiot int funktionimi(int parametri1, int parametri2) { return paluuarvo; } Funktio ottaa sisäänsä parametreja, tekee niillä jotakin ja antaa jonkinlaisen paluuarvon. Paluutyyppi Muuttujan palauttaman arvon tyyppi. Funktionimi Pitää alkaa kirjaimella. Parametri Parametrit joita funktio ottaa vastaan. Voi olla useampia ja jokaisella pitää olla tyyppi. Pilkulla voi erottaa useampia parametreja. 12

Taulukot Hyvä väline esimerkiksi useamman ledin nastanumeroiden säilömiseen. int led_ pin [3] = {3, 5, 6}; // l e d _ p i n [ 0 ] on n y t 3 // l e d _ p i n [ 1 ] v a s t a a v a s t i 5 Taulukon jäseniä kutsutaan alkioksi. Alkioon pääsee käsiksi syntaksilla nimi[alkio] Indeksointi alkaa nollasta led_ pin [1] = 2; // l e d _ p i n v a s t a a n y t määritelmää {3, 2, 6} 13

Teksti https://www.arduino.cc/en/reference/string C-kielessä ei ole erillistä muuttujatyyppiä tekstille, vain merkeille (char) Merkkijonot esitetään char-taulukkona char materiaali [] = " puu "; // { p, u, u, \0 } Merkkijonon lopussa ns. nollatavu Työkalut pystyvät päättelemään mihin merkkijono loppuu. Kolmen merkin merkkijonon tallentamiseen tarvitaan siis neljä merkkiä! 14

String-objekti https://www.arduino.cc/en/reference/stringobject C-kielessä tekstinkäsittely on hieman kankeaa Arduinossa on olemassa String-objekti joka tekee tästä hieman helpompaa Käyttäkää sitä jos C ei ole tuttu 15

Muuttujien näkyvyys int a = 1; void setup () { int b = a + 2; // T o i m i i } void loop () { a = b + 2; // Ei toimi, b näkyy // vain setup-funktiossa } 16

Globaali vs lokaali muuttuja Globaali (esimerkissä a) Voidaan käyttää kaikkialla ohjelmassa Hyviä kun samaa muuttujaa käytetään kaikkialla ohjelmassa. Esim. Arduinoon kytketyn ledin pinninumero Vältä mikäli mahdollista. Hankala tutkia mitkä kaikki ohjelman osat vaikuttavat muuttujaan. Lokaali (esimerkissä b) Voi käyttää vain niiden aaltosulkeiden välissä jossa määritetty Laitteen tarvitsee säilöä tieto ainoastaan pienessä osassa ohjelmaa tehokkaampaa Vaikeampi tehdä mokia 17

Arduino 18

Arduino-ohjelman rakenne int ledpin = 13; void setup() { pinmode ( ledpin, OUTPUT ); } void loop() { digitalwrite ( ledpin, HIGH ); delay (1000) ; digitalwrite ( ledpin, LOW ); delay (1000) ; } 19

Arduino-ohjelman rakenne setup-funktio Ajetaan kerran kun Arduinoon kytketään virrat loop-funktio Setup-funktion jälkeen ajetaan uudelleen ja uudelleen kunnes Arduinosta katkaistaan virrat 20

digitalwrite https://www.arduino.cc/en/tutorial/digitalpins Asettaa pinnin arvon LOW tai HIGH. LOW, "pois päältä" HIGH, "päällä" Esimerkiksi ledin vilkutus void setup () { pinmode (13, OUTPUT); } void loop () { digitalwrite (13, HIGH ); // LED päällä delay (1000) ; //Odota sekunti digitalwrite (13, LOW ); // LED pois päältä delay (1000) ; //Odota sekunti } 21

digitalread Lukee pinnin tilan LOW, pinni kytketty maahan (GND) HIGH, pinni kytketty jännitteeseen. (3-5 volttia) void setup () { pinmode (3, INPUT); } void loop () { int arvo = digitalread (3) ; } 22

Ylös-/Alasvetovastukset https://learn.sparkfun.com/tutorials/pull-up-resistors Mikäli pinniä ei ole kytketty mihinkään, sanotaan että se kelluu digitalread palauttaa satunnaisesti HIGH tai LOW Ratkaisuna alasvetovastus Kytketään pinni vastuksella (n. 10KΩ) GND:hen Pinnin arvo on nyt LOW kunnes se kytketään myös +5V:iin Ylösvetovastus lähes sama asia: Kytketään pinni vastuksella (n. 10KΩ) +5V:iin Pinnin arvo on nyt HIGH kunnes se kytketään myös GND:iin 23

INPUT_PULLUP Arduinosta löytyy sisäänrakennettuna ylösvetovastus Aktivoidaan määrittämällä pinnin modeksi INPUT_PULLUP Yksinkertainen nappula voidaan nyt kytkeä suoraan GND:in ja halutun pinnin välille. Mitään ylimääräistä vastusta ei tarvita kytkennässä! void setup () { pinmode (3, INPUT_PULLUP ); } void loop () { int nappula = digitalread (3) ; } 24

analogread analogreadilla voidaan lukea pinnin jännite Onnistuu vain pinneistä jotka on nimetty A0, A1... Kyseisten pinnien takana on 10-bittinen analogidigitaalimuuntaja (AD) Arvo 0-5V väliltä saadaan lukuna väliltä 0-1023. (2,5V siis vastaisi lukua 512) Kyseisiä pinnejä voi käyttää myös digitaaliseen I/O:hon void setup () { pinmode (A1, INPUT); } void loop () { int arvo = analogread ( A1); } 25

analogwrite Arduinossa ei ole DA-muunninta analoginen ulostulo pitää tehdä "keinotekoisesti" PWM, eli Arduino kytkee pinniä nopeasti 0V ja 5V välillä. (kanttiaalto) "Teho"määräytyy kauanko pinniä pidetään HIGH- ja kauanko LOW-tilassa Esimerkiksi LEDien himmentämisessä ja normaalien moottorien tehon säädössä riittävä Joissain uusissa Arduinoissa tosin on DA-muunnin. Vain tildellä ( ) merkittyjä pinnejä voi käyttää void setup () { pinmode (3, OUTPUT ); } void loop () { // Ledi palaa "puolella teholla" analogwrite (3, 127) ; } 26

Jos ohjelma ei käänny 27

Jos ohjelma ei käänny Arduino yleensä kertoo aika hyvän vihjeen mikä ongelma koodissa on Jos vihje vaikuttaa mystiseltä, copy&pastea se Googleen. Yleensä joku muu on tehnyt saman virheen aikaisemmin. 28

Kun ohjelma ei toimi kuten oletin Monesti auttaa kun ohjelman logiikkaa lukee mielessään "Kerro lämpötila käyttäjälle, tämän jälkeen lue lämpötila sensorilta..." Ehkä toisin päin Kumiankkadebuggaus 29

Helpot asiat mokata: sijoitus vs vertailu a=b ja a==b ovat eri asioita! a = b; sijoita b:n arvo a:han a == b; tarkista ovatko a ja b saman arvoiset if (a = b) on siis useimmiten virhe! C-tyylisiä merkkijonoja ei voi vertailla ==-operaattorilla. Arduinon String-olioita voi! 30

Muuttujatyypit laskutoimituksissa Arduino ei automaattisesti muunna muuttujatyyppejä ihmisen mieleen sopiviksi. int kokonaisluku = 2; float muuttuja1 = 3/ kokonaisluku ; // 1 float muuttuja2 = 3.0/2.0; // 1. 5 float muuttuja3 = 3.0/( float ) kokonaisluku ; // 1. 5 (tyyppi)muuttuja-notaatio muuntaa muuttujan tyypin Muunnos isommasta tyypistä pienempään aiheuttaa ongelmia jos muunnettava arvo on liian iso. (long int) 31

Under-/overflow Mikäli muuttujan arvo menee muuttujatyypin alueen yli, "pyörähtää muuttuja yli" Byte-tyypin maksimiarvo on 255. Huomaa ilmiö erityisesti millis()-funktion käytössä byte c = 0; // c = 0 --c; // c = 2 5 5 c = c + 1; // c = 0 Tähän käyttäytymismalliin ei kannata luottaa, ei ole standardissa. 32

Sarjaportti https://www.arduino.cc/en/reference/serial Arduino osaa USB:n kautta esittää sarjaporttia Helpoin tapa tietää mitä Arduinossa tapahtuu Kun ohjelma ei toimi kuten sen pitäisi, kannattaa sarjaporttiin tulostaa eri muuttujien arvoja ja tutkia niiden järkevyyttä Tekstin tulostaminen ennen ja jälkeen jonkin ohjelman osan auttaa selvittämään, jääkö ohjelma jumiin johonkin kohtaan. 33

Sarjaportti https://www.arduino.cc/en/reference/serial Arduino osaa USB:n kautta esittää sarjaporttia Helpoin tapa tietää mitä Arduinossa tapahtuu Kun ohjelma ei toimi kuten sen pitäisi, kannattaa sarjaporttiin tulostaa eri muuttujien arvoja ja tutkia niiden järkevyyttä Tekstin tulostaminen ennen ja jälkeen jonkin ohjelman osan auttaa selvittämään, jääkö ohjelma jumiin johonkin kohtaan. Huom! jos käytät sarjaporttia, pinnejä 0 ja 1 ei voi enää käyttää muuhun! (UNOssa) Voi käyttää viestintään myös Arduinon suuntaan tai useamman Arduinon välillä 34

Serial monitorin avaaminen Varmista että tools port on valittu oikein. 35

Linkkejä Arduinon oppaat ja esimerkit https://www.arduino.cc/en/tutorial/homepage Arduinon kielen referenssi https://www.arduino.cc/en/reference/homepage Google http://www.google.com 36