6. 7-segmenttinäyttö

Sivulla 7-segmentti on kerrottu tarkemmin käytetyn näytön tyypistä ja kytkennöistä yms. Tässä osassa on käytetty Prenta Oy:n Arduino rakentelusarjasta löytyvää 5161AS 7-segmenttinäyttöä.

Näyttö kytketään Arduino Unon pinneihin 13-7 niin että segmentti A on pinnissä 13 ja kytkentä siitä alaspäin menee järjestyksessä kohti 7:ää. Alla olevissa kuvissa nähdään kytkentäkaavio sekä Fritzing-ohjelmalla tehty kuva kytkennästä.

7-segmentti verolevy

7-segmentti kytkentä

Ohjelma toimii siten, että numerot 0 - 9 ilmestyvät 7-segmenttinäyttöön sekunnin välein. Lähdekoodi on sen verran pitkä, että olen sen nyt tähän laittanut vain zip-tiedostona, joten halutessasi voit tutkia sen sisältöä lataamalla koodin koneellesi tästä: Arduino 7-segmenttiohjaus.

Arduinon operaattorit

Operaattorit

Arduinolle on määritelty kolmenlaista eri operaattoria, jotka ovat aritmeettiset operaattorit (eli matemaattiset), vertailuoperaattorit (esim. if-lauseen sisällä käytettävät) ja boolean-operaattorit (logiikkaoperaattorit).

Operaattorit ovat ohjelmoinnissa vähän sama asia kuin kemiassa katalyytti - ne saavat asioita tapahtumaan. Ne operoivat muuttujien kanssa, eli tekevät asian X toisille muuttujille. Ohjelmoinnin tapauksessa mikroprosessorille tai tietokoneelle voidaan esimerkiksi sanoa, että "yhdistä nämä kaksi lukua niin, että niistä saadaan summa/kertolasku/jakolasku jne". Ajatteleppa vaikka taskulaskinta. Kun näppäilet siihen 123 + 7, niin näppäilemäsi plus symboli on operaattori. Se kertoo laskimelle, että nämä luvut lasketaan yhteen. Jos ymmärsit laskin esimerkin, niin ymmärrät että mitenkään tavattoman vaikeasta asiasta ei ole tässä kyse.

Aritmeettiset eli matemaattiset operaattorit

Ensimmäisenä matemaattiset operaattorit, sillä ne lienevät kaikista tutuimpia ihan perus matematiikan vuoksi. Näitä siis ovat:

= (sijoitus)
+ (lisäys)
- (vähennys)
* (kertominen)
/ (jakaminen)
% (jakojäännös eli modulo)

Seuraavassa lyhyesti esimerkin kanssa yllä luetellut operaattorit:

Sijoitus:

// Luodaan ja alustetaan muuttuja
int anturiLukema = 0;
// Asetetaan muuttujaan analogiapinnin A0 sen hetkinen arvo.
anturiLukema = analogRead(0);

Yllä olevassa koodissa luodaan muuttuja ja siihen sijoitetaan aluksi arvo 0 ja heti alemmalla rivillä analogiapinnin arvo. Sijoitusoperaatio suoritetaan tässä siis kaksi kertaa.

Muuttujiin, jotka on määritetty sanalla const, ei voida sijoittaa mitään:

// Vakiomuuttuja voidaan määrittää vain kerran:
const int vakioMuuttuja = 313;
vakioMuuttuja = 112; // Tämä ei ole sallittua ja tästä seuraa käännösvirhe.

Yhteen- ja vähennyslaskut:

Yhteenlaskeminen ja vähentäminen on aivan yhtä yksinkertaista kuin taskulaskimellakin. Muuttujien tilalla voi ihan hyvin käyttää myös numeroita eli vakioita, mutta alla on käytetty vain muuttujia:

  // Luodaan pari muuttujaa
  int kilometrit = 0;
  int trippiMittari = 482;
  
  // Lisätään kilometrilukemaan trippimittarin lukema
  kilometrit = kilometrit + trippiMittari;
  // ... tai näin...
  kilometrit += trippiMittari;
  
  // Vähentäminen tapahtuu luonnollisesti näin:
  kilometrit = kilometrit - trippiMittari;
  // ... tai näin...
  kilometrit -= trippiMittari;

Muutama vinkki muuttujien kanssa operoimisesta:

  • Varmista, että muuttujasi on tarpeeksi suuri (eli valitse sopiva tietotyyppi kuten int, unsigned int, word, long jne...). Katso tietotyypeistä lisää edellisestä osasta.
  • Muista että muuttujan määrittelyssä pitää erikseen kertoa käytetäänkö pelkästään positiivisia lukuja (määritellään siis unsigned int, unsigned long jne...).
  • Kun muuttuja on maksimiarvossaan, se joko pyörähtää ympäri tai menee miinuksen puolelle, tämä riippuu määrittelystä kuten on edellä mainittu.
  • Mikäli yksikään muuttujista on tyypiltään float tai double, niin kaikki laskutoimitukset suoritetaan liukuluvuilla (on siten hidasta ja vie paljon kooditilaa flash-muistista).

Kerto- ja jakolaskut:

Kertolaskuja tehdään myös aivan tavalliseen tapaan:

  int tulo = 0;
  tulo = 9*9; // = 81

Kertolaskuja tehtäessä muuttujan koko saattaa tulla nopeasti vastaan, joten kannattaa pitää mielessä mikä on muuttujan suurin mahdollinen luku. Jakolasku tapahtuu myös vastaavasti:

  int osamaara = 0;
  osamaara = 81/9; // = 9

Osamäärän ottaminen jostakin luvusta on monesti tarpeellista silloin, kun pitää esimerkiksi ratkaista kymmenyksien tai satojen lukumäärää tai tutkia onko luku jaollinen jollakin toisella luvulla:

  int jakojaannos = 0;
  jakojaannos = 20 % 10; 
  // = 2, koska kymmenen menee 20:een kaksi kertaa

Vertailuoperaattorit

Vertailuoperaattoreita on jo aikaisemmin käytettykin esimerkiksi if-lauseessa. Näitä käytetään silloin, kun halutaan verrata yhtä tai useampaa muuttujaa johonkin vakioarvoon tai toisen muuttujan arvoon. Alla lista käytettävissä olevista vertailuoperaattoreista:

== (yhtä kuin, huomaathan että tässä on kaksi yhtäkuin merkkiä yhden sijaan)
!= (eri suuri)
< (pienempi kuin)
> (suurempi kuin)
<= (pienempi tai yhtä suuri)
>= (suurempi tai yhtä suuri)

Alla olevissa esimerkeissä if-lause antaa ehdon arvoksi tosi kun vertailuoperaattoreita käytetään:

int luku1 = 10;
int luku2 = 15;
int luku3 = 10;

// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku1 == luku3) // 10 == 10
{
  // Tee jotain...
}
// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku1 != luku2)  // 10 != 15
{
  // Tee jotain...
}
// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku1 < luku2)  // 10 < 15
{
  // Tee jotain...
}
// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku2 > luku1) // 15 > 10
{
  // Tee jotain...
}
// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku1 <= luku3) // 10 <= 10
{
  // Tee jotain...
}
// ehdon arvo on tosi eli 1. If-lohko suoritetaan
if(luku1 >= luku3) // 10 >= 10
{
  // Tee jotain...
}

Vertailuoperaattoreita käytetäänkin ohjelman logiikan ohjaamisessa haluttuun suuntaan tiettyjen ennalta määritettyjen ehtojen mukaisesti.

Boolen operaattorit

Boolen operaattoreita oletkin voinut käyttää esimerkiksi Googlesta tietoa etsiessäsi taikka kirjaston tietokantaa tonkiessasi. Olet voinut esimerkiksi kirjoittaa hakusanoiksi "maito JA kahvi", missä JA kertoo hakukoneelle, että haluat etsiä molempia sanoja sekä "maito" että "kahvi" ja niiden tulee molempien olla hakutuloksissa esitettyinä. Käyttö ei ohjelmoinnissakaan ole tämän ihmeellisempää.

Boolen operaattoreita Arduinon ohjelmoinnissa on käytettävissä vain kolme eri tyyppiä, jotka ovat seuraavat:

&& (JA eli AND)
|| (TAI eli OR)
! (EI eli NOT)

Alla olevat esimerkit näyttävät kuinka näitä voidaan käyttää:

// ehdon arvo on tosi eli 1. If-lohko suoritetaan. Huomaa sulkeet!
if((luku1 == 10) && (luku == 10)) // luku1 JA luku3 yhtäsuuri kuin 10
{
  // Tee jotain...
}
if( (luku1 == 10) || (luku3 == 10) ) // luku1 TAI luku3 yhtäsuuri kuin 10
{
  // Tee jotain...
}
if( !(luku1 == 10) ) // luku1 EI yhtäsuuri kuin 10
{
  // Tee jotain...
}

Operaattoreiden kanssa on syytä olla varovainen, sillä kaksi AND-merkkiä on eri asia kuin yksi AND-merkki (& != &&). Lisäksi kukin vertailu tulee olla kirjoitettuna omien sulkeiden sisään if-lauseessa.

Lopuksi

Tässä kappaleessa olikin taas enemmän teoriaa, kuin itse Arduinolla näpertämistä, mutta seuraavassa osassa homman nimi on toisenlainen.

Seuraavassa osassa tarkastellaan Arduinolla ohjattavaa relettä. Katsotaan kuinka rele toimii ja millaisen ohjauskytkennän se vaatii. Lopuksi kytketään Arduinoon ulkopuolinen rele ja ohjataan jotakin raskaampaa kuormaa. Eli sellaista sähkölaitetta, jonka sähköjä ei voida Arduinolta suoraan ottaa, mutta ohjaussignaali kylläkin.