29 tra Mjerač vremena
Izradite program kojim će micro:bit biti mjerač vremena (tim – er). Pritiskom na tipkalo A birate način rada mjerača (minute ili sekunde). Pritiskom na tipkalo B zatim potvrđujete odabir i namještate vrijeme. Ako želite postaviti mjerač na minute, svakim pritiskom na tipkalo B povećavat ćete vrijeme za 1.
Ako želite postaviti mjerač na sekunde, pritiskom na tipkalo B povećat ćete vrijeme za 5. Pritiskom na oba tipkala istovremeno pokrećete mjerač. Dok mjerač odbrojava vrijeme neka se na zaslonu micro:bita prikazuje sličica pješčanog sata. Kad vrijeme mjerača iscuri, neka se prikaže kvačica.
1. korak
Na početku programa u on start blok postavite naredbu show string i kao argument upišite upitnik. To će biti znak da micro:bit od vas traži da odlučite hoćete li mjerač vremena postaviti u minutama ili sekundama. Da bi mjerač vremena mogao raditi kako je opisano u zadatku potrebno je kreirati šest varijabli. U kategoriji Variables stvorite varijable: Program, Timer, Minute, Sekunde, Odbrojavanje i Start. Sve ih postavite u on start blok i ostavite im vrijednost 0. Varijablom Program određivat će se način rada mjerača vremena (u minutama ili sekundama). U varijablu Timer će se pohraniti vrijeme u obliku minuta ili sekundi koje ćete postaviti u istoimenim varijablama pritiskom na tipkalo B. Varijablom Odbrojavanje ćete regulirati trenutak početka i završetka rada mjerača, a varijabla Start će služiti za pohranu vremena koje je prošlo od trenutka pokretanja micro:bita do trenutka pokretanja mjerača vremena (istovremeni pritisak na oba tipkala).
2. korak
Najprije izradite dio kôda kojim će se birati način rada mjerača vremena pritiskom na tipkalo A. Iz kategorije Input uzmite naredbu on button A pressed i postavite u prostor za programiranje. Pritiskom na tipkalo A želite mijenjati vrijednost varijable Program. Ona na početku ima vrijednost 0, a dalje u programu mora imati još dvije vrijednosti jer birate između dva načina rada pa neka one budu 1 i 2. Kad pritisnite tipkalo A neka se naredbom change Program by 1 (iz kategorije Variables) poveća vrijednost varijable Program za 1. Time će ona imati vrijednost 1 kad prvi put pritisnete tipkalo te vrijednost 2 kada ga drugi put pritisnete.
Kad varijabla Program ima vrijednost 1 neka način postavljanja mjerača vremena bude u minutama, a kad ima vrijednost 2 u sekundama. No, može se dogoditi da više puta pritisnete tipkalo A pa je povećanje varijable Program potrebno ograničiti kako bi se ono događalo samo do vrijednosti 2, a nakon toga ponovno krenulo ispočetka. To možete regulirati if then else naredbom. U if dio postavite uvjet kojim se provjerava je li vrijednost varijable Program manja ili jednaka 1. Ako je, neka se tada njezina vrijednost poveća za 1 i prikaže. U slučaju da uvjet nije zadovoljen (to će se dogoditi nakon trećeg pritiska na tipkalo jer je tada vrijednost varijable Program 2 i neće je više povećavati), tada u else dijelu varijablu Program ponovno postavite na nulu i dodajte blok show string s upitnikom kao na početku programa.
Isprobajte program na simulatoru. Prvim pritiskom na tipkalo A ispisuje se broj 1. Drugim pritiskom se ispisuje broj 2, a trećim se prikaže upitnik i možete krenuti ispočetka.
3. korak
Umjesto prikaza vrijednosti varijable Program (brojevi 1 i 2), dodajte naredbe za prikaz teksta tako da se ispiše slovo “M“ (kao minute) u slučaju vrijednosti 1, odnosno slovo “S“ (kao sekunde) ako je vrijednost varijable Program 2. Time će se pritiskom tipkala A na zaslonu izmjenjivati slova M, S i upitnik. Ovime ste dovršili dio kôda za odabir načina rada mjerača te sada slijedi programiranje potvrde odabira i postavljanje mjerača na određeno vrijeme. Taj dio će se izvršavati pritiskom na tipkalo B.
4. korak
Iz kategorije Input odaberite naredbu za pritisak na tipkalo i postavite je na B kako biste dobili naredbu on button B pressed. Dodajte iz kategorije Logic if then else blok i stavite ga unutar on button B pressed.
Pritisnite na plus ispod else kako biste dodali else if dio. U tom bloku ćete ispitivati vrijednost varijable Program i po njoj namjestiti mjerač na minute ili sekunde. U if dijelu provjerite je li vrijednost varijable Program jednaka 1. Ako je, onda u then dijelu varijablu Minute povećajte za 1 i pokažite njezinu vrijednost show number naredbom. Dodajte još nakon toga prikaz slova “M“ kao znak za minute te naredbom clear screen obrišite prikaz na zaslonu. Ako je vrijednost varijable Program jednaka 2 (što provjeravate u else if) tada vrijednost varijable Sekunde povećajte za 5, ispišite njezinu vrijednost, prikažite slovo “S“ i obrišite prikaz na zaslonu.
Ako varijabla Program nije ni 1 ni 2, znači da je 0 i tada neka se prikaže upitnik. To će se dogoditi u slučaju da pritisnite tipkalo B prije tipkala A te tada ne možete namjestiti mjerač jer je prethodno nužno odrediti mjernu jedinicu vremena. U slučaju da ste tipkalom A odredili da radite s minutama, pritiskom na tipkalo B te minute povećavate za 1. Ako ste se pak odlučili za sekunde, onda ih tipkalom B povećavate za 5.
5. korak
Nakon odabira načina rada i vremena koje mjerač mora odbrojavati, trebate dodati naredbe za pokretanje mjerača. Prema zadatku se on pokreće pritiskom na tipkala A i B istovremeno.
Dodajte zato blok on button A+B pressed u prostor za programiranje. Ovisno o odabranom načinu rada mjerača vremena što se regulira pomoću vrijednosti varijable Program, potrebno je dodijeliti varijabli Timer željenu vrijednost mjerača u minutama ili sekundama.
No, za slučaj da netko pritisne oba tipkala istovremeno prije nego namjesti način rada i vrijeme, postavite provjeru if then else blokom, kojom ćete ispitati je li vrijednost varijable Minute ili varijable Sekunde veća od nula.
Ako je, znači da je vrijeme postavljeno i u then dio možete dodati naredbe za definiranje varijable Timer u ovisnosti o mjernim jedinicama. Ako se provjeravanjem tog uvjeta pak utvrdi da vrijeme nije prethodno postavljeno, neka se tada na zaslonu prikaže upitnik koji će korisnika mjerača podsjetiti da najprije mora odabrati vrijeme, a onda pokrenuti odbrojavanje. Dodatno, tu je potrebno postaviti varijable Program i Odbrojavanje na nulu radi mogućnosti odabira i kontrole načina rada mjerača vremena.
6. korak
Nakon što je utvrđeno da je vrijeme postavljeno (varijabla Minute ili varijabla Sekunde ima vrijednost veću od nule), u then dijelu novom If then else naredbom provjerite vrijednost varijable Program (način rada). Ako je jednaka 1, radi se s minutama i Timeru se postavlja vrijednost varijable Minute pomnožena sa 60000 kako bi bila pretvorena u milisekunde. Inače, ako vrijednost Programa nije 1 (znači da je 2), tada varijabla Timer mora poprimiti vrijednost varijable Sekunde pomnožene s 1000 (pretvaranje u milisekunde). Kad ste sve namjestili (način rada, vrijeme i mjernu jedinicu vremena), odbrojavanje može krenuti. Zato neka varijabla Odbrojavanje sada poprimi vrijednost 1. To ćete iskoristiti kasnije u forever petlji za zaustavljanje rada mjerača i pripremu za novo korištenje. Također, pritiskom na oba tipkala pomoću varijable Start micro:bit mora upamtiti vrijeme koje je do tog trenutka prošlo. Stoga varijabli Start dodijelite vrijednost naredbom running time (ms).
7. korak
Za kraj je potrebno dodati naredbe kojima će micro:bit prema zadanoj vrijednosti varijable Timer odbrojavati vrijeme i prikazati da je ono isteklo. U forever petlji zato dodajte if then blok kojim ćete provjeriti vrijednost varijable Odbrojavanje. Ako je vrijednost te varijable jednaka 1, znači da je vrijeme mjerača pravilno postavljeno i može krenuti s odbrojavanjem. Prolazak zadanog vremena možete kontrolirati tako što ćete zbroj vrijednosti varijable Start i varijable Timer usporediti s naredbom za mjerenje vremena.
Poznato vam je da naredba running time (ms) neprestano mjeri vrijeme od trenutka kad je micro:bit pokrenut. U trenutku kad ste pritisnuli tipke A i B u varijablu Start je pohranjeno vrijeme koje je do tada proteklo. Kao primjer zamislite da je to bilo 5000 ms. Ako ste preko varijable Timer namjestili još 5000 ms kao vrijeme koje mjerač odbrojava, to je ukupno 10000 ms (10 sekundi.) Ovom provjerom stoga pratite kad će se dogoditi da proteklo vrijeme, koje se neprestano mjeri, bude veće od tih 10 sekundi. Kad se to dogodi, na zaslonu neka se prikaže kvačica kao znak da je vrijeme prošlo. Dodajte zato novi if then else blok u kojem će se provjeravati je li proteklo zadano vrijeme mjerača kako je prethodno opisano. U then dio dodajte show icon naredbu i u njoj postavite kvačicu, a nakon toga dodajte naredbe kojima ćete svim varijablama u programu postaviti vrijednost nula kako bi mjerač bio spreman za novo korištenje kad mu istekne vrijeme.
U else dio postavite sličicu pješčanog sata koji će se prikazivati dok mjerač vremena odbrojava zadano vrijeme.