Sarjaportti, Serial.read()
Serial.read()
Sarjaportista voi lähettää viestejä myös arduinolle. Tällöin käytetään komentoja Serial.available() ja Serial.read().
if (Serial.available() > 0) { // Tarkastetaan, onko sarjaportissa jotain luettavaa char merkki = Serial.read(); // Luetaan yksi merkki sarjaportista Serial.print(merkki); // Tulostetaan luettu merkki takaisin sarjaporttiin}Serial.available() tarkistaa, kuinka monta kirjainta tai merkkiä sarjaportissa odottaa lukemista. if (Serial.available() > 0)
tarkistaa siis, että luettavaa on enemmän kuin nolla kappaletta. char merkki = Serial.read(); taas puolestaan lukee
sarjaportista yhden merkin ja tallentaa sen merkki-nimiseen muuttujaan. Muuttujan tyyppi on tässä tapauksessa char, mik’ä
tarkoittaa yhtä kirjainta. Serial.print(merkki); taas tulostaa merkin takaisin sarjaporttiin, jolloin se ilmestyy taas Arduinon
sarjaportitulostimeen.
Huomioitavaa on, että tässä käytettiin funktiota Serial.print(), kun aiemmin on käytetty funktiota Serial.println(). Näistä
jälkimmäinen vaihtaa riviä tulostuksen jälkeen, kun taas ensimmäinen tulostaa ainoastaan yhden merkin kerrallaan.
Jos Serial.print()-funktiolla halutaan tulostaa rivinvaihto, voidaan käyttää rivinvaihto-erikoismerkkiä "\n". \ tarkoittaa,
että seuraava kirjain kuvaa erikoismerkkiä ja n taas tulee sanoista new line, eli uusi rivi.
Harjoitus 3
Tässä harjoituksessa Arduino ottaa vastaan viestejä sarjaportista ja toistaa ne takaisin sarjaporttiin. Kuinka saisit arduinon
tavaamaan sanat, eli asettamaan "-" merkin kirjainten välille?
Harjoitus 4
Tässä harjoituksessa Arduino on lukittu salaisella salasanalla. Lue koodia ja yritä arvata salasana kirjoittamalla sarjaporttiin. Tässä hrjoituksessa ei ole tarkoitus muuttaa koodia, tai täysin ymmärtää sen toimintaa. Tärkeää on yrittää analysoida, mitä koodi saattaisi tehdä, ja miten omaa arvausta voisi testata.
Sarjaportti komennot
Sarjaporttia voidaan käyttää Arduinon käyttöliittymänä, jos halutaan esimerkiksi ohjata arduinoa tietokoneella pyörivästä ohjelmasta. Tällöin voidaan määrittää haluttuja avainsanoja, joilla arduinoa voi ohjata ja reagoida niihin.
char ja String tyypit
Aiemmin kurssilla on käsitelty erityyppisiä muuttujia int, float, boolean. Nämä kuvaavat joko numeroita, lukuja tai
totuusarvoja. Näiden lisäksi joskus tarvitaan myöskin kirjaimia ja merkkijonoja.
char
char-tyyppiset muuttujat voivat tallentaa yhden kirjaimen.
char kirjain = 'a';Tässä tallennetaan kirjain a muuttujaan nimeltä kirjain. Huomioitavaa on, että char-tyyppisten muuttujien kanssa käytetään
yksittäistä ' heittomerkkiä.
Harjoitus 5
Tässä harjoituksessa Arduino ottaa vastaan komennon 1, ja laittaa silloin LED valon päälle. Kuinka saisit Arduinon laittamaan
LED valon pois päältä komennolla 0?
String
String tyyppinen muuttuja voi puolestaan sisältää monta kirjainta peräkkäin, merkkijonon.
String lause = "Tämä on string tyyppinen muuttuja";Tässä tallennetaan kokonainen lause String-tyyppiseen muuttujaan. Huomioitavaa on, että muista muuttujatyypeistä poiketen
String kirjoitetaan aina isolla. Lisäksi muuttujan arvoa asetettaessa käytetään " tuplaheittomerkkejä.
readStringUntil
String-tyyppisen muuttujan lukeminen sarjaportista onnistuu Serial.readStringUntil()-funktiolla.
String komento = readStringUntil('\n');Serial.readStringUntil()-funktio ottaa parametrikseen char-tyyppisen muuttujan, eli kirjaimen, johon asti sarjaporttia
luetaan, ja tallentaa luetun merkkijonon muuttujaan. Kuten jo aiemmin on esitelty, \n on rivinvaihtoa tarkoittava erikoismekki.
String muuttujien vertailu
Usein halutaan lukea sarjaportista tiettyjä komentoja ja toimia niiden mukaan. Tällöin tarvitsee tarkistaa, mikä komento ollaan
saatu. Strin-tyyppisten muuttujien vertailuun voi käyttää == operaattoria.
String muuttuja = "moi";boolean totuus = muuttuja == "moi"; // Tämä on tosiHarjoitus 6
Tässä harjoituksessa Arduino ottaa vastaan komentona värin ja laittaa sen mukaisen LED-valon päälle. Keltainen komen to kuitenkin puuttuu vielä. Toteuta se.