Muuttujista

Johdanto

Tässä harjoituksessa pääset käyttämään muuttujia (variable) kytkimiä käyttäessäsi. Muuttujat ovat ohjelmoinnissa eräänlaisia tietovarastoja. Niihin voidaan laittaa muistiin jokin arvo, jotta sinun ei tarvitse muistaa sitä ulkoa! Voit katsoa johdannoksi alla olevan videon. Siinä selitetään hieman muuttujien toimintaa ohjelmoinnissa.

What is a Variable? | Programming Basics | Computer Science Instruction

Tarvikkeet

Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.

OsaKuvaKuvaus
LED x 3Pidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
Vastus 330 Ω x 3Vastus vastustaa sähkövirran kulkua. Vastuksen arvo mitataan ohmeissa (Ω) ja ilmoitetaan komponentissa eri värisinä raitoina (tässä oranssi, oranssi, ruskea ja kulta).
Painonappi x 3

Mehackit Maker Kitin painonappi on valkoinen, ei ruskea.

Virtapiiri

  • Kytke nappi porttiin 2 ja maahan.
  • Kytke ledin pidempi jalka porttiin 5 ja lyhyempi jalka vastuksen kautta maahan.

Ohjelman tavoite

Tällä kertaa tavoitteena on harjoitella muuttujien käyttöä ohjelmoinnissa. Näet seuraavilla sivuilla, mitä tarkemmin tapahtuu. Tarvitset seuraavia ohjelmointityökaluja, joista yksi on tällä kurssilla täysin uusi.

Tutut komennot:

Uudet komennot:

Ohjelmointi 1/3

Tehtävä
Kopioi alla oleva koodi ja syötä se Arduinoon. Avaa sen jälkeen Serial monitor oikeassa yläkulmassa olevasta suurennuslasi-kuvakkeesta. Vastaa sitten alla olevaan monivalintaan.
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int buttonState = digitalRead(2);
  Serial.println(buttonState);
  delay(100);
}

Mitä teksti "int" tarkoittaa ohjelmassa?

Ohjelmointi 2/3

Muuttujaa luodessa kirjoitetaan siis aina ensin muuttujan tyyppi ja sen jälkeen muuttujan nimi. Tällä kurssilla muuttujan tyyppi on käytännössä aina int (integer), mikä merkitsee kokonaislukumuuttujaa. Muuttujan nimen taas voit valita itse.

Mikäli muuttuja luodaan setup-metodissa, voi siihen viitata vain setup-metodissa, ja mikäli muuttuja luodaan loop-metodissa, voidaan siihen viitata vain loop-metodissa. Muuttujan voi kuitenkin luoda “globaalisti” setup- ja loop-metodien ulkopuolella, jolloin siihen voi viitata missä tahansa. Alla olevassa koodissa muuttuja “buttonState” luodaan setup- ja loop-metodien ulkopuolella, jolloin siihen voidaan viitata helposti myös loop-metodissa kirjoittamatta enää erikseen “int”..

int buttonState = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

void loop() {
 buttonState = digitalRead(2);
 Serial.println(buttonState);
 delay(1000);
}
Tehtävä
Mitä alla olevassa koodissa tapahtuu? Vastaa sen pohjalta monivalitaan. Muista, että ohjelman käynnistyessä suoritetaan kerran setup-metodi, minkä jälkeen siirrytään suorittamaan kierros kerrallaan loop-metodia.
int counter = 3;

void setup() {
  pinMode(2, INPUT_PULLUP); 
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  counter = counter + 3;
  Serial.println(counter);
  delay(1000);
}

Mikä on muuttujan "counter" arvo kolmen loop-kierroksen jälkeen?

Ohjelmointi 3/3

Harjoitellaan vielä hiukan lisää muuttujien käyttöä. Jos tiedetään, että kokonaislukumuuttujan arvo on 0 tai 1 ja haluamme vaihtaa arvon päinvastaiseksi, on meille hyötyä seuraavasta merkinnästä.

buttonState = !buttonState;

Huutomerkkiä käyttämällä käännetään arvo päinvastaiseksi: nollasta tulee yksi ja ykkösestä nolla.

Tehtävä
Syötä seuraava koodi Arduinollesi ja vastaa havaintojesi pohjalta alla olevaan monivalintatehtävään. Nyt koodissa on yksi uusi muuttuja “ledState”, jonka on tarkoitus varastoida aina se tila, jossa ledi milloinkin on.
int buttonState = 0;
int ledState = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println(buttonState);
  buttonState = digitalRead(2);
  if(buttonState == 0){
    ledState = !ledState;
  }
  digitalWrite(5, ledState);
}

Mitä Arduino-prorotyypissäsi tapahtuu?