Micro:bit redomat


#1

Pozdrav svima i sve najbolje u 2019.
Imam jedan problem za kojeg vjerujem da mi netko od Vas može pomoći.
Kad djeci postavim neko pitanje onda mi ih se više javi i svi tvrde sa su prvi pa mi treba redomat pomoću microbita.
Dakle imamo 10 microbita u jednoj radio grupi od kojih je jedan kod voditelja za resetiranje grupe. Kada voditelj s tipkom “A” resetira grupu na ostalih 9 se pojavi nula “0”. Tko prvi stisne tipku za prijavu na displeju mu se prikaže broj “1” i više se ne može prijavljivati i brisati taj broj do ponovnog reseta. Ostalima u grupi više nije dostupan broj 1 nego broj 2 pa slijedeći koji se prijavi dobiva na displej “2” i tako redom do broja 9.
Unaprijed se zahvaljujem na pomoći i lijep pozdrav,
Mladen Božić


#2

Nemam “gotovo” rješenje jer ne znam konkretnu primjenu osim opisanog dijena no dajem konceptualni prijedlog rješenja sa malo kôda iz kojega mislim da se lako izrodi željeno rješenje. Segment postavljanja svih uređaja na 0 nisam ubacio da kôd bude pregledniji a dodavanje istoga je lako.

U nastavku prvo kôd namijenjen serveru (master):

Ovdje imamo dva bloka.

OnStart blok
se postavlja grupa (zajedničko i za master i za slave uređaje) i forsira slanje serijskog broja - u predloženom rješenju i nije to toliko bitno i može se isključiti no ukoliko je bitno isključiti mogućnost da se netko pokušao ubaciti u lanac prikazujući se kao drugi uređaj tada se rješenje može prilagoditi da koristi taj broj umjesto onoga kojega pošalje slave uređaj. Na kraju ovog bloka se stvara matrica koja će pamtiti sve pohranjene uređaje. Prvi element ove matrice neće nikada biti iskorišten no tako mi je lakše jer se ne moram igrati sa raznim detaljima od rednog broja na dalje - recimo da to mjesto pripada masteru i zato je neiskorišteno i uvijek na -1.
Redni broj prijavljenog uređaja određuje se na osnovu pozicije u toj matrici pa je redni broj 0 = master, 1= prvi prijavljeni, 2 = drugi prijavljeni itd. Ovdje se ne koristi fiksni broj mjesta pa se time može raditi i sa znatno više od 9 slave uređaja.

OnRadioReceived blok
Komunikacija između uređaja će uvijek morati biti na način da se šalje tekst i broj. Zamišljeno je da u tekstu bude identifikacija operacije koja se radi a u broju dodatni podatak npr. serijski broj uređaja koji šalje ili 0 ako ne treba slati išta (npr.pošalje se sa severa kao tekst “RESET” a kao broj 0 pa svi na to reagiraju postavljanjem na 0).
Trenutno je postavljeno da se reagira na tekst “ID” i serijskim brojem uređaja. Kôd će u petlji provjeriti u matrici da li dani serijski broj u value već postoji. Ako postoji vratiti će njegov redni broj a ako ne postoji tada će ga zapamtiti kao zadnji u nizu i vratiti njegov redni broj. Ovo znači i da će, u slučaju da se neki slave uređaj zagasi i ponovo pokuša prijaviti - master vratiti njegov stari redni broj (jer ih pamti po serijskom broju).

Slijedi i ono što je na klijentu:

Ovdje ima tri bloka

OnStart blok
Ponovo se postavlja kanal i slanje serijskog broja (zajedničko za sve) no tu sada inicijaliziramo i dvije varijable:
mojbroj će sadržavati dodijeljeni broj a inicijalno je 0
myID se postavlja na serijski broj uređaja i to je broj sa kojim se uređaj predstavlja u komunikaciji (nalazi se u Advanced/Control izborniku)

OnButton A Pressed blok
Ovdje samo šaljemo poruku “ID” i naš serijski broj - redni broj će nam vratiti server.

OnRadioReceived blok
Ovdje reagiramo na dvije situacije - ako smo dobili ID to je možda od nekog drugog slavea pa to ignoriramo
Ako je u value naš ID tada je poruka za nas. Kako trenutno nemamo drugih vrsta poruka tada nemamo potrebu za drugim provjerama već znamo da u tekstualnom dijelu imamo ukodiran naš redni broj - pretvaramo tekst u broj i pohranjujemo taj broj te prikazujemo na ekranu.
U normalnom radu bi ovaj dio bio zadnji i prije toga bi bili navedeni svi elseif uvjeti koji bi pokrivali sve ostale naredbe pa bi bilo
else if (tekst = “naredba”) and (value=“myID”) <-- u slučaju da se naredbe šalju samo za određeni uređaj
ili
else if (tekst = “naredba”) ako svi uređaji moraju isto reagirati

Evo ovo je onako nekako iz glave jer su mi svi micro:bit-ovi u uredu a ja sam na G.O. no nadam se da je stvar OK - probajte pa javite.

Za kraj imajte u vidu da radio komunikacija kod micro:bit-a zna biti prilično nepouzdana u da u radio kanalu može biti poprilično šuma (jer svi uređaji bez obzira na kanal šalju po istoj frekvenciji pa dolazi do interferencije).


#3

Hvala na trudu i lijepoj prezentaciji. Složio sam blokove ali još nisam stigao testirati jer sam okupiran legom pa nakon natjecanja ću probati i javiti iskustva.


#4

Eto konačno pet minuta vremena za test i stvar funkcionira odlično, ali bi trebalo malo šminke:

  • da se pritiskom A+B na masteru ponište (resetiraju) svi korisnici u grupi i da im se prikaže 0
    -da se na masteru ispisuje zadnji prijavljeni broj odnosno broj prijavljenih. Unaprijed zahvaljujem, to će biti odlična stvar za kviz s klincima.