Tema 2 - Microbit Busybox

Informații generale

Deadline: 7 Aprilie, ora 23:55
Punctaj: 1 punct din notă
Încărcarea temei: Devoir 2

Cunoștințe evaluate

  • Folosirea limbajului Python
  • Modul de funcționare a liniei de comandă
  • Crearea de fișiere
  • Folosirea perifericelor Micro:bit

Reguli

  1. Tema trebuie să conțină un fișier Readme în care să explicați cum ații făcut tema (-0.1p).
  2. Tema trebuie implementată folosind limbajul MicroPython. Orice alte implementări vor duce la anularea temei (0 puncte).

Folosiți doar bibliotecile MicroPython os și microbit.

Copierea

Tema se rezolvă individual. Orice tentativă de copiere va rezulta în 0 puncte pentru tema respectivă. Vom utiliza și sisteme automate de detectare a copierii. Dacă avem dubii, vă vom adresa întrebări suplimentare legate de temă.

Întrebări

Dacă aveți întrebări legate de temă, vă rugăm să scrieți un issue pe repository-ul de github https://github.com/UPB-FILS-SdE2/questions cu titlul de forma [busybox] <titlul întrebări voastre>.

NU PUBLICAȚI COD SURSĂ. Acesta va fi considerată copiere și se va penaliza cu 0 puncte pe temă pentru voi.

Dacă doriți să primiți un email când se pun întrebări noi sau cand apar răspunsuri, accesați github https://github.com/UPB-FILS-SdE2/questions și faceți click pe Watch.

Micro:bit busybox

Scopul acestei teme este implementarea unui utilitar capabil să execute comenzi tip Linux bash.

Pentru rezolvarea temei veți realiza un script Python care citește de la tastatură comenzi pe care le execută. Odată rulat, executabilul va afișa un prompt de forma cmd: urmând să primească o comandă urmată de parametrii. Prin apăsarea tastei ENTER se marchează finalul comenzii. După fiecare comandă, programul va afișa rezultatul, dacă e cazul, după care va aștepta după o altă comandă. Programul își va încheia execuția prin primirea comenzii exit sau quit.

Exemplu:

cmd: ls
test.py my_file my_file2
cmd: echo test
test
cmd: exit

Pentru că plăcuța Micro:bit nu suportă structură ierarhică de directoare, toate fișierele se vor afla în același director rădăcină unde este rulată și aplicația voastră.

Comenzi suportate

În continuare, vom defini comenzile suportate de utilitar, împreună cu comportamentul caracteristic și parametrii pe care acestea le suportă. Pentru orice altă comandă sau orice alt format, scriptul va afișa mesajul Invalid command.

În cazul în care comanda primită de utilitar a fost rulată cu succes, acesta va afișa informația menționată în descriere, dacă e cazul. În caz contrar, se va afișa un mesaj de eroare specific, mentionat în descrierea comenzii. Dacă nu se specifică altfel, mesajul afișat pe ecran va fi urmat de NEWLINE, iar promptul va fi afișat pe linia următoare.

Parametrii de forma [parametru] sunt opționali, iar cei de forma <parametru> sunt obligatorii.

Comenzile suportate de aplicația mini-busybox sunt:

  • led [parametru] x y - controlează LED-ul de pe Micro:bit situat pe linia x și coloana y. În funcție de parametrii primiți comanda va realiza următoarele acțiuni:
    • on - luminează LED-ul
    • off - stinge LED-ul
    • blink <interval> <count> - face LED-ul să clipească la intervalul interval milisecunde de count ori. Valoarea pentru count va fi în intervalul 0-20.
    • toggle - aduce LED-ul în starea opusă (dacă LED-ul este pornit, îl oprește, iar dacă este oprit, îl pornește)
    • brightness [set <val>] - folosit fără parametrul set, afișează luminozitatea LED-ului specificat
      • set <val> - dacă se folosește parametru set se va seta luminozitatea la valoarea val, undeva val este un număr întreg 0-9, iar valoarea afișată în consolă este noua luminozitate

Comanda va afișa următoarele erori pentru următoarele cazuri:

  • Invalid LED. - dacă valorile pentru x și/sau y nu sunt în intervalul 0-4
  • Invalid count value. - dacă valoarea pentru count nu este în intervalul 0-20.
  • Invalid brightness. - dacă valoarea pentru val este în afara intervalului 0-9.

Exemplu:

cmd: led on 2 3
cmd: led off 2 3
cmd: led blink 500 30 2 3
Invalid count value.
cmd: led toggle 2 3
cmd: led brightness set 4 2 4
4
cmd: led brightness 2 4
4
  • button <button> - button poate lua valoarea A sau B, reprezentând unul din cele două butoane de pe placă. Comanda afișează textul True dacă butonul specificat este apăsat și textul False dacă butonul nu e apăsat.

Comanda va afișa următoarele erori pentru următoarele cazuri:

  • Invalid button. - dacă button este diferit de a sau b

Exemplu:

cmd: button a
True
cmd: button b
False 
  • light - Afișează valoarea senzorului de lumină de pe placă.

Exemplu:

cmd: light
100
  • temperature <deg> - În funcție de valoarea lui <deg> care poate să fie C/F/K se va afișa valoarea temperaturii preluate de senzorul de temperatură în grade celsius, fahrenheit sau kelvin.

Pentru conversia de grade celsius in fahrenheit se va folosi formula: F = C * 1.8 + 32.

Exemplu:

cmd: temperature c
20
cmd: temperature f
68
  • echo [parametru] argumente [>/» fisier] - Afișează argumentele în consolă urmate de linie nouă.
    • -n nu adaugă o linie nouă la final
    • > fisier - Redirectează textul ce va fi afișat de comanda echo în fișierul fisier, iar pe ecran nu se va mai afișa nimic. Dacă fișierul nu există, el va fi creat. Dacă fișierul există, conținutul acestuia va fi suprascris.
    • » fisier - Redirectează textul ce va fi afișat de comanda echo în fișierul fisier, iar pe ecran nu se va mai afișa nimic. Dacă fișierul nu există, comanda va eșua și va afișa mesajul de eroare: Cannot append redirect. Dacă fișierul există, conținutul acestuia va fi adăugat la ce există deja în fișier.

Exemplu:

cmd: echo a b c
a b c
cmd: echo -n a b c
a b ccmd: echo my awesome text > my_awesome_file   
  • cat fișiere - Concatenează conținutul fișierelor și îl afișează la ieșirea standard. În caz de eroare se va afișa textul: Cannot print file..

Exemplu:

cmd: cat file1
Text in file1                       
cmd: cat file2
Text in file 2
cmd: cat file1 file2
Text in file1
Text in file 2 
cmd: cat f
Cannot print file.
  • mv sursă destinație - Redenumește fișierul sursă în destinație. În caz de eroare va afișa mesajul Cannot move file..

Exemplu:

cmd: mv my_file my_file2
cmd: mv f f2
Cannot move file.
  • rm [opțiune] fișiere - Șterge fișierele pasate ca parametru. Fără opțiuni, nu șterge decât fișiere care sunt goale. Dacă se încearcă ștergerea unui fișier care nu e gol se va afișa mesajul de eroare: Cannot remove file. File not empty..
    • -r, -R, --recursive șterge fișierele indiferent dacă sunt goale sau nu.

În cazul unei alte erori de ștergere exceptând File not empty, se va afișa mesajul: Cannot remove file. Exemplu:

cmd: rm my_file1 my_file2
cmd: rm my_file
Cannot remove file. File not empty.
cmd: rm -R my_file
  • ls [opțiuni] - Listează conținutul directorului. Fără opțiunea -a/–all, nu se afișează fișierele/ascunse (al căror nume începe cu .). Dacă primește ca parametru numele unui fișier, va afișa însuși parametrul. Fiecare fișier se va afișa pe o linie nouă.
    • -a, --all afișează și fișierele/directoarele ascunse (al căror nume incepe cu .)
    • -l, --long afișează informații privind dimensiunea fișierului sub forma: dimensiune nume.

Exemplu:

cmd: ls
File1
file2
cmd: ls -a
File1
File2
.hidden
cmd: ls -l -a
128 f1
0 f2
20 .f3
  • cp sursă destinație - Copiază un fișier cu numele destinație. În caz de eroare se va afișa mesajul Cannot copy file.

Exemplu:

cmd: cp my_file my_file2
  • set <var> <cmd> - Salvează rezultatul obținut în urma rulării comenzii cmd în variabila var. Valoarea variabilei va fi preluată folosind construcția $var, unde var e numele variabilei.

Exemplu:

cmd: set led_x 2
cmd: set led_y 3
cmd: led on $led_x $led_y

Dacă o comandă nu este folosită confom documentației și cazul nu este tratat de erorile descrise mai sus, se va afișa mesajul Invalid command.

Exemplu:

cmd: led 2 3
Invalid command.
cmd: bright
Invalid command.

Reguli de implementare

  • În implementarea temei se va folosi mediul de programare MicroPython pentru Micro:bit.
  • Fișierul generat va avea numele main.py, acesta este fișierul pe care sistemul de testare îl va lua în considerare.
  • Pentru implementarea comenzilor suportate, toate operațiile vor fi efectuate folosind doar funcții POSIX din biblioteca os specifică MicroPython (https://microbit-micropython.readthedocs.io/en/v1.0.1/os.html)și bilioteca microbit.
  • Programul realizat trebuie să aibă un comportament generic. Dacă observăm că tema este rezolvată doar pentru a trece anumite teste specifice, punctele corespondente acelor teste vor fi anulate din punctajul total.

Folosiți doar bibliotecile MicroPython os și microbit.

Trimiterea și verificarea temei

Tema se va încărca pe Github. Logați-vă pe site și accesați link-ul aferent temei.

Tema va fi testată automat pe Github pentru 40/100p. Restul testelor vor fi rulate manual, cu condiția ca tema să obțină cel puțin 20p din cele 40p obținute prin testare automată.

Testele manuale vor fi efectuare prin rularea următoarelor comenzi:

$ git clone <your_repository>
$ python3 main.py < input_test.in

Fișierele de input pentru testele manuale sunt disponibile pe github.

Fiecare fișier conține pe prima linie punctajul testului.

sde2/teme/tema_ro_2_microbit_busybox.txt · Last modified: 2021/04/06 12:25 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0