7 minute read

BBC micro:bit [39]

Poštovani čitatelji, u prošlom ste nastavku serije kodirali program minijaturnog kalkulatora kojim je moguće računati osnovne matematičke operacije (zbrajanje, oduzimanje, množenje i dijeljenje). Kao što ste mogli primijetiti, minijaturni kalkulator prihvaća samo jednoznamenkaste brojeve. Radi toga predloženo vam je da prepravite program tako da kalkulator može prihvatiti više znamenki. U nastavku proučite ponuđeno rješenje koje je iz prostornih razloga rascjepkano u više slika.

Prvi dio, Slika 39.1.

Advertisement

Kako je vidljivo, skeniranje tipkovnice nije isto kao u programu iz prošlog broja ABC tehnike. Naime, na početku programa definirana je prazna lista prvi_broj=[] u koju će se upisivati sve znamenke koje korisnik bude tipkao. Od ranije znate da BBC micro:bit kodiran MicroPythonom skenira tipkovnicu velikom brzinom. Skeniranje je toliko brzo da korisnik ne uspijeva reagirati i otpustiti tipku, a da se raspoloživa memorija BBC micro:bita u potpunosti ne ispuni jednim te istim brojem. Radi toga skeniranje treba zaustaviti, i to do trenutka kada korisnik ne makne prst s tipke (to je slično situaciji kada ste koristili tipku A (ili B) s naredbom button_a.was_pressed(), pogledajte ABC tehnike broj 661). Kako se to postiže? Za vrijeme skeniranja tipkovnice, u trenutku kada korisnik pritisne neku tipku (na primjer tipku 7) iskazuje se promjenljiva b=1. Nakon toga pokreće se nova uvjetovana beskonačna petlja while b==1 koja ne radi ništa osim što čeka promjenu stanja određenog digitalnog izlaza koji će, kad tipka bude otpuštena, promijeniti vrijednost promjenljive na b=0 (na primjeru tipke s brojem 7 čeka se promjena stanja kod b=pin14.read_digital()). Drugim riječima, u trenutku kad korisnik otpusti određenu tipku ispunjava se uvjet if

Radije se polako i bez naglih pokreta udaljite od nje. Provjeravajte mjesta u prirodi prije nego na njih sjednete i izbjegavajte gustiš!

Ivana Janković, Croatian Wildlife Research and Conservation Society b==0 koji naredbom break zaustavlja izvođenje uvjetovane beskonačne petlje while b==1 te predaje nadzor petlji while a<1 koja nastavlja sa skeniranjem tipkovnice. Izuzetak je tipka za brisanje CE kod koje je kôd isti onome iz prošlog broja ABC tehnike

Iz prostornih razloga neće biti slikovno prikazane promjene koda za skeniranje tipkovnice kod definicije funkcije def unos_prvi_broj() u kojoj će se skenirati drugi, treći i četvrti stupac za tipke 2, 5, 8, 0, 3, 6, 9, =, /, *, -, i +, ali slijedi opis onoga što morate promijeniti.

Dok za tipke =, /, *, - i + važi isto kao za tipku CE gdje nema promjene koda, za ostale navedene tipke s brojevima morate sami promijeniti kôd vođen uzorom prikazanim na Slici 39.1. Budite pažljivi, te se promjene po izmijenjenoj numeraciji prostiru u skokovima od programske linije 12 do programske linije 96.

Drugi dio, Slika 39.2.

Slika 39.2. Nastavak programa gdje se vidi dio definicije funkcije def unos_drugi_broj() u kojoj će se skenirati četvrti stupac matrične tipkovnice, tipka 3, tipka 6, tipka 9 i tipka =

Sve dosad rečeno za funkciju def unos_prvi_ broj() važi i za funkciju def unos_drugi_broj()

Naime, na početku je definirana prazna lista drugi_broj=[] u koju će se upisivati sve znamenke koje korisnik bude tipkao. Na vama je da promijenite kôd za tipke prvog stupca, 1, 4, 7, drugog stupca, 2, 5, 8, 0, trećeg stupca, 3, 6, i 9, dok za tipku = nema promjene koda. Budite pažljivi, te se promjene prostiru po izmijenjenoj numeraciji u skokovima od programske linije 126 do programske linije 209.

Treći dio, Slika 39.3.

I ova je funkcija pretrpjela promjene, a odnose se na nazive iskazanih promjenljivih.

Četvrti dio, Slika 39.4.

Ovo je glavni dio programa gdje treba skrenuti pozornost na ulančavanje i pretvaranje znamenki prvog i drugog broja. Naime, brojevi unutar listi, prvi_broj=[] i drugi_broj=[] su stringe. Nakon ulančavanja treba ih pretvoriti u brojeve naredbom “int” kako bi se poslije u funkciji def rezultat() mogle izvršiti potrebne matematičke operacije.

Kod programskih linija 237 i 238 piše da je to mjesto gdje se treba odlučiti koliko će znamenki kalkulator prihvaćati. Ako prepišete ovo što je vidljivo na Slici 39.4., minijaturni kalkulator će prihvatiti samo tri znamenke. Standardni kalkulatori obično prihvaćaju osam znamenki pa ako želite, proširite ovaj dio programa na način da dodate potrebne kodove prema logici koja je vidljiva na slici.

Promjenljive, prvi_broj_je=0 i drugi_broj_je=0 služe za slučaj kad korisnik ne pritisne tipku s brojem, već odmah zatraži računsku operaciju pritiskom na tipku /, *, - ili +, odnosno ako odmah nakon startanja programa pritisne tipku =. Na taj će način kalkulator smatrati da je korisnik izabrao da prvi broj bude nula i da drugi broj bude nula, čime se izbjegava pojavljivanje upozorenja da je došlo do greške.

Program otpremite i isprobajte. Iako se program ponaša kako valja, možda će vam zasmetati činjenica da je teško popratiti ispis na displeju BBC micro:bita, pogotovo kad je rezultat višeznamenkasti broj koji klizi zdesna nalijevo. No i za to postoji rješenje, minijaturnom kalkulatoru dodajte OLED-displej.

OLED-displej

OLED je kratica za Organic Light Emitting Diode. To je svjetleća dioda (LED) izrađena iz organskih kemijskih elemenata. U ovom slučaju, “organski” se ne odnosi na hranu, već na spojeve ugljika s drugim kemijskim elementima, a to je područje koje proučava organska kemija. OLED su izumili 1987. godine kemičari iz tvrtke Kodak. Zbog raznih tehničkih prepreka masovna proizvodnja OLED-a nije započela sve do nedavno. Tek 1996. godine napravljen je prvi displej, a tek 2013. godine izašao je na tržište prvi komercijalno dostupan OLED-TV.

Prednosti OLED-a

Glavne prednosti OLED-a su kontrast, kutovi gledanja, točnost boja i energetska učinkovitost. OLED pruža visoki kontrast jer može stvoriti “čistu” crnu boju za razliku od LCD-displeja (o LCD-u se raspravljalo u 647. broju ABC tehnike). Budući da LCD-displeji imaju pozadinsko osvjetljenje (pa osim što zbog toga troše više struje) nikada ne mogu dobiti punu crnu boju. OLED emitira svjetlost samo kada su pikseli napajani strujom pa ako nema struje, apsolutno nema svjetla. OLED također povećava kutove pod kojima je displej moguće gledati. Za LCD najbolji je kut gledanja ravno naprijed, a kontrast se smanjuje kada se gleda pod nekim kosim kutom. To loše svojstvo zanemarivo je kod OLED-a. Nadalje, velika prednost OLED-a su savitljivi (fleksibilni) zasloni (jer se osim na staklu proizvode i na plastičnim folijama), što dizajnerima daje više slobode. OLED se uglavnom koristi u elektronici, ali ima još jednu zanimljivu uporabu, za rasvjetu. Ovdje se nećemo baviti velikim i skupim OLED-displejima u boji, već skromnijim monokromatskim displejom koji je jeftin i dovoljno dobar za prikazivanje raznih sadržaja kao su slova, brojevi, crteži, pa čak i animacije. Jedan takav je OLED I2C White 0.96“ SSD1306 tvrtke Soldered, Slika 39.5.

Glavne karakteristike ovog OLED-displeja jesu:

• dijagonala zaslona je 25 mm (0,96“)

• potrošnja struje je oko 20 mA

• napon napajanja je 5 V ili 3,3 V

• komunikacija ide preko I2C (adresa je 0x3C)

• boja piksela je bijela (postoji i inačica u plavoj boji piksela)

• broj piksela je 128 x 64 (ukupno 8192 piksela).

Priključivanje OLED-displeja na minijaturni kalkulator

Najprije na pločicu OLED-a zalemite četiri elementa muškog SRIP-konektora, Slika 39.6.

Prema montažnoj shemi spojite OLED s minijaturnim kalkulatorom BBC micro:bita, Slika 39.7. Kako je vidljivo, matrična tipkovnica i pripadajući otpornici malo su pomaknuti ulijevo. OLED nataknite s desne strane eksperimentalne pločice te dodajte premosnice kako slijedi: gledano slijeva nadesno SCL-priključak OLED-displeja spojite na izvod 19 BBC micro:bita (svijetlo plava premosnica), SDA-priključak spojite na izvod 20 (bijela premosnica), a VCC i GND spojite na plus i minus eksperimentalne pločice (crvena i plava premosnica). Za kraj, crvenom premosnicom spojite plus eksperimentalne pločice s izvodom 3V BBC micro:bita.

Kodiranje

Sigurno pretpostavljate da će trebati uvesti biblioteku s naredbama za upravljanje OLED-displejom. Nažalost, na službenim internetskim stranicama MicroPythona ta biblioteka nije uključena, no postoji drugo rješenje. Pronađite biblioteku pisanu u Pythonu i uvezite ju u MicroPythonu. Velika je vjerojatnost da će funkcionirati. Nakon internetske pretrage, autor ovih redaka pronašao je traženo na stranici https:// github.com/fizban99/microbit_ssd1306 - initialize. Biblioteku morate preuzeti i dodati “ručno”. Kako se to radi? Radi preuzimanja morate pri vrhu navedene internetske stranice kliknuti na zelenu programsku tipku “Code”. U padajućem izborniku izaberite “Download ZIP”, Slika 39.8. Nakon preuzimanja biblioteku raspakirajte. U mapi “microbit_ssd1306-master” pronaći ćete sve što vam je potrebno, Slika 39.9.

Kako je na slici vidljivo ima nekoliko datoteka s nastavkom PY File. Naime, autori ove biblioteke predvidjeli su module za razne aktivnosti s OLED-zaslonom. Vama će za minijaturni kalkulator zatrebati samo dva, glavni modul ssd1306.py i modul za pisanje teksta ssd1306_text.py Kako u MicroPythonu dodati module?

Pokrenite MP Editor. Kliknite na programsku tipku “Open…”. U skočnom prozoru potražite mapu koju ste maloprije raspakirali. Unutar mape klikom miša obilježite datoteku ssd1306.py tako da poplavi te kliknite na programsku tipku “Open”. Pojavljuje se novi skočni prozor kao na Slici 39.10.

Kliknite na simbol koji je na slici pokazan crvenom strelicom. Otvara se dodatak skočnog prozora, Slika 39.11.

Kliknite na “Add file ssd1306.py” te kliknite na “Confirm” kako biste potvrdili unos. MP Editor će vam javiti da je modul pridodan, Slika 39.12.

Naredbu initialize() morate uvijek uvesti prije upotrebe OLED-a. Ta naredba resetira displej.

Naredbu clear_oled() valja koristiti odmah nakon initialize kako biste bili sigurni da će displej biti bez ikakvog sadržaja.

Naredbom add_text(x,y,“tekst“) upisuje se željeni tekst na koordinatama x i y. Koordinata x ukazuje na stupce displeja i počinje od x = 0 što označava prvi stupac, x = 1 označava drugi stupac i tako dalje do x = 11 koji označava dvanaesti stupac. Koordinata y pokazuje redove displeja i počinje od y = 0 (prvi redak), a završava s y = 3 (četvrti redak). Na Slici 39.14. možete vidjeti kako to izgleda na OLED-u.

Eto, dodali ste modul ssd1306.py iz biblioteke microbit_ssd1306-master. Na isti način dodajte i modul ssd1306_text.py. MicroPython Editor će nakon toga biti spreman za kodiranje OLED-displeja.

Što treba znati o ovoj biblioteci

Zbog malog kapaciteta memorije BBC micro:bita tekst je na OLED-displeju zumiran, tako da je stvarna razlučivost 64 × 32. Drugim riječima, za pisanje teksta imate na raspolaganju dvanaest stupaca i četiri redaka, jer se za prikazivanje teksta koristi interni font BBC micro:bita koji ne možete mijenjati.

Naredbe koje će vam zatrebati Najbolje je krenuti s primjerom. U MP Editoru prepišite te otpremite i isprobajte program, Slika 39.13.

Kako je vidljivo, radi uštede prostora memorije BBC micro:bita iz modula biblioteke uvoze se samo nužno potrebne naredbe.

Eto, sad imate sve potrebno znanje pa samostalno prepravite program minijaturnog kalkulatora tako da se rezultat, umjesto na LED-displeju BBC micro:bita prikazuje na OLED-displeju.

Podsjetnik:

• microbit_ssd1306-master > biblioteka s modulima za upravljanje OLED-displeja, preuzete na internetskoj stranici https://github.com/ fizban99/microbit_ssd1306 - initialize

• ssd1306.py > glavni modul iz biblioteke microbit_ssd1306-master

• ssd1306_text.py > modul za pisanje teksta, iz biblioteke microbit_ssd1306-master

• initialize() > resetiranje OLED-displeja

• clear_oled() > briše sadržaj OLED-displeja

• add_text(x,y,“tekst“) > na koordinatama x i y upisuje se tekst koji je naveden unutar navodnika.

Za ove ste vježbe trebali:

• BBC micro:bit v.2. (ili v.1.)

• rubni priključak

• eksperimentalnu pločicu na ubadanje

• USB-kabel

• tipkovnicu s matricom od 16 tipki

• četiri otpornika od 10 kΩ

• OLED-displej I2C White 0.96“ tvrtke Soldered

• osamnaest premosnica M–F. Marino Čikeš, prof.

This article is from: