Scopul acestei teme este realizarea unui sistem de alarmă configurabil folosind plăcuța Micro:bit.
Tema se rezolva individual. Orice tentativa de copiere va rezulta in 0p pentru tema respectiva. Vom utiliza si sisteme automate de detectare a copierii. Daca avem dubii, va vom adresa intrebari suplimentare legate de tema.
Daca aveti intrebari legate de tema, va rugam sa scrieti un issue pe repository-ul de github repository cu titlul de forma [alarm] <titlul intrebarii voastre>.
Daca doriti sa primiti un email cand se pun intrebari noi sau cand apar raspunsuri, accesati github repository si faceti click pe Watch.
Sistemul de alarmă va avea următorul comportament:
Tema va fi testată manual pe baza unei liste de comportamente așteptate.
Sistemul va fi configurat folosind terminalul. Pentru a initia conexiunea la terminal, e suficient sa se apese orice tasta (hint: uart), dupa care sistemul va afișa un prompt de forma “alarm cmd>” care permite introducerea unor comenzi de configurare a sistemului. In momentul in care sistemul primeste comenzi in terminal, el nu va fi in stare de functionare (nu va face nimic altceva decat sa execute comenzi).
Conexiunea la terminal se inchide folosind comanda exit
.
Vom detalia restul comenzilor în continuare.
Sistemul poate salva 3 profile diferite de utilizatori. Pentru fiecare utilizator se vor salva următoarele informații:
name
- numele utilizatorul;pin
- un cod de 4 cifre folosit pentru a arma/dezarma alarma.Pentru a configura profilele de utilizatori se vor folosi următoarele comenzi:
name
pin
- adaugă un nou profil; dacă profilul a fost adăugat cu succes se va afișa mesajul Profile added.; dacă există deja un profil cu același nume, pin-ul se va modifica; dacă se încearcă adăugarea unui al 4-lea profil, se va afișa mesajul: Could not save profile. Limit exceeded.; dacă pinul nu are 4 cifre se va afișa mesajul Could not save profile. Invalid pin.name
- șterge profilul identificat prin nume; dacă ștergerea s-a efectuat cu succes se va afișa textul: Profile deleted; dacă ștergerea nu s-a putut efectua pentru că nu există profilul, se va afișa mesajul: Could not delete profile. Profile name
does not exist.
Sistemul permite configurarea timpului de armare. Acesta se măsoară în minute și reprezintă durata în care un sistem rămâne armat. De exemplu, dacă timpul de armare are valoarea 30, la 30 de minute după armare, alarma se va dezarma automat.
Dacă nu este schimbat, timpul de armare implicit are valoarea 1.
Pentru a seta timpul de armare se folosește comanda arm time val
.
Pentru a arma sistemul de alarmă se vor apăsa concomitent butoanele A și B, moment în care matricea de LED-uri va intra în modul de introducere pin.
Dacă pinul este introdus corect se va semnala armarea prin afișarea unei fețe zâmbitoare, iar dacă pin-ul nu este corect, se va afișa o față tristă.
După semnalarea armării, până la dezarmare, sistemul va avea toată matricea de LED-uri aprinsă.
Când sistemul intră în modul de introducere pin, el va începe prin a afișa valoarea 0 folosind matricea de LED-uri și va permite incrementearea valorilor folosind butoanele A și B. Prin apăsarea tastei A se pot incrementa valorile, iar prin apăsarea tastei B se pot micșora valorile. Dacă incrementarea ajunge la valoarea maximă (9), ea va continua cu 0,1,2, etc. Comportamentul este similar dacă decrementarea ajunge la valoarea 0.
Pentru a selecta o valoare, se va atinge logo-ul Micro:bit-ului.
Când este în modul armat, sistemul poate fi dezarmat prin apăsarea concomitentă a butoanelor A și B, după care sistemul va intra în modul de introducere pin. Dacă pin-ul este introdus corect, dezarmarea va fi semnalată prin afișarea unei fețe zâmbitoare pentru 3 secunde. Dacă pin-ul nu este corect, se va afișa o față tristă timp de 3 secunde si alarma va continua să fie armată.
Dacă timpul de armare a trecut, sistemul se va dezarma automat. El va afișa o fată zâmbitoare timp de 3 secunde pentru a semnala acest lucru, după care matricea de LED-uri se va stinge în totalitate.
Dacă sistemul este armat, alarma va fi activată prin scuturarea dispozitivului timp de 2 secunde. Dacă acest lucru se întâmplă, matricea de LED-uri va pâlpâi toată și va scoate un sunet. Ea nu se va opri până la dezarmarea manuală a sistemului.
Alarma va conține un fișier cu câte o intrare pentru următoarele evenimente:
Când unul din aceste evenimente are loc, se va adăuga o linie de forma <time> <event>, unde time
reprezintă ora și minutul la care a avut loc evenimentul și event
e unul din textele descrise mai jos.
Pentru a stoca evenimentele de pe dispozitiv, se vor stoca următoarele mesaje:
User
armed the system. - pentru armarea sistemului, unde user
e utilizatorul care a armat sistemul;User
disarmed the system. - pentru dezarmarea manuală a sistemului, unde user
e utilizatorul care a dezarmat sistemul;Pentru a citi și șterge informațiile de pe sistemul de alarmă, se vor folosi următoarele comenzi în terminalul sistemului:
Exemplu
alarm cmd> log print 02:12 Diana armed the system. 03:15 Ioana disarmed the system. 03:20 Ioana armed the system. 03:50 Automatic disarmed system. alarm cmd> log delete Logs deleted. alarm cmd>
Tema va fi testată manual pe un dispozitiv Micro:bit folosind testele publicate.
Tema se va încărca pe github.