Prisijungę
We have 6 guests and no members online
Skaitmeninių signalų priėmimas
Pažiūrėkime į signalus iš kitos pusės. Jums sėkmingai pavyko generuoti skaitmeninius ir analoginius įšėjimus. Sekantis žingsnis būtų signalų priėmimas. Tai jungtukai ir mygtukai, kad jūs galėtume sąveikauti su savo projektu realiuoju laiku.
Pradėkime nuo paprasto pavyzdžio. Sakykime, kad mes norime sukurti grandinę, kurioje LED'as pradėtų šviesti paspaudus mygtuką. Paleidus mygtuką, užgestų. Pats darbas nėra sudėtingas. Mums reikės šių dalių:
1. Mikrokontrolerio.
2. Raudono LED'o.
3. 330 omų varžos.
4. Mygtuko.
5. Montažinės plokštės.
6. Laidų.
Žemiau matote grandinės pavyzdį. Sumontuokite ją.
Dabar mums reikės kodo. Žemiau pateiktas pavyzdys.
Kaip matote, kode yra keletas naujų dalykų. Truputį vėliau juos aptarsime.
Kaip matote žemiau mes turime grandinę, kurią jau rinkome. Ji yra papildyta mygtuku ir varža. Prieš pradedant rašyti kodą, kuris priims mygtuko reikšmes, labai svarbu suprasti kam reikalinga papildoma varža (angl. pagal paskirtį ji vadinama pulldown resistor) šioje grandinėje. Beveik visi skaitmeniniai įėjimai naudoja papildomas varžas (angl. vadinamas pulldown ir pullup), kad nustatyti numatytąją įėjimo būseną. Tarkim dabartinėje grandinėje mes nenaudotume 10 kiloomų varžos. Jeigu mes mygtuką paspaustume, tai būtų akivaizdus signalas HIGH. Tačiau, kas įvyktų jeigu mes mygtuko nespaustume? Įėjimas suprastų, kad yra prijungtas prie nieko, t. y. plaukiojantis (floating). Kadangi fiziškai jis neprijungtas nei prie 0V nei prie 5V, skaitymas gali duoti netikėtų rezultatų dėl elektros triukšmų gretimai esančių pin‘ų. Tokiu būdu mes galime gauti šokinėjančias reikšmes tarp HIGH ir LOW. Kad to išvengtume mums būtinai reikia pulldown tipo varžos, kaip parodyta schemoje.
Dabar jau aišku, kad kai mygtukas nepaspaustas, jis yra prijungtas prie įžeminimo per 10 kiloomų varžą. Nors varža riboja srovės tekėjimą, to užtenka, kad pin‘as gautų loginę reikšmę. 10 kiloomų yra įprasta reikšmė pulldown tipo varžoms. Didesnės reikšmės laikomos silpnomis pulldown varžomis, o mažesnės reikšmės – stipriomis pulldown varžomis, nes srovei lengviau tekėti link įžeminimo. Kai mygtukas paspaustas, įėjimo pin‘as tampa tiesiogiai prijungtas per mygtuką prie 5V.
Prisiminus Omo dėsnį, galime teigti, kad srovė grandinėje teka mažiausio pasipriešinimo kryptimi. Šiuo atveju srovė tekės mygtuku ir bus sugeneruota HIGH reikšmė įėjimimo pin‘e, nes šis kelias yra mažiausio pasipriešimo.
Pastaba. Galima naudoti ne pulldown, bet pullup varžą, kuri prijungta prie 5V, o ne prie įžeminimo. Šiuo atveju įėjimo pin‘as skaitys HIGH kai mygtukas bus atleistas ir LOW kai mygtukas bus paspaustas.
Abiejų tipų varžos (pulldown ir pullup) yra labai svarbios, nes jos užtikrina, kad nebūtų užtrumpinta grandinė paspaudus mygtuką, bei įėjimo pin‘as neliktų „plaukiojimo“ būsenoje.
Dabar atėjo laikas parašyti programą šiai grandinei. Pirmame pavyzdyje jums reikės įjungti LED‘ą kai mygtukas paspaustas ir išjungti kai atleistas.
Atkreipkite dėmesį, kad kode atsirado naujovių. Tai digitalRead ir if/else. Taip pat pradėjome naudoti const int (konstanta, tai dydis kuris negali kisti). Toliau kode aprašomas mygtuko pin‘as kaip įėjimas. Tai nėra labai būtina, nes pagal nutylėjimą, visi pin‘ai yra įėjimai. Bet kokiu būdu parašytas kodas yra pilnai aprašytas. digitalRead() skaito įėjimo reikšmę. Šiuo konkrečiu atveju tai BUTTON pin‘o reikšmę. Jeigu mygtukas paspaustas, digitalRead() grąžina reikšmę HIGH arba 1. Jeigu nepaspaustas, tai grąžina LOW arba 0. Jeigu mes tai įdedam į sąlygos sakinį if(), mes tikriname pin‘o būseną ir vykdome atitinkamus veiksmus jeigu sąlyga yra tenkinama. Šiuo atveju if() sąlygas tikrina kokią reikšmę grąžina digittalRead() ir ją lygina su LOW. Ženklas == nuo = skiriasi tuo, kad čia yra lyginamos abi lygybės pusės viena su kita. Jeigu sąlyga bus tenkinama (mygtukas nepaspaustas), įvyks riestiniuose skliausteliuose esantis kodas. Ir LED‘o būsena bus nurodyta LOW. Jeigu sąlyga bus netenkinama, tada programa vykdys else dalyje aprašytus veiksmus ir nustatys LED‘o būseną HIGH.
Programa baigta, dabar tikrinam kaip veikia mūsų grandinė su šiuo kodu.
Tiems kam sunkiau su grandinės surinkimu
Žemiau pateikta grandinė su Freaduino. Mygtuką galima jungti į A0 pin'ą. A0 pin'as skirtas analoginiams signalams, todėl galime kol kas jungti, kad ir į 2 pin'ą.
Kodas panašus kaip ir praeitos grandinės.
Papildomos užduotys.
1. Pajunkite 6 bitų LED'ų modulį. Parašykite programą, kad švieselės tarsi lėktų viena į kitą, atsimuštų ir lėktų atgal.
2. Papildykite programą taip, kad keistųsi susidūrimo vieta.