Monista saattaa tuntua
hiukan simppeliltä ainoastaan vilkutella LEDejä. Aivan totta, mutta tämä ei
olekaan tavoite ja päämäärä, vaan keino päästä tutuksi eri
ohjelmointiratkaisuihin. Vilkutus on ainoastaan osoitus sille, että jotain
tapahtuu.
Virheitä sattuu usein. Ja
ne ovat siitä hyviä, että niiden selättämisestä oppii aina uutta. Virheitä on
pääasiassa kahta eri tyyppiä: kielioppivirheitä,
joihin ohjelman kääntäjä puuttuu. Näistä tulee ilmoitus ohjelmointityökalun
alaosaan. Vasemmalle tulostuu ohjelmarivi, mistä virhe on löytynyt. Sama rivi
näkyy myös maalattuna ohjelmassa. Todellinen virhe on useinkin edellisessä
lauseessa.
Näitä virheitä ovat
useimmiten kirjoitusvirheet, puolipisteen ( ; ) puuttuminen ohjelmarivin
lopusta tai kaarisulkuparin ( { … } ) ristikkäisyys. Ohjelmalause päätetään
puolipisteeseen ja useamman lauseen toimintaryhmä suljetaan kaarisulkujen
sisään. Ei tässä näistä sen enempää, näistä tulee arkipäivää.
Toinen virheryhmä on
toiminnalliset virheet. Kääntäjä on ihan tyytyväinen ja lataa ohjelman
Arduinoon, mutta ohjelma ei toimikaan
ajatellulla tavalla. Seuraavassa esimerkki ohjelmasta, millä halutaan
vilkuttaa kolmea LEDiä samanaikaisesti kolmella eri nopeudella. Näin ei
kuitenkaan tapahdu!
Kolmas virhetyyppi on se,
että vahingossa syöttää Arduinolle käyttöjännitteen vääränapaisesti tai ehkä
vielä useammin sattuu, että pinneihin kohdistuu vahingossa liian suuri jännite.
Tämä tuhoaa mikropiirin. UNO-levyihin voi pelkän IC-piirin vaihtaa erikseen,
mutta esim. Leonardo on tässä tapauksessa mennyttä kalua. Lähtöjä ei myöskään
saa kuormittaa liikaa.
Hyvä tapa ohjelmaa
kirjoitettaessa onkin testata ohjelman edetessä pieninä kokonaisuuksina. Laajan
kokonaisuuden, kokonaisuuden, missä saattaa olla useita virheitä, testaaminen
on työlästä ja vaikeaa. Toinen hyvä tapa on pitää rinnalla auki toista
työkaluikkunaa, mihin kopioi, ja mistä kopioi muuttujia sekä rakenteita.
Tällöin välttyy monilta helposti syntyviltä virheiltä. Kun etenee testauksessa
tällä tavoin pienin portain, on jatko hyvä aloittaa uudella versiolla, jolloin
vanhaan jo toimivaan versioon on helppo palata.
LEDien ohjaukseen voidaan
käyttää hyvin UNOn digitaalisia lähtöjä. Näinen maksimi kuormitus on 40 mA
(milliampeeria eli 0,04A) Yhteensä koko Arduino UNOa voi kuormittaa 0,4A:illa
(400 mA). Ei ole kuitenkaan syytä mennä näille äärirajoille.
Suositus on, että sopiva
LEDin etuvastus on 220 ohmia. Arduinon lähtö (DI) on 5V ja LEDin yli jää noin
2V, joten etuvastuksen yli jää 3V. Ohmin lain mukaan vastuksen ja LEDin läpi
kulkeva virta LEDin palaessa on 3V / 220ohm = 0.0136A eli noin 14 mA. Tällä
mitoituksella ollaan hyvin rajojen sisällä.
eppabasic.fi
eppabasic on kahden
abiturientin tekemä selaimessa
toimiva ohjelmointiohjelma. Hatun nosto näille kahdelle nuorelle. Ohjelma on
ajateltu kouluille alkeisopetukseen. (Toteutuuko, jää tämän vuoden syksyllä
nähtäväksi.) Se on todella mainio alusta, kun haluaa päästä alkuun varsinaisten
tietokoneiden ohjelmointitapaan. Tulen käyttämään tätä, kun eteen tulee
laskentaa.
Pidemmälle mentäessä
suositeltava on esimerkiksi ruby-ohjelmointikieli.
Yksi eri kielien opetussivusto löytyy osoitteesta https://www.codecademy.com/ Siellä on
kursseja monille eri ohjelmointikielille ja paljon harjoituksia. Edetä voi
omaan tahtiin askel kerrallaan.
Dim Virta = 3 / 220
Print Virta
Kolmen LEDin epäonnistunut vilkku
Vieressä komponenttien kytkentä: Digitaalipinnit 0 ja 1 on
varattu sarjaliikenteelle, joten ne on hyvä jättää siihen tarkoitukseen. Jos
tulee pulaa pinneistä, niin pulmaan on olemassa ratkaisuja.
Ohjelma 4
/*****************************************
* Ohjelma 4: 3 x LED
* 07.04.2016
* Epäonninen 3:n LEDin vilkutus
*****************************************/
// Määrittelyt
const int Con_LEDpun = 2;
const int Con_LEDkel = 3;
const int Con_LEDvih = 4;
const int Con_Viive = 500; // Perusjakso 500ms
void setup() {
pinMode(Con_LEDpun, OUTPUT);
pinMode(Con_LEDkel, OUTPUT);
pinMode(Con_LEDvih, OUTPUT);
}
void loop() {// Pääohjema
digitalWrite(Con_LEDpun, HIGH);
digitalWrite(Con_LEDpun, HIGH);
delay(Con_Viive); //
Puolijakso = 500ms
delay(Con_Viive); //
Puolijakso = 500ms
digitalWrite(Con_LEDkel, HIGH);
digitalWrite(Con_LEDkel, HIGH);
delay(Con_Viive * 6 / 10); //
Puolijakso = 300ms
delay(Con_Viive * 6 / 10); //
Puolijakso = 300ms
delay(Con_Viive * 24 / 100);// Puolijakso = 120ms
delay(Con_Viive * 24 / 100);// Puolijakso = 120ms
}// Pääohjelma loppu
Jokaisella LEDillä on oma
vilkutusaikansa, mutta ne vilkkuvat peräkkäin eikä yhtä aikaa, kuten oli
tarkoitus. Pienin muutoksin tämä voisi toimia liikennevaloina, kunhan siinä ei
ole suojatietä eikä painiketta jalankulkijoille. Kun prosessori suorittää delay(ms) käskyä, ei se tee mitään muuta. Ei
esimerkiksi tutki I/O:ta eikä tiedä, onko painiketta painettu.
Ensin tässä oli video
LEDien vilkutuksesta. Siitä näki, että ne eivät vilkkuneet yhtä aikaa eri
tahtiin, vaan peräkkäin. Se ei ollut tarkoitus. Tämä virhe oli tahallinen.
Toinen virhe oli se, että videotiedoston koko oli niin suuri (yli 7 Mbyte),
että lataus netistä oli toivottoman hidasta. Tiedän, että kokoa voi typistää,
joten tässä on taas uuden oppimisen paikka.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBKYNgWtW2M8zaR37lj_epD96Tcp6JiqznZqyGiM7ZqUj4pzd57ykGWuX3qLRXV-k2k_C7KM6jNKyPo-PWL0WVZb0KLMGu0ckCfo7fBNBpEGxlrBnpXl-dHcVI04bJnQoa0KeihcW-82pL/s200/Ohj_4m.jpg)
Tuossa kytkinkaavassa LEDien etuvastukset ovat merkitty
erikseen, mutta tuolla testialustalla olen käyttänyt piiriä, missä on 8
vastusta samassa kotelossa. Noiden vastusten arvo on 330 ohmia, joten LEDit
palavat hiukan himmeämmin, mutta se ei ole oleellista.
HUOM! Puhuin äsken
kahdenlaisista virheistä. Törmäsin uuteen. En ymmärtänyt virheilmoituksesta
yhtään mitään. Myöskään äsken oikein kääntyneet eivät kääntyneet enää. Kopioin
virheilmoituksen ja etsin sitä goglesta. Silloin muistin, että olin äsken
hyväksynyt ehdotetun päivityksen ja versiot menivät jollain tapaa (ilmeisesti?)
ristiin. Kiitos heidän, jotka auttavat goglessa. En osannut korjata mitään,
vaan poistin Arduinoasennuksen ja latasin sekä asensin sen uudestaan. Lähti
taas pelittämään.
Ei kommentteja:
Lähetä kommentti