18. LED juhtimine infrapuna-saatjaga ja -vastuvõtjaga
<- eelmine peatükk
järgmine peatükk ->
18.0. Seos eelmiste peatükkidega
Viiendas peatükis ühendasime LED ja surunupp-lüliti ning lülitilt lähtuva signaali abil juhtisime LED-i. LED roll on selles peatükis veidi teistsugune: kasutame LED-i sidepidamiseks. Infrapuna-signaali töötlemiseks rakendame teeki—kellegi poolt juba valmis tehtud ja vabalt alla laadimiseks võimaldatud tarkvara. Surunupp-lülitiga LED juhtimise osa kordamine selle peatüki eel annab hea tausta peatükis toimuva mõistmiseks.
18.1. Eesmärk ja selgitused
Eesmärgiks on uurida infrapuna-seadme töötamist. Arduinot kasutades koostame vooluahela, milles saame juhtida infrapuna-puldiga midagi lihtsat: näiteks tavalise LED süttimist-kustumist. Vaatleme infrapunakiirgust ning uurime ka teleripuldi tööd.
Selle peatüki järel õpilane oskab:
Jälgige peatükiks kuluvat aega; püüdke läbi teha vooluahelate kokkupanekut ja programmidega töötamist puudutav aines. Teooriat võib selgitada ka konstrueerimise ajal: näiteks rääkida esimestest LED-idest või Herscheli katsest päikesevalguse ja prismaga. Infrapuna-teemal on netist leida palju põnevat—ent sellega tutvumist saab jätta ka koduseks tööks.
18.2. Töövahendid:
Toite peale tuleb mõelda juba tundi ette valmistades. Teise USB kaabli kasutamise korral on hea, kui arvutil on rohkelt USB-võimalusi. Üldiselt on USB-pesasid ikka rohkem kui üks, ent võime seda enne tundi korra veel läbi mõelda—kuidas on hiire ühendamisega? Kas seejärel leidub veel piisaval arvul USB pesasid?
18.3. Peatüki tegevused:
18.3.1.Teooria infrapunakiirguse kohta
Infrapunaseks nimetatava elektromagnetkiirguse lainepikkus on suurem kui inimsilmale nähtaval valgusel ja väiksem kui raadiolainetel. Infrapunane kiirgus ei ole inimsilmale vahetult nähtav. Nimetus ’infra-punane’ tuleneb sellest, et antud elektromagnetkiirguse liigile iseloomulik spektriala jääb „allapoole“ inimsilmale nähtavat punast ala. Ladina keeles infra = allapoole jääv.
Ladina keelest tuleneva „infra-“ kasutamine aga viitab kujundlikkusele—„allpool“ ei ole rangelt võttes midagi, mis „asetseks madalamal“: infrapunane laineala on suurema lainepikkusega (700nm-1mm) kui nimisilmale nähtav spektrivahemik (400-700nm). Sagedustelt on infrapuna aga madalama sagedusega (430THz – 300GHz) kui nähtav valgus (790THz- 430THz).
Asetame nii nähtava valguse kui ka infrapuna konteksti:
Harjutus A
Uurige internetist, kuidas avastati infrapunane kiirgus: otsisõnadeks on „Herschel“, „discovery“, „infrared“, „prism“, „sunlight“.
Kuidas saaksite korrata seda eksperimenti oma praeguste teadmiste juures Arduinot kasutades? Kirjeldage Herscheli klassikalist katset ja uurige varasemate tundide põhjal võimalust ise Arduino abil sarnast katset läbi viia. Pange oma mõttekäik kirja. Seejärel mõelge, mis tingimustel katse Arduinoga õnnestuks, mis tingimustel aga luhtuks.
Harjutus B
Uurige internetist LED-ide valmistamise ajaloo kohta—millised olid üldse esimesed LED-id ja mis spektrivahemikus nad töötasid. Mis ajast on inimkonnal juba LED-id olemas? Kasutage näiteks otsisõnu „first“ „LED“ „history“
Võite lisada otsisõnadele ka ühe kuulsa nime: uurige järele, kes oli James R. Biard.
18.3.2.Infrapunaanduri vooluahela ühendamine
Vaatleme infrapuna-andurit: sellel on kolm „jalga“, mis kõik ühepikkused. Minu ees oleval anduril ei ole ühtegi markeeringut: milline tema kolmest viigust on GND? 5V? Milline on signaali edastav viik? Huupi ühendamist proovida ei tohi, sest nii kaotame vaid aega; lisaks võime rikkuda oma töövahendi. Ent ma ei tea tõesti, mis on õige kombinatsioon… seega asun internetist vastust otsima.
Harjutus D
Tehke internetiotsing otsisõnadega „infrared sensor pin connect“. Viik on inglise keeles pin. Vaadelge internetiotsingu tulemustes avanevat valikut. Kui valikus on link näiteks Adafruit kodulehele—siis klikkige sellel. Uurige allikate usaldusväärsuse kohta ka õpetaja arvamust.
Adafruit kodulehelt näen, et viik 1 on signaali tarvis, viik 2 on GND, viik 3 aga 3-5V. Kui aga ikka veel esineb kahtlus, teen selgeks oma anduri toote-tähise ning surfan näiteks otsisõnade „infrared adafruit sensor TSOP datasheet“ abil välja tooteinfo lehe (inglise keeles datasheet). Uurin https://cdn-shop.adafruit.com/datasheets/tsop382.pdf .
NB!
Esimest viiku asun antud juhul loendama paremalt vasakule; seejuures ei tohi andur olla minu poole „seljaga“!
Kui anduri „selja“ leidmisega hätta jääte, siis õpetaja aitab. Tõenäoliselt ta juba ka selgitas: kuulake õpetajat tähelepanuga! Anduri „selg“ on oluline tähele panna ka ülejäänud peatüki-osades—sest üldjuhul andur võtab signaale vastu pigem ikka „näoga“ infrapunast kiirgava signaaliallika poole olles.
Märksõnu aga võite leida veel—otsige näiteks „IR receiver“ abil. Lisada saate otsingusse ka märksõnu „wiring“, „Arduino“.
Peale selguse saamist viikude ühendamise osas saame kokku panna Arduinost ja infrapuna-andurist koosneva vooluahela.
Ettenägelik on selles ülesandes siiski kasutada ka maketeerimislauda—nimelt selleks, a) et meie andur ei kiiguks juhtmete otsas vaid oleks piisavalt kindlalt fikseeritav—nii on vähem võimalust, et meie saadetud infrapuna-signaal kaotsi läheb. Ning b) hiljem lisame oma vooluahelale ka märgutuled: et üldse aru saada, kas midagi toimub, peame lisama midagi, mis võimaldab toimuvat märgata. (Me ju oma silmaga infrapunakiirgust ei näe.)
On siiski võimalus ka „oma silmaga näha“—nimelt läbi mobiiltelefoni infrapuna-LED-i jälgides näeme ekraanilt, et LED toimib. Ent see on suhteliselt kohmakas meetod ja seega jäägu see pigem täiendavaks kontrollimiseks.
Allpool toodud näidisprogrammidesse on sisse kirjutatud ka Arduino Serial monitori kasutamise võimalus. Ent Serial monitor ei tööta kui viime vooluahela mitte-USB-toitele. Seega on hea toimuva kohta infot saada maketeerimislauale ühendatud kontroll-LED-idelt, mis on pandud signaalile reageerima sama moodi kui seda teeb infrapuna-LED. Mõtleme LED vilgutamise harjutusele, see on ka põnev läbi teha infrapuna-LED-iga.
Mõtleme ette selle peale, et ühe vooluahela abil me peame saama saata signaali takistamatult infrapuna-andurile, mis asub teises vooluahelas (eraldi kaks maketeerimislauda). Seega Arduinoga ühendamist võimaldavad juhtmed on tark kinnitada nii, et need ei jääks infrapunasignaali lugevat andurit signaali eest „varjama“. Kirjutuslaual tehtud katses ei pruugi anduri osaline varjujäämine veel kriitiliseks osutuda, ent üritame siiski natuke võimaluste rohkuse peale ette mõelda.
Harjutus E
Selgitage katseliselt välja, mis juhtudel andur enam infrapunasignaali kätte ei saa. Kus jookseb piir? Kirjeldage oma mõttekäiku ja katset.
Mõtleme ka korra voltide peale. Milline oleks mõistlik pinge infrapuna-anduri toiteks? Uurime teema kohta internetist. (Näiteks Adafruit1 kodulehelt võime leida, et toiteks on võimalik 3-5V). Kasutame seega Arduinol asuvat 3.3V markeeringuga toite-viiku. Milleks tarvitada suuremat pinget, kui saame hakkama ka väiksema pingega? Ent kui oleme peatüki lõppedes kõik tööle saanud ja seejärel kodus ka läbi mänginud—võib-olla siis on huvitav ka proovida 5v pingega? Mis võiks sellest muutuda? Mõtleme ka infrapuna-LED peale—see on ju LED: iga LED võib liigse pinge korral läbi põleda.
1 https://www.adafruit.com/product/157 Tooteinfo TSOP382 kohta: https://cdn-shop.adafruit.com/datasheets/tsop382.pdf 2.5-5.5V
18.3.4. Programm, millega saame teada teleripuldi nuppude koode
Kui meil ei ole veel Arduino IDE valikusse laetud teeki IRremote.h, siis võtame ette selle internetist hankimise. Arduino IDE abil laeme eeltoodud vooluahelasse ühendatud Arduinole järgmise programmiteksti.
#include <IRremote.h> int IRsensoriVIIK = 10; // deklareerime saatja ja näitude tarvis objektid: IRrecv infrapunaVASTUVOTJA(IRsensoriVIIK); /*lisame anduri ühendamise viigunumbri*/ decode_results IRnaidud; void setup(){ Serial.begin(9600); // enableIRIn = aktiviseerime infrapunaVASTUVOTJA infrapunaVASTUVOTJA.enableIRIn(); } void loop(){ if (infrapunaVASTUVOTJA.decode(&IRnaidud)){ Serial.println("Sinu vajutatud nupu heksadetsimaalkood on: "); Serial.println(IRnaidud.value, HEX); Serial.println(" "); infrapunaVASTUVOTJA.resume(); } delay (1000); }
Ja nüüd saame vaadelda teleripuldi heksadetsimaal-koode. Mängime natuke—veendume, et töötab kenasti. Kas töötab piisavalt mugavalt? Et oleks lihtsam jälgida näite, siis on vahel vaja teha eelnenud infost puhtaks Serial monitori ekraan. Kuhu vajutad, et see puhtaks teha? Serial monitori ekraani saame ka suuremaks venitada.
Harjutus F
- Käivitame edukalt sooritatud Arduino-programmi laadimise järel Serial monitori.
- Seejärel võtame televiisori puldi ja suuname selle oma infrapunatundliku anduri peale: vajutame televiisori puldil sisse näiteks klahvi markeeringuga „1“.
- Loeme Serial monitori ekraanilt nupu „1“ koodi.
- Kordame protseduuri, veendume, et see on just selle nupu „1“ kood ja paneme kontrollitud info kirja.
Seda koodi läheb meil kohe vaja järgmises programmitäienduses, mille eesmärk on antud teleripuldi nuppu panna juhtima meie vooluahelas tavalise LED-märgutule vilgutamist.
Teeme eeltoodu veel korra läbi, saame niiviisi teada ja kirja ka näiteks nupu „2“ koodi. Vajame hiljem veel vähemalt ühte koodi.
Joonisel on toodud minu poolt seda tundi läbi mängides avanev ekraani-pilt.
Teeme sama ka mõne muu klahviga: võite korrata protseduuri näiteks klahviga „3“, ent valige puldilt välja midagi huvitavamat.
Näeme, et klahvidelt loetavad heksadetsimaal-koodid eristuvad selgelt.
NB! Erinevad televiisoripuldi süsteemid kasutavad erinevaid koode. Pange märkmeid tehes kirja ka see, mis puldiga on tehtud Teie koodid. Kui juhuslikult üritate mingis muus süsteemis töötava puldiga oma skeemi hiljem demonstreerida, siis kirjapandud info detailsus aitab kiirendada tööd.
Harjutus G
Lisame oma skeemile ja programmile ka märgutule—kui vajutate teleripuldil Teie poolt määratud koodiga seotud nuppu, siis annab meile igast registreeritud nupuvajutusest märku kontroll-LED süttimine, samas on vastav kood ka lugeda Serial monitori ekraanilt.
Tuletame meelde, et kolmandas peatükis ühendasime LED-i. Pidime midagi ka programmis selle LED-i kohta kirja panema; valisime LED juhtimiseks sobiva viigu; määrasime selle viigu void setup () osas pinMode abil OUTPUT-iks. Seejärel määrasime HIGH ja LOW olekud.
Toome ära programmi—pange kokku programmis toodut arvestav vooluahel.
#include <IRremote.h> int IRsensoriVIIK = 10; int rohelineLED = 8; /*Lisame rohelise LED*/ // deklareerime IRsensori ja näitude tarvis objektid: IRrecv infrapunaVASTUVOTJA(IRsensoriVIIK); decode_results IRnaidud; void setup(){ pinMode(rohelineLED, OUTPUT); /*Lisame pinMode--OUTPUT !*/ Serial.begin(9600); // enableIRIn = aktiviseerime infrapunaVASTUVOTJA infrapunaVASTUVOTJA.enableIRIn(); } void loop(){ if (infrapunaVASTUVOTJA.decode(&IRnaidud)){ digitalWrite (rohelineLED, HIGH); /*rohelineLED HIGH*/ delay(1000); /*rohelineLED särab sekundi*/ digitalWrite (rohelineLED, LOW); /*rohelineLED LOW*/ Serial.println("Sinu vajutatud nupu heksadetsimaalkood on: "); Serial.println(IRnaidud.value, HEX); Serial.println(" "); infrapunaVASTUVOTJA.resume(); } delay (1000); }
Harjutus H
Mis saab siis, kui oleme andnud funktsioonile delay() erinevad argumendi-väärtused LED helendamise kestuseks ning kahe Serial monitori üleskirjutuse tarvis? Katsetage! Millal muutub programmitervik televiisoripuldi näitude uurimist segavaks? Miks peab mõlema delay()osas olema kooskõla?
Korrigeerige funktsiooni delay() argumendi väärtused endale mugavaks.
Uurige, kas töötab kenasti iga nupuvajutusega: Serial monitor peab ütlema HEX koodi ning LED annab märku, et vajutus puldile oli edukas.
Pange oma kogemus kirja.
18.3.5. Muudame veel programmi:
a) Lisame ka teise märgutule. Kokku kaks—minu näites roheline ja punane LED. b) Määrame kummagi märgutule reageerima vaid konkreetse puldi-nupu vajutuse peale:
Minul Samsungi pult ja kasutusse lähevad nupud „1“ (heksadetsimaal-koodiga E0E020DF) ja „2“ (heksadetsimaal-koodiga E0E0A05F).
Kas panite oma koodid kirja? Kui ei pannud, siis käivitage uuesti heksadetsimaal-koodide määramise programm ja dokumenteerige vajalik info.
Näidisprogrammi kahe erineva LED juhtimiseks saate siit:
#include <IRremote.h> /*Viigud paika:*/ int IRsensoriVIIK = 10; int rohelineLED = 8; int punaneLED = 7; /*loome objektid:*/ IRrecv infrapunaVASTUVOTJA(IRsensoriVIIK); decode_results IRnaidud; /*ühekordsed tegevused käivitamisel:*/ void setup(){ pinMode(rohelineLED, OUTPUT); pinMode(punaneLED, OUTPUT); Serial.begin(9600); /* järgnevas kasutatud 'enableIRIn' tähendab, et aktiviseerime objekti infrapunaVASTUVOTJA*/ infrapunaVASTUVOTJA.enableIRIn(); } /*tsüklisse jäävad tegevused*/ void loop(){ if (infrapunaVASTUVOTJA.decode(&IRnaidud)){ /*tingimus--kui vastuvõtjale tuleb signaal*/ switch(IRnaidud.value) {/* switch on võimalus valida alltoodud case-ide vahel: */ /*NUPP 1 ja Roheline LED:*/ case 0xE0E020DF: /* ...määrame, et asi toimib vaid siis, kui vajutatakse selle HEX koodiga nuppu*/ /* vaadake tähelepanelikult, mida kirjutasime programmitekstis veel klahvi "1" HEX koodile? HEX kood (Samsung nupp 1): 0x + HEXkood!*/ digitalWrite (rohelineLED, HIGH); delay(1000); digitalWrite (rohelineLED, LOW); Serial.println("Sinu vajutatud nupu 1 heksadetsimaalkood on: "); Serial.println(IRnaidud.value, HEX); Serial.println("nupu 1 vajutamisel säras roheline LED"); Serial.println(" "); break; /*lõpetame täitmise*/ /*NUPP 2 ja Punane LED:*/ case 0xE0E0A05F: /* HEX kood (Samsung nupp 2)*/ /* 0x + HEXkood!*/ digitalWrite (punaneLED, HIGH); delay(1000); digitalWrite (punaneLED, LOW); Serial.println("Vajutasid nuppu 2, selle heksadetsimaalkood on: "); Serial.println(IRnaidud.value, HEX); Serial.println("punane LED vastab nupule 2 "); Serial.println(" "); break; /*lõpetame täitmise*/ } infrapunaVASTUVOTJA.resume (); /*oluline, et siirdume algolekusse tagasi. katsetage, mis juhtub, kui seda ei pane! Kas jääb tsüklisse?*/ delay (1000); /* anname süsteemile aega enne järgmist tsüklit */ } }
Kuigi olete suutelised skeemi selle programmi järgi iseseisvalt kokku panema, igaks juhuks siiski visualiseerimiseks anname juurde ka joonise.
Ent teeme vooluahela veidi teistsuguse: oleme inspiratsiooniks sisse pannud ka kondensaatori (inglise keeles capacitor) ja takisti. Eesmärk on vooluahelas kõikumisi vaos hoida!
NB!
Infoks infrapuna-anduri ühendamise kohta: kondensaator on 5 μF (mikro-farad); takisti signaalviigult aga on 5kΩ (kilo-oom).
Põhimõtteliselt aga ei ole katki midagi, kui iseseisvalt eelistate teha andurile lihtsama ühenduse—nii nagu selles peatükis eespool näitasime. Vajadusel uurige viiteid selle teema algusest.
Kui lihtsam ühendusskeem (mille kohta arvan, et see peaks intuitiivselt kerge koostada olema) siiski kergeks ei osutu, siis uurige täiendavalt:
a) eespool saate ka taas üle kontrollida, et kuidas paiknesid ühendused infrapunaanduril.
b) Võite internetist võtta lahti ka vastava tootekirjelduse, mille leidsime Adafruit kodulehelt.
c) Uurige ka eelmistes tundides toodud vooluahela näidiseid. Vaadake näiteks programmi esimeses osas andurite ja LED-idega tehtut.
Tegelikult on Teie teadmised piisavad, vahel vaja lihtsalt üle korrata. Mina toimisin seda peatükki kirjutades ju täpselt sama moodi—uurisin igaks juhuks üle, et mida ma eelmistes peatükkides kirja olen pannud.
NB! Kuidas valite takisteid? Jälgige oma takistikomplektile kirja pandut—saate vaadelda ka erineva takistusega takistite markeeringuid. Uurige triipe—kas märkate erinevusi? Kui triipe ei usalda—näiteks need on udusevõitu ja luupi ei ole käepärast, siis kas kasutate multimeetrit?
Harjutus I
Peale vooluahela koostamist ja programmi Arduino IDE-ga käivitamist mängige programmitekstiga: katsetage ja tehke märkmeid!
Kodutöö tarvis mõtlemiseks
Võime lisada veel LED-isid ja teleripuldinuppe või näiteks panna ka olemasolevaid LED-isid täiendavalt kasutusse võetud nuppudega teistmoodi mustriga tööle. Mõelge mingi huvitava kombinatsiooni peale, pange idee kirja, seejärel realiseerige see. Lõpuks kirjeldage, tehke fotosid.
18.3.7. Infrapunase LED-iga signaali edastamine
18.3.7.1. Eelmise süsteemi (infrapuna-anduri ja kahe märgu-LED-iga) jätame alles, sest sellega saame püüda kinni järgmisena kokkupandavalt uuelt süsteemilt tuleva infrapuna-signaali.
Võime eelmise infrapuna-vastuvõtja süsteemi nüüd lahti ühendada USB kaablist: kui kõik toimib, siis me ei soovi seda programmi üle kirjutada. Saame kontrollida, kas töötab autonoomsel toitel.
Autonoomsele toitele viidud Arduinot programmeerida ei anna, me ei näe ka Serial monitori näite, ent meil on ju kaks märgu-LED-i: kontrollime teleripuldiga, kas autonoomsel toitel meie skeem ikka endiselt töötab. Minul LED-id näitavad, et toimib küll—Serial monitorilt aga toimimise kohta enam infot ei leia.
Teeme järelduse, et eelnevalt programmeeritud Arduino saab ka ilma USB juhtmeta oma vooluahela juhtimisega hakkama.
Võtame nüüd välja selleks peatükiks varutud teise Arduino ja muu topelt-varustuse. USB kaablit läheb vaja nüüd teise Arduino-skeemi programmiga varustamiseks.
18.3.7.2. Paneme kokku infrapuna-saatja vooluahela eraldi Arduinole:
Meenutame kursuse algusest 4. peatükki, milles ühendasime kokku vooluahela nii, et saime surunupp-lüliti tüüpi (push-button tüüpi) lülitiga juhtida LED-i. Rääkisime ka sellest, et lülitiga me anname signaali; signaalile oleme aga programmeerinud sisu.
Tegemist ei ole mitte niivõrd vooluahela katkestamise või taas-ühendamisega—sisse-välja lülitamisega—kuivõrd tegu on kahe signaali andmisega: 0 ja 1.
Nii nullile kui ka ühele saime anda sisu. Ühele andsime sisuks LED-idele käskluse andmise—kummalegi LED-ile oma. Teisele aga me sisu ei annagi: seega ei tehtagi midagi, kui lüliti on asendis „mitte-välja-lülitatud“ vt if (lylitiASEND != LOW) Sama tulemuse saaksime ka siis, kui ütleksime, et lüliti on asendis „sisse-lülitatud“
vt if (lylitiASEND == HIGH).
Meelde jätmiseks:
== märgib programmeerimiskeeltes samasust ning != samasuse eitust.
!-sümboli tähendus on eitamine. (vt 13. peatükist)
Kas näete jooniselt midagi väga sarnast 5. peatükis käsitletud lüliti teemaga?
Järgnevalt käivitage programm:
#include <IRremote.h> int LYLITI = 7; int kontroll_LED = 11; int lylitiASEND = 0; /* lylitiASEND = 0--tähendab algpositsiooni--välja lülitatud */ /* loome infrapunaSAATJA objekti*/ IRsend infrapunaSAATJA; void setup() { pinMode(LYLITI, INPUT); pinMode(kontroll_LED, OUTPUT); } void loop() { // loeme infot,mille saame lüliti asendist lylitiASEND = digitalRead(LYLITI); /* kui lyliti sisse surutud asendis, siis saadab korraldused*/ if (lylitiASEND != LOW) { /*võib olla ka == HIGH */ infrapunaSAATJA.sendNEC(0xE0E0A05F, 32); /* meie puldi nupp "1" hex-kood */ digitalWrite (kontroll_LED, HIGH); delay(1000); digitalWrite (kontroll_LED, LOW); } /* et korra süsteemile pausi võimaldada -- delay */ delay(200); }
1) Tõehetk peaks nüüd aga välja nägema nii:
2) Asetame skeemid kõrvuti—mõlemal on olemas toide, mõlemad toimivad.
3) Seejärel vajutame lülitit—palja silmaga me ei näe, kas infrapuna-LED kiirgab meie antud heksadetsimaal-koodiga infrapunakiirgust või mitte, ent lülitile vajutamise kohta saame infot samal skeemil asuvalt kontroll-LED-ilt.
4) Kui nüüd infrapuna-LED saatis välja signaali, mis vastas meie eelmisele skeemile lisatud kahest heksadetsimaal-koodist ühele, siis süttis vastav kontroll-LED teisel skeemil.
5) Kui seda aga ei toimunud, on võimalus taas uurida vea põhjust. Soovitame ka vaadata läbi mobiiltelefoni kaamera infrapuna-LED-i: kui see nupule vajutuse järel näitab mobiili-ekraanil valgust, siis meie poolt teisena ehitatud skeemis ühendused toimivad. Sel juhul otsime viga kas programmist või meie poolt esimesena ehitatud skeemist ja selle programmist.
NB!
Mobiiltelefoni kaamera võimaldab näha infrapuna-anduri toimimist—näeme seda aga mitte-infrapunase valgusena. Infrapunast laineala inimsilm ei näe.
Harjutus J
Tehke omast vabast fantaasiast mingi täiustus. Kas näiteks võiks olla veel mingeid märgu-LED-isid? Näiteks mina vahel tahaks selle vahva koodide saatmise mängu juures väga midagi, mis ütleks, kas kumbki skeem omab üldse toidet või ei oma. Vahel ma olen hajameelne, automaatselt mulle süsteemi seisundist märku andev LED võimaldaks mul mõelda millelegi muule.
Kas hajameelsust annab kuidagi „ravida“ täiendava kontroll-LED-i lisamisega?
18.4. Kodutöö
Korrake üle peatüki materjal ning tehke midagi oma fantaasia järgi.
Boonuspunkte saab eelmistest peatükkidest võetud ideede kasutamise eest.
18.5. Selgitus selle kohta, miks uurin netist õiget ühendamist
Mitu järjestus-kombinatsiooni on võimalik kokku panna kolme elemendiga hulga liikmetest?
Vaatame: 123, 132, 213, 231, 312, 321.
Tegelikult aitab meid siinkohal matemaatika paremini kui kombinatsioonide ükshaaval väljakirjutamine: vaadake kiirelt internetist järgi, mis on faktoriaal.
Faktoriaali abil saame leida n elemendist koosneva hulga elementide võimalike paigutuste arvu. Kolme elemendi puhul paneme selle kirja nii: 3! = 3 x 2 x 1 = 6.
Hüüumärk number kolme järel näitab, et arvutame number kolme faktoriaali. Kolme viigu korral on seega kuus võimalust viikusid järjestada. Kui üks võimalustest peaks olema õige, siis mitu võimalust on meil eksida? Aga kui viikusid oleks nii palju kui oli LCD 16x2 ekraanil? Huupi ühendamine on ikka ülimalt väsitav ettevõtmine. Huupi ühendamine võib meie riistvara rikkuda jäädavalt.