pinMode(0, INPUT)

Tähän asti harjoituksien arduino on toiminut täysin itsenäisesti, mutta kuten jo aikaisemmin kursilla mainittiin, Arduino voi myös reagoida ulkoiseen ohjaukseen. Yksinkertaisimmillaan tämä tapahtuu digitalRead() funktion kautta.

void setup() {
  pinMode(3, INPUT); // Asetetaan pinni '3' INPUT tilaan
}

void loop() {
  int kytkin = digitalRead(3); // Luetaan pinnin 3 arvo ja tallennetaan se 'kytkin' muuttujaan
}

Jotta digitalRead toimisi oikein, on luettava pinni ensin asetettava INPUT modeen. Tämä tarkoittaa, että pinniä ei voi ohjata digitalWrite() funktiolla, vaan sen arvo on luettavissa digitalRead() funktiolla.

Funktion paluuarvo

Tähän asti käyttämämme funktiot, pinMode(), digitalWrite() ja delay() ovat ainoastaan ohjanneet Arduinon toimintaa. Nyt esitelty digitalRead() poikkeaa näistä siten, että sitä käytetään tiedon saamiseen Arduinolta. Tällöin funktio “palauttaa” pyydetyn arvon. Palautettu arvo tallenetaan muuttujaan ja sitä voidaan käyttää myöhemmin esimerkiksi if-lauseessa.

int kytkin = digitalRead(3); // Luetaan pinnin 3 arvo ja tallennetaan se 'kytkin' muuttujaan

Tässä koodissa luetaan pinnin 3 jännite käyttäen digitalRead() funktiota. digitalRead ottaa parametrikseen luettavan pinnin numeron, ja palauttaa HIGH mikäli jännite on kytketty ja LOW mikäli jännitettä ei ole kytketty.

if (kytkin == HIGH) { // Vertaillaan muuttuja 'kytkin arvoa'
    digitalWrite(0, HIGH); // Kytketään vihreä ledi päälle
  } else if (kytkin == LOW) {
    digitalWrite(0, LOW); // Kytketään vihreä ledi pois
  }

Tallennettua muuttujaa voidaan vertailla if-lauseessa.

Harjoitus 5.1

Tässä koodissa vihreä painiketta ohjaa vihreää lediä päälle ja pois (Koodia ajaessa voit hiiren klikkauksella painaa painiketta). Miten saisit sinisen painikkeen ohjaamaan lediä? entä miten saisit molemmat kytkimet toimimaan ledin ohjauksessa?

Entä miten muuttaisit koodia siten, että ledi on norlaamisti päällä, mutta painike kytkee ledin pois päältä?

https://wokwi.com/projects/405448875957636097

Harjoitus 5.2

Tässä koodissa on kävelijöille tarkoitetut liikennevalot. Kuinka painikkeen saisi asettamaan vihreän valon päälle hetkellisesti? (Vinkki: jos painike on painettu, laita punainen valo pois päältä, laita vihreä valo päälle, odota hetki, laita vihreä valo pois päältä ja punainen valo päälle)

https://wokwi.com/projects/405451227158449153

Sivun alkuun:

Arduino vasta-alkajille

Sisällys

Perusteet

pinMode ja digitalWrite

Loop ja delay

Muuttujat

Ehtolauseet

INPUT ja digitalRead

While toistorakenne

Palautelomake

© 2024 Eero Prittinen