Ohjelmointi

Sanaruletin ohjelmointi

Moottorin pyörintä käynnistetään ja pysäytetään heilauttamalla kättä infrapunasilmän päällä.
Ohjelma voidaan kuvata sanallisesti näin:
  • JOS havaitaan käden heilautus infrapunasilmän päällä JA moottori on pysähdyksissä, NIIN käynnistetään moottori.
  • JOS havaitaan käden heilautus infrapunasilmän päällä JA moottori on käynnissä, NIIN sammutetaan moottori.
Ohjelmoidaan ohjelma seuraavaksi.
Sivun alaosasta löydät videon sanaruletin ohjelmoinnista.

Aloitus


1. Liitä mikro-ohjain kiinni tietokoneeseen USB-kaapelilla.


2. Käynnistä Crumblen ohjelmointiympäristö työpöydällä olevasta kuvakkeesta.


3. Raahaa Basic-osiosta aloituspalikka PROGRAM START koodialueelle.




Muuttujan muodostus ja käyttö


4. Tarvitsemme ohjelmassa muuttujaa, johon tallennetusta luvusta tiedämme onko moottori pysähdyksissä vai käynnissä.
Klikka osiota Variables (muuttujat) ja sieltä painiketta RENAME (samalta riviltä t-kirjaimen kanssa).





5. Annamme muuttujalle uuden nimen. Pyyhi kirjain t pois, kirjoita tilalle teksti tila ja paina enter.




6. Nyt meillä on tila-niminen muuttuja.




7. Raahaa Variables-osiosta komento LET... = 0 koodin aloituspalikan alle.




8. Tällä komennolla annetaa muuttujalle arvo. Muuttuja sijoitetaan parametriksi komennossa
olevaan valkoiseen kohtaan. Raahaa seuraavaksi samasta Variables-osiosta
muuttujapalikka tila koodiin ja upota se tämän komennon parametriksi.

Komennolla annetaan muuttujan tila arvoksi luku 0.
Kun tilan arvo on 0, se tarkoittaa että moottori on sammuksissa.
Ja kun tilan arvo on 1, se tarkoittaa että moottori on käynnissä.
(päätimme itse tällaisen logiikan.)




9. Lisää seuraavaksi osiosta Basic tuttu ikuinen toistorakenne DO FOREVER... LOOP
Ohjelma pysyy käynnissä niin kauan kuin mikro-ohjaimessa on virta päällä.




Tilanne: havaitaan käden heilautus JA moottori on sammuksissa


10. Seuraavaksi tutkitaan ehtorakenteella, onko infrapunasilmä lähettänyt esteestä (siis käden heilautuksesta sen edessä)
kertovan signaalin mikro-ohjaimelle.

Siirry osioon Control ja raahaa sieltä ehtorakenne IF... THEN... END IF koodiin ja upota se toistorakenteen sisälle.




11. Ehdossa meidän tulee tutkia kahta asiaa (niistä lisää myöhemmin).
AND-operaattorilla voidaan yhdistää kaksi osaehtoa yhdeksi ehdoksi.

Siirry osioon Operators ja raahaa sieltä operaattori AND ehtorakenteen ehtoon.




AND-operaattorin toimintaa voidaan havainnollistaa alla esitetyllä totuusarvotaululla:

1. osaehto 2. osaehto AND-operaation arvo
epätosi epätosi epätosi
tosi epätosi epätosi
epätosi tosi epätosi
tosi tosi tosi

Kaksi osaehtoa yhdistyy AND-operaatiossa siis niin, että koko operaation arvo on tosi vain silloin kuin molemmat
osaehdot ovat totta.


12. Ensimmäinen tutkittava asia on, onko infrapunasilmä lähettänyt mikro-ohjaimelle esteestä (käden heilautuksesta) kertovan signaalin.
Siirry takaisin osioon Basic ja raahaa sieltä palikka A IS HI ja upota se ensimmäiseksi osaehdoksi AND-operaattoriin.




13. Infrapunasilmän signaalijohto on liitetty mikro-ohjaimen pinniin A, joten ensimmäistä parametria ei tarvitse muuttaa.

Havaitessaan esteen edessään infrapunasilmä lähetää mikro-ohjaimen pinniin A digitaalisen signaalin, jonka arvo on LO.
(digitaalisella signaalilla voi olla vain kaksi arvoa, joko HI tai LO).

Toista parametria tulee siis muuttaa. Klikkaa hiiren vasemmalla painikkeella parametria HI, niin sen arvoksi muuttuu LO.
Nyt tämä palikka on parametroitu oikein.




13. Toinen ehdossa tutkittava asia on, onko moottori käynnissä vai onko se sammutettu.
Tämän voimme selvittää tutkimalla muuttujan tila arvoa.

Siirry osioon Operators ja raahaa sieltä vertailuoperaattori yhtä suuri kuin toiseksi osaehdoksi.




14. Koodaamme ohjelman niin, että muuttujan tila arvo 0 tarkoittaa sammutettua moottoria
ja arvo 1 tarkoittaa käynnissä olevaa moottoria.

Siirry osioon Variables ja raahaa sieltä muuttujapalikka tila ensimmäisen nollan paikalle vertailuoperaattoriin.




15. Tutkitaan ensin tilanne, jossa:
  • Infrapunasilmä ilmoittaa havainneensa esteen edessään digitaalisella signaalilla, jonka arvo on LO.
    • JA
  • Moottori on sammutettuna, eli muuttujan tila arvo on 0.
Tällaisessa tilanteessa molemmat osaehdot ovat totta ja AND-operaattori palauttaa siten arvon tosi.
Silloin suoritetaan ehtorakenteen sisälle upotetut koodipalikat.

Tällaisessa tilanteessa käynnistämme moottorin.


Moottorin käynnistys


Siirry osioon Input/Output ja raahaa sieltä komento MOTOR 1 FORWARD AT 75 % ehtorakenteen sisälle.



Tämä on hyvin monipuolinen komento. Parameteja muuttamalla se ohjaa moottoria monella eri tavalla.
Käydään oletusparametrit läpi:
  • <1>
    • Crumbleen on mahdollista liittää kaksi tasavirtamoottoria, 1 ja 2. Parametrilla valitaan ohjattava moottori. Meidän kytkennässä moottori on liitetty moottorinohjauspinneihin 1, joten tätä parametria ei tarvitse muuttaa.
  • <FORWARD>
    • Parametri määrittää pyörimissuunnan. FORWARD = eteenpäin, REVERSE = taaksepäin, STOP = pysäytys. Tätäkään parametria meidän ei tarvitse muuttaa.
  • <75>
    • Parametri määrittää moottorin pyörimisnopeuden. Nopeus on lukuarvo väliltä 0-100 prosenttia moottorin maksiminopeudesta. Tätä parametria muutamme seuraavaksi.


16. Klikkaa komennosta parametria 75, pyyhi se pois ja kirjoita tilalle luku 50.
Meidän pelissä moottorin pyörimisnopeus vaikuttaa pelin vaikeusasteeseen.
Mitä nopeammin moottori pyörii, sitä vaikeampaa osoitinta on pysäyttää haluttuun kohtaan.



17. Moottori on nyt käynnissä, joten vaihdetaan myös muuttujan tila arvoksi luku 1.
Siirry osioon Variables ja raahaa sieltä komento LET... = 0 edellisen komennon perään.




18. Raahaa samasta Variables-osiosta muuttujapalikka tila komennon ensimmäiseksi parametriksi
ja kirjoita toisen parametrin tilalle luku 1. Näin parametroituna tämä komento tallentaa muuttujan
tila arvoksi luvun 1 (moottori on käynnissä).




19. Siirry Basic-osioon ja raahaa sieltä komento WAIT 1.0 SECONDS edellisen komennon perään.
Tämä komento laittaa mikro-ohjaimen odottamaan yhden sekunnin ennen kuin se jatkaa ohjelman suoritusta.
Tänä aikana pelaaja ehtii siirtää kätensä pois infrapunasilmän päältä, eikä moottoria sammuteta saman tien.





Tilanne: havaitaan käden heilautus JA moottori on käynnissä


20. Lopun koodin muodostamme monistamalla ja muokkaamalla monistettua koodia.
Siirrä hiiren osoitin ehtorakenteen päälle, vaikkapa then-sanan päälle, ja paina hiiren oikeaa painiketta.
Siirrä hiiren osoitin avautuvan ikkunan päälle ja klikkaa tekstiä Duplicate hiiren vasemmalla painikkeella.




21. Koko ehtorakenne siihen upotettuine komentoineen monistuu viereen.




22. Muutetaan tätä koodia hiukan ennen kuin liitämme sen ohjelmaan.
Tutkimme tässä ehtorakenteessa tilanteen, jossa:
  • Infrapunasilmä ilmoittaa havainneensa esteen edessään digitaalisella signaalilla, jonka arvo on LO.
    • JA
  • Moottori on käynnissä, eli muuttujan tila arvo on 1.

Muuta vertailuoperaattoriin TILA = 0 nollan tilalle luku 1 (moottori on käynnissä).


23. Moottori tulee nyt sammuttaa, klikkaa parametria FORWARD kaksi kertaa, jolloin
komennoksi tulee MOTOR 1 STOP. Tämä komento sammuttaa moottorin.



24. Koska moottori on sammutettu, niin muuttujan tila arvoksi tulee tallentaa luku 0.
Klikkaa komennosta LET TILA = 1 lukua 1, pyyhi se pois ja kirjoita tilalle luku 0.



25. Koodi on nyt muutettu, liitetään se osaksi ohjelmaa.
Ota hiiren vasemmalla painikkeella kiinni ehtorakenteen then-sanasta ja raahaa koodi
ohjelmassa olevan ensimmäisen ehtorakenteen alle. Ohjelmaan tulee siis kaksi peräkkäistä ehtorakennetta.



Ohjelma on nyt valmis.

Valmiin ohjelman koodi:




Lataa ohjelma mikro-ohjaimeen.

Seuraava vaihe: Testaus ja pelaaminen