8 minute read
BBC micro:bit [38]
Poštovani čitatelji, u prošlom ste nastavku serije najprije upoznali, a potom priključili matričnu tipkovnicu i naučili kako BBC micro:bit otkriva koja je tipka na njoj pritisnuta. U ovom ćete nastavku kodirati program minijaturnog kalkulatora koji će računati s osnovnim matematičkim operacijama (zbrajanje, oduzimanje, množenje i dijeljenje). Pritom ćete koristiti neke naredbe iz MicroPythona koje dosad niste susretali pa krenite od toga.
Functions
Advertisement
Prekrasna metoda koju programeri rado koriste jer znatno pojednostavnjuje programiranje. Naime, uz pomoć funkcija program se razlaže u male zadatke koji se prozivaju iz glavnog programa. Iako u biblioteci “microbit” postoje gotove funkcije, kao na primjer sleep(), bît svega je da ih i vi možete stvarati. Na primjer, napišete funkciju koja će uključiti LED-matricu, koja će uključiti onoliko LED-ica koliko vi želite, koja će generirati neki broj, koja će pomnožiti dva broja, koja će pokrenuti servomotore, koja će zaustaviti servomotore i tako dalje. Imajte na umu, ako funkcijama budete davali prikladne nazive, programiranje će vam biti olakšano.
Funkcije koje ćete sami stvarati trebate u MP Editoru napisati na početku programa, a prozivate ih iz glavnog dijela programa, nakon čega ih program sam potraži.
Najbolje je odmah krenuti s primjerom. U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.1.
Što morate znati o funkciji? Funkciju valja imenovati prikladnim imenom te upisati kôd za ono što je zamišljeno da mora obavljati. Drugim riječima, funkciju treba definirati, a za to se koristi naredba def prikladno_ime():. U primjeru sa slike definirane su dvije funkcije, def zbrajanje() i def oduzimanje()
Funkciju se iz glavnog dijela programa proziva (u ovom primjeru je while True: glavni dio programa) na način da se upiše njeno ime iza kojeg slijede oble zagrade (u ovom primjeru, zbrajanje() i oduzimanje()).
Što program sa slike radi? Nakon pokretanja, učitaju se biblioteke te se od while True: nastavlja s izvođenjem glavnog dijela programa (na slici je to prikazano žutom strelicom). Pritiskom tipke A na pločici BBC micro:bita, dodjeljuju se parametri promjenljivima x i y te se proziva funkcija zbrajanje(). Program ju potraži (na slici je to prikazano crvenom strelicom) i kad ju pronađe obavlja ono što je u funkciji zadano, a kad završi vraća se u glavni dio programa na mjesto otkud je krenuo (na slici je to prikazano plavom strelicom). Od tog mjesta glavni dio programa nastavlja s radom. Pritiskom tipke B operacija se ponavlja kao za tipku A, na slici je to prikazano narančastom i ljubičastom strelicom.
Variables
Iako ste promjenljive već koristili, ima jedna važna činjenica vezana uz njih koju morate znati. Promjenljive se uglavnom iskazuju na početku programa, no kako je vidljivo sa Slike 38.1. možete ih iskazati i unutar glavnog dijela programa (x i y). Tako iskazane promjenljive su globalnog tipa, odnosno bit će prepoznate u svim dijelovima koda pa tako i unutar funkcija. Ako pak promjenljivu iskažete unutar funkcije, tada je to lokalna promjenljiva, odnosno bit će prepoznata samo unutar funkcije, ali ne i u drugim dijelovima programskog koda. U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.2.
Slika ima indeks 1 i tako dalje. Kao i za promjenljive i listi valja dati ime te nakon znaka jednako (=) upisati uglate zagrade unutar kojih se upisuju elementi, međusobno odvojeni zarezom. Osim ovoga, moguće je stvoriti i praznu listu i kao takva bit će spremna za naknadno dodavanje elemenata. Za naknadno dodavanje elemenata unutar liste postoje dvije metode, “insert(indeks, element)” i “append(element)”. U argumentima metode “insert” najprije treba upisati broj indeksa te iza zareza navesti element. U argumentu metode “append” dovoljno je navesti element jer će ga ta metoda automatski smjestiti na začelje liste. Za razotkrivanje dužine liste koristi se metoda “len(ime_liste)”. Za razotkrivanje postoje li unutar cijele liste elementi istog sadržaja koristi se metoda “count(element)”. Za pristupanje elementima liste dovoljno je napisati njeno ime, a unutar uglatih zagrada navesti broj indeksa, ime_liste[indeks]
Promjenljiva ime iskazana je u glavnom dijelu programa, a to znači da je globalna. Kako je već rečeno, možete ju prozivati u bilo kojem trenutku s bilo kojeg dijela programa pa tako i iz funkcije. Promjenljiva “lijepi_pozdrav” iskazana je unutar funkcije, a to znači da je lokalna. Možete ju prozivati samo unutar te funkcije, izvan nje neće biti prepoznata. Štoviše, BBC micro:bit javit će grešku.
Želite li da lokalna promjenljiva lijepi_pozdrav bude globalna, tada morate to iskazati. U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.3.
Sve dosad navedeno možete provjeriti. U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.4.
Na displeju BBC micro:bita zdesna nalijevo ispisivat će se sljedeće: 1 dva 2 0. Objašnjenje: 1 je sadržaj prvog elementa liste, dva je sadržaj drugog elementa liste, lista sadrži 2 elementa, “tri” se ponavlja 0 puta.
Joining (concatenating) strings
Pripajanje ili ulančavanje sadržaja liste moguće je samo kad lista sadrži stringe. Što je to? To je metoda koja približava više različitih stringa i od toga stvara samo jednu stringu. U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.5.
Slika
Jednom iskazana kao globalna, promjenljiva vrijedi u svim dijelovima programskog koda.
Lists (arrays)
Otprije znate da je to lista (popis, niz), a BBC micro:bit ju prepoznaje jer je napisana s uglatim zagradama. Lista može sadržavati razne elemente, na primjer imena promjenljivih, brojeve, stringe ili pak mješavinu svega navedenog. Mjesto upisa pojedinog elementa naziva se indeks. Prvi element liste ima indeks 0, drugi element
Ako je sve kako valja, na displeju se najprije ispiše 6, a potom 123. Zašto tako? Lista “broj” sadrži brojeve pa za tu listu ne važi ulančavanje. Znak + se shvaća kao matematička operacija zbrajanja, 1+2+3=6. Lista “string” sadrži stringe koje se ulančavaju i tako se dobiva nova stringa – 123.
Operators
Postoje dvije vrste operatora, operatori usporedbe (==, <, >, <=, >=, !=) i logički operatori (and, or, not).
Operatori usporedbe međusobno uspoređuju brojeve, no neki operatori usporedbe mogu međusobno uspoređivati i stringe. U nastavku slijedi objašnjenje. Operator usporedbe == uspoređuje jesu li dva broja identična (ovaj operator uspoređivanja može uspoređivati i stringe). Ovo ne treba brkati s matematičkim znakom = jer se taj znak koristi za dodjeljivanje vrijednosti promjenljivoj, na primjer “promjenljiva=0” ili za računanje, na primjer 5+10=15. Operator usporedbe < uspoređuje je li lijevi broj manji od desnog, na primjer 3<5. Operator usporedbe > uspoređuje je li lijevi broj veći od desnog, na primjer 11>8. Operator usporedbe <= uspoređuje je li lijevi broj manji ili jednak onom desnom, na primjer 14<=14. Operator usporedbe >= uspoređuje je li lijevi broj veći ili jednak onom desnom, na primjer 14>=14. Operator usporedbe != uspoređuje je li lijevi broj različit (drugačiji) od desnog, na primjer 14!=6 (ovaj operator usporedbe može uspoređivati i stringe). U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.6.
Ako je sve kako valja, program generira slučajne brojeve koji mogu biti 3, 4 ili 5. Na displeju se ispisuje 4 == 4 za generirani broj=4. Kad se pak generira broj=3 ili broj=5 na displeju se ispisuje 3 != 4 potom 3 < 4 ili 5 != 4 potom 5 > 4.
Logički operator and (i) koristi se kada trebaju biti zadovoljena dva ili više navedenih uvjeta.
Logički operator or (ili) koristi se kada treba biti zadovoljen baren jedan od dva ili više navedenih uvjeta.
Logički operator not (ne) koristi se zajedno s and ili or. Negira postojeće stanje.
U MP Editoru prepišite te otpremite i isprobajte program, Slika 38.7.
Ako je sve kako valja, program generira slučajne brojeve koji mogu biti 1, 2 ili 3. Na displeju se ispisuje X i Y = 1 samo kad su ispunjena oba uvjeta, odnosno X i Y moraju biti 1. Na displeju se ispisuje X ili Y = 2 kad je barem jedan uvjet ispunjen, odnosno kad je X=2 ili kad je Y=2 (važi i kad su oba broja jednaka, odnosno X=2 i Y=2, jer je i tu barem jedan uvjet ispunjen!). Na displeju se ispisuje X = 3 , Y < 3 kad su ispunjena oba uvjeta, odnosno X mora biti 3, a Y mora biti različit od 3.
Ovime su iscrpljene nepoznanice pa možete krenuti s programiranjem minijaturnog kalkulatora.
Minijaturni kalkulator
Zbog obima, program će biti rascjepkan i objašnjen u nekoliko dijelova i slika. U MP Editoru prepišite sve sa slika koje slijede, od Slike 38.8. do Slike 38.16.
Prvi dio, Slika 38.8.
Nakon početnih parametara definira se funkcija def unos_prvi_broj() koja će unutar uvjetovane beskonačne petlje (while a<1) skenirati tipkovnicu (na ovoj se slici vidi dio kad će skenirati prvi stupac matrične tipkovnice). Kad korisnik bude pritisnuo neku tipku (n) program će prikazati odgovarajući broj na displeju (display.show(n)) te će ga dodati u praznu listu na poziciju s indeksom 0 (racun.insert(0,n)). Ako korisnik bude pritisnuo tipku CE, BBC micro:bit će se resetirati i program će krenuti ispočetka.
Drugi dio, Slika 38.9.
Program će i dalje izvoditi skeniranje.
Treći dio, Slika 38.10.
Četvrti dio, Slika 38.11.
Slika 38.8. Početak programa gdje se vidi dio definicije funkcije def unos_prvi_broj() u kojoj će se skenirati prvi stupac matrične tipkovnice
Slika 38.9. Nastavak definicije funkcije gdje će se skenirati drugi stupac matrične tipkovnice
Ovdje valja skrenuti pozornost na dvije promjenljive, a i operacija. U globalnoj promjenljivoj
Slika 38.10. Nastavak definicije funkcije gdje će se skenirati treći stupac matrične tipkovnice
“operacija” upisat će se stringa koja će poslije trebati za izvođenje izabrane matematičke operacije. Lokalnoj promjenljivoj a na početku definicije funkcije dodijeljena je vrijednost 0, a sad će poprimiti vrijednost 1. Ako se vratite do Slike 38.8., vidjet ćete da je promjenljiva a ustvari uvjet koji pokreće ili zaustavlja uvje-
Slika 38.11. Nastavak definicije funkcije gdje će se skenirati četvrti stupac matrične tipkovnice tovanu beskonačnu petlju (while a<1). Drugim riječima, kad korisnik bude pritisnuo bilo koju tipku sa znakom matematičke operacije (/, *,,+) skeniranje će se zaustaviti, a funkcija “def unos_prvi_broj()” predat će nadzor glavnom dijelu programa.
Peti dio, Slika 38.12.
Nakon prve slijedi definicija druge funkcije, def unos_drugi_broj(). Situacija je ista kao kod definicije prve funkcije. Drugim riječima, funkcija će skenirati tipkovnicu i obavljati ono što je već opisano za prvu funkciju. Jedinu razliku vidjet ćete poslije.
Šesti dio, Slika 38.13.
Sedmi dio, Slika 38.14.
Ovdje valja skrenuti pozornost na tipku sa znakom jednakosti (=). Kad korisnik bude priti-
Slika 38.13. Nastavak definicije funkcije gdje će se skenirati drugi stupac matrične tipkovnice snuo tu tipku, skeniranje će završiti, a funkcija “def unos_drugi_broj()”predat će nadzor glavnom dijelu programa. Eto, maloprije je spomenuto, a sad ste otkrili gdje se krije razlika između prve i druge funkcije. Naime, kod druge funkcije nema
Slika 38.12. Prvi dio definicije funkcije def unos_drugi_ broj() gdje će se skenirati prvi stupac matrične tipkovnice
Slika 38.14. Nastavak definicije funkcije gdje će se skenirati treći stupac matrične tipkovnice
Slika 38.15. Definicija funkcije “def rezultat()” skeniranja tipki sa simbolima matematičkih operacija.
Osmi dio, Slika 38.15.
Kao što pretpostavljate, u ovoj će se funkciji obavljati predviđene matematičke operacije, a potom će se rezultat ispisati na displeju BBC micro:bita. Primijetite prije spomenutu globalnu promjenljivu “operacija” koja će ovdje poslužiti za otkrivanje, od korisnika izabrane operacije. Osim toga, primijetite što je predviđeno ako korisnik bude tražio dijeljenje s nulom. Naravno, pojavit će se poruka o grešci (Error!! /0).
Zadnji dio, Slika 38.16.
Nakon startanja i ugađanja početnih parametara glavni dio programa preuzima nadzor i odmah čisti sadržaj displeja. Zašto? Zato jer se prilikom prvog startanja, dok se elektronika ne stabilizira, na digitalnim izvodima BBC micro:bita se prva funkcija, zatim druga, zatim treća. Nakon ispisivanja rezultata, BBC micro:bit se resetira i program kreće ispočetka. Program otpremite i isprobajte. Kao što možete primijetiti, minijaturni kalkulator prihvaća samo jednoznamenkaste brojeve. Eto vam ideje za samostalan rad. Pokušajte prepraviti program tako da kalkulator prihvaća više znamenki. Sretno!
Podsjetnik: def prikladno_ime() > definiranje vlastite funkcije koju valja upisati na početku programa; prikladno_ime() > prozivanje funkcije; global ime_promjenljive > iskazivanje globalne promjenljive; ime_liste=[] > stvaranje prazne liste; ime_liste.insert(indeks,element) > listi se dodaje element na poziciju određenu indeksom. Elementi mogu biti imena promjenljivih, brojevi, stringe ili mješavina svega navedenog. Indeks počinje od 0; ime_liste.append(element) > dodavanje elementa na začelje liste; len(ime_liste) > broji kolika je dužina liste, odnosno koliko elemenata ima na listi; ime_liste.count(element) > broji koliko ima istih elemenata na listi; ime_liste[indeks]+ime_liste[indeks] > pripajanje ili ulančavanje sadržaja liste moguće je samo kad liste sadrže stringe;
==, <, >, <=, >=, != operatori usporedbe: identičan, manji, veći, manji ili jednak, veći ili jednak, različit; and > logički operator gdje trebaju biti zadovoljena dva ili više uvjeta; or > logički operator gdje treba biti zadovoljen barem jedan od dva ili više uvjeta; not > logički operator koji se koristi zajedno s and ili or. Negira postojeće stanje.
Za ove ste vježbe trebali:
- BBC micro:bit v.2. (ili v.1.)
- rubni priključak
Slika 38.16. Ovo je glavni dio programa javlja napon koji će uzrokovati prikaz nekog broja. Kako to ne bi zbunilo korisnika, valja ga očistiti s “display.clear()”. Nakon toga proziva
- eksperimentalnu pločicu na ubadanje
- USB-kabel
- tipkovnicu s matricom od 16 tipki
- četiri otpornika od 10 kΩ
- trinaest premosnica M–F.
Marino Čikeš, prof.