...
Code Block language cpp collapse true /*lukujen erotteleminen ASCII-coodatusta merkkijonosta parseInt() funktiolla.*/ // LED pinni: const int lediPinni = 13; void setup() { // alustetaan sarjaliikenne Serial.begin(9600); } void loop() { // onko sarjaporttia vapaana while (Serial.available() > 0) { // haetaan seuraava kokonaisluku merkkijonosta int EkaArvo = Serial.parseInt(); // ja uudelleen int TokaArvo = Serial.parseInt(); // ja vielä yksi int KolmasArvo = Serial.parseInt(); // etsitään \n eli newline, tämä on viestin loppu if (Serial.read() == '\n') { // rajoitetaan arvo EkaArvo = constrain(EkaArvo, 0, 255); analogWrite(lediPinni, EkaArvo); Serial.print(EkaArvo); Serial.print(" "); Serial.print(TokaArvo); Serial.print(" "); Serial.println(KolmasArvo); } } }
Lisää edelliseen ohjelmaan toinen ledi ja "saturoi" sille vietävä arvo arvoon 255. Näytä arvo ledin kirkkautena.
Tee ohjelma, joka lukee sarjaportilta enimmillään neljä numeroa ja kun on annettu A, viedään luku muuttujaan. Tee ohjelmaan tarkastus, ettei hyväksytä muita kuin numeroja (kts. esimerkki CharacterAnalysis) esim. isDigit(merkki) ja ettei syötettäviä numeroita ole yli neljää. Lopuksi tarkasta, ettei luku ole yli 1024. Jos kaikki ehdot toteutuvat, talleta sarjaportilta tullut arvo muuttujaan. 6p
Tee edellinen tehtävä siten, että luet kaikki merkit merkkijonomuuttujaan String jono ja muutat arvon String luokan funktiolla stringToInt kokonaisluvuksi. 3p
Tee ohjelma, joka säätää aseklmoottorin nopeuta. Kts. ohjeitA http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/
Tee ohjelma, joka lukee kaksi analogia-arvoa ja saturoi ensimmäisen arvon suurimmillaan arvoon 100 ja skaalaa toisen arvon 0...1024 -> 0...200. Tämän jälkeen arvot lasketaan yhteen. Summa saturoidaan välille 0...255 ja laitetaan lediin 13. 4p
Tee liikennevalot Arduinolla 1 autoille ja 1 jalankulkijoille (etsi apuja googlella, esim. täältä) Tee kytkennät koekytkentälevylle. 6p
Lisää kytkentään potentiometri, jolla säädät autoille määräytyvää vihreää aikaa. 2p
Lisää kytkentään nappi, jolla jalankulkijat voivat pyytää valojen vaihtoa. 2p
Simuloi tien magneettikierukkaa napilla, siten että jalankulkijoille on aina vihreä valo, kun autoa ei ole tulossa. 2p
Tee Arduinolle ohjelmallinen laskuri, joka laskee dig.tulon 1 nousevia reunoja. 2p
Muuta tehtävää siten, että estetään kosketinvärähtelyjen laskeminen. Eil kaikki kytkennät jotka tapahtuvat 0.2 sekunnin aikana ensimmäisestä kytkennästä pitää estää.
2pKytke Arduinoon pulssianturi(simuloi kahdella napilla) ja tee ohjelma, joka laskee ylöspäin kun anturia pyöritetään myötäpäivään ja vastapäivään pyöritettäessä laskurin arvoa vähennetään. 2p . Tee ohjelmaan lisäys, joka tarkastaa, että molemmat pulssianturijn kanavat tulevat oikeassa järjestyksessä. Ohjelma ei saa pysähtyä odottelemaan toista kanavaa 5p.
Lisää ohjelmaan ominaisuus, joka nollaa laskurin, kun anturin indeksipulssi on tilassa 1 ja kotiasemapulssi on tosi. 2 p.
Suunnittele yksinkertainen polttoaineen suihkutusjärjestelmä. Järjestelmä sisältää lambda-säädön lambda control tuloina ovat pyyntö, lämpötila -30+120 astetta Celsiusta ja lambda-arvo 0...5 V ja lähtöinä kaasuläpän 0..255 ja polttoainesuihkutuksen asema(määrä) 0..255 . Demoa järjestelmää potentiometrilla ja ja lähtöjä kahdella ledillä. Kun lämpötila on alle 80 astetta, rikastetaan polttoaineen syöttöä. Jos labda-arvo on välillä 0..0,5 V tai 4,5...5 V, ollaan virhetilassa. 2,5 V on oike seos ja alle 2,5 V rikkas seos. Jos lämpötila on yli 100 astetta, annetaan hälytys ledillä. 6 p.
Liitä edelliseen tehtävään servomoottori säätämään kaasuläppää. 5 p