maanantai 19. helmikuuta 2018

Ohjelmoinnin valinnaiskurssi: Arduino-ohjelmointia (osa 1)

Tänä vuonna pääsimme ensimmäistä kertaa käyttämään kunnolla DFRobot:in Beginner Kit for Arduino - paketteja 8.luokan ohjelmointikurssin kanssa. Teimme paketin mukana tulleiden kytkentäkorttien avulla demoprojekteja, ja koodasimme niihin toimivat ohjelmat. Ryhmässä oli 14 oppilasta ja 10 Arduino Kit:iä, joten osa teki pareittain ja osa yksin. Kolme ensimmäistä projektia toimivat hyvin ja ne saatiin pääpiirteissään tehtyä yhden kaksoistunnin aikana. Ryhmällä oli aikaisempaa kokemusta Arduinoista, joten rakentaminen sujui ilman isompia ihmettelyjä ja yritimme keskittyä enemmän ohjelmointiin. Ainoa hämminkiä aiheuttanut asia oli se, että kyntkentäkortien kuvissa oli vähemmän vihreitä sekä punaisia pinnejä kuin itse laitteessa. Tästäkin selvittiin kun oli tarkkana ja muisti laskea pinnit pienimmästä suurimpaan (ja jättää lopusta kaksi pinniä tyhjäksi).

Project 2: SOS Beacon

Ensimmäinen tavoite oli saada ledi ylipäätään vilkkumaan.

Project 2: SOS Beacon
image source: http://image.dfrobot.com/image//Blog/

Ohjelmakoodi ledin vilkuttamiseen on hyvin yksinkertainen:

int LED = 10;

void setup() {
  pinMode(LED, OUTPUT); 
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

Jotta koodin voi ladata Arduinoon, pitää muistaa valita oikea sarjaportti USB-kaapelille:

Valitse Työkalut-valikosta oikea portti Arduinolle, ennen koodin lataamista siihen
Seuraava tehtävä olikin saada ledi vilkkumaan nopeammin sekä niin että yksi vilkutus on pidempi ja toinen lyhyempi. Kun oppilaat olivat tämän hoksanneet, niin lopullinen tehtävä oli saada aikaan S.O.S morseaakkosilla eli  ... --- ...

Tämä onnistui kopioimalla monta riviä koodia. Osalla rivit alkoivat mennä sekaisin, joten totesimme, että on ehkä kätevämpää tehdä apuohjelma, joka suorittaa yhden vilkutuksen. Koska vilkutuksen pituus vaihtelee, se asetettiin muuttujaksi (pituus).

int LED = 10;
int LYHYT = 200;
int PITKA = 500;

void setup() {
  pinMode(LED, OUTPUT); 
}

void vilkutus(int pituus){
  digitalWrite(LED, HIGH);
  delay(pituus);
  digitalWrite(LED, LOW);
  delay(500);
}

void loop() {
  vilkutus(LYHYT);
  vilkutus(LYHYT);
  vilkutus(LYHYT);
  vilkutus(PITKA);
  vilkutus(PITKA);
  vilkutus(PITKA);
  vilkutus(LYHYT);
  vilkutus(LYHYT);
  vilkutus(LYHYT);
}

Tämä versio koodista todettiin aika selkeäksi, tosin hieman turhaa toistoa sisältäväksi. Lopullinen koodi optimoitiin for-looppien avulla tällaiseksi:

int LED = 10;
int LYHYT = 200;
int PITKA = 500;

void setup() {
  pinMode(LED, OUTPUT); 
}

void vilkutus(int pituus){
  digitalWrite(LED, HIGH);
  delay(pituus);
  digitalWrite(LED, LOW);
  delay(500);
}

void loop() {
  for(int i=0; i<= 2; i++){
    vilkutus(LYHYT);
    } 
  for(int i=0; i<= 2; i++){
    vilkutus(PITKA);
  }
  for(int i=0; i<= 2; i++){
    vilkutus(LYHYT);
  }



SOS Beacon kytkentä näyttää tältä

Ei kommentteja:

Lähetä kommentti