Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:laboratoare:02_microbit_ro [2021/03/17 10:21]
ioana_maria.culic [Excepții în Python]
sde2:laboratoare:02_microbit_ro [2021/03/22 11:05] (current)
alexandra.state2607 [Exerciții]
Line 16: Line 16:
   * Conectarea micro:​bit-ului la PC   * Conectarea micro:​bit-ului la PC
   * Încărcarea programelor pe micro:bit   * Încărcarea programelor pe micro:bit
 +  * Definirea variabilelor folosind limbajul Python
 +  * Familiarizarea cu structurile de date folosind limbajul Python
 +  * Utilizarea structurilor repetitive și utilizarea funcțiilor folosind limbajul Python
 +  * Crearea claselor și a obiectelor folosind limbajul Python
  
  
Line 56: Line 60:
 </​code>​ </​code>​
  
-Pentru a accesa simulatorul ​daca folosiți Linux sau MacOS scrieți comanda: +Pentru a accesa simulatorul ​deschideti un browser si accesati pagina ''​http://​localhost:​8000/​editor.html''​.
-<​code>​ +
-$ firefox editor.html +
-</code> +
- +
-Dacă folosiți Windows fie puteți folosi comanda anterioară,​ fie intrați in folder-ul "​PythonEditor"​ și faceți click pe "editor.html".+
  
 Pentru a simula codul faceți click pe "​Sim"​. Testați pentru **Exemplul 1** din secțiunea următoare. Pentru a simula codul faceți click pe "​Sim"​. Testați pentru **Exemplul 1** din secțiunea următoare.
Line 125: Line 124:
 {{ :​sde2:​laboratoare:​flash.png?​250 | }} {{ :​sde2:​laboratoare:​flash.png?​250 | }}
  
 +<note info> 
 +Pentru a vizualiza mesajele printate în consolă, trebuie să selectăm opțiunea ''​Open Serial''​ care va deschide terminalul cu un interpretorul de Python. 
 +</​note>​
 ===== Programarea Python ===== ===== Programarea Python =====
 <note warning> <note warning>
Line 210: Line 211:
  
 === Liste === === Liste ===
-Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente. ​Listele pot fi iterate într-un mod simplu, ca în exemplul următor:+Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente. ​
  
 +<note warning> Desi Python permite adaugarea de elemente de tipuri diferite in aceeasi lista, este recomandat sa nu faceti acest lucru care poate duce la aparitia a multe erori in program.</​note>​
 +
 +Pentru a crea o listă care contine elemente de tip intreg vom rula următoarea linie de cod:
 +<code python>
 +myList = [1,2,3,4,5]
 +</​code>​
 +
 +Putem de asemeanea să creăm o listă goală, la care vom adăuga elemente ulterior:
 <code python> <code python>
 # Declararea unei liste # Declararea unei liste
Line 217: Line 226:
 mylist = [] mylist = []
  
-# Inserarea ​elemntelor+# Inserarea ​elementelor
  
 mylist.append(1) mylist.append(1)
 mylist.append(2) mylist.append(2)
 mylist.append(3) mylist.append(3)
 +</​code>​
 +
 +Pentru a extrage un element din listă folosim o construcție de tipul ''​lista[indice]'':​
 +
 +<code python>
 +
 +mylist = [1,2,3]
  
 # Afișarea fiecărui element # Afișarea fiecărui element
Line 236: Line 252:
  
 <​note>​ <​note>​
-În toate limbajele de programare numerotarea elementelor dintr-o listă începe ​ de la indicele 0.+În toate limbajele de programare numerotarea elementelor dintr-o listă începe de la indicele 0.
 </​note>​ </​note>​
 +
 +==Funcția range==
 +<note warning>
 +Informațiile din această secțiune se aplică doar pentru folosirea limbajului Python pentru micro:bit.
 +</​note>​
 +Pentru a crea o listă cu elemente numere întregi, putem folosi funcția ''​range''​ care întoarce o listă cu toate numerele întregi dintr-un anumit interval. Funcția are urmăatarea definiție: ''​range(start,​ stop, pas)'',​ unde ''​start''​ este prima valoare din listă, ''​stop''​ este valoarea de oprire (valoarea nu este inclusă), ''​pas''​ este pasul de incrementare și este un parametru opțional (valoarea default e 1).
 +
 +**Exemplu**
 +
 +Pentru a crea o listă cu valori pare de la 2 la 12, vom rula următoarea linie de cod:
 +
 +<code python>
 +mylist = range (2, 13, 2)
 +</​code>​
  
 ==Funcții predefinite pentru gestionarea listelor == ==Funcții predefinite pentru gestionarea listelor ==
Line 279: Line 309:
 </​code>​ </​code>​
  
-== Parcurgerea ​eleemntelor ​dintr-un dicționar ==+== Parcurgerea ​elementelor ​dintr-un dicționar ==
  
 <code python> <code python>
Line 683: Line 713:
 </​code>​ </​code>​
  
 +===== Exerciții ======
  
-===== Input devices sau butoane ===== +   Creați 3 variabile de tipuri diferiteca mai jos, și afișați-le în consolă:  **(0.5p)** 
- +     o variabilă //int// cu valoarea 80 
-În schema microcontroller-ului prezentată anteriorse poate observa faptul că [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​prezentare_bbc_microbit|micro:​bit-ul]] are trei butoane.  +     ​- ​variabilă //float// având valoarea 20.2 
- +     - o variabilă ​"string", ​care va reține ​șirul "python" 
-Cel de pe spate este pentru ​**reset**. Dacă acest buton este apăsat timp de cinci secunde microcontroller-ul va opri rularea programului care este încarcat. Totodată, dacă butonul de reset este apăsat scurt programul care este flash-uit pe placuță se va reseta.  +   ​- ​Utilizând funcția ​[[https://docs.python.org/2/library/functions.html#type|type]] determinați tipul variabilelor următoarePentru ​afișare putețfolosi ​[[https://​www.w3schools.com/python/​ref_func_print.asp|print]], iar pentru a vedea output-ul deschideți serialul //Open Serial// ​**(0.5p)** 
- +     - var1 = 80 
-Pe partea din față se pot observa două butoane A și B, care pot fi accesate în cod astfel ​//button_a// și //​button_b//​. Acestea au metoda //​is_pressed()//,​ care va returna //True// dacă butonul este apăsat, în caz contrar metoda va returna ​//False//. +     - var2 20.2 
- +     - var3 "​microbit"​ 
-În acest exemplu vom folosi condiționalul “if” sau “if statement”. +   ​Scrieți un program care primește ca parametrii de la linia de comandă 4 numere ​și afișați ​rezultatul calculuilui a+b*c-d**(1p)** 
- +   ​Creați o listă cu prenumele colegilor de clasa, acestea ​se pot repetaAdăugați cel puțin un element folosind metoda ​//append()//. Rezolvați următoarele cerințe: **(2p)** 
-<code python>​ +     - Copiați lista inițială într-altă listă numită copyList și sortați-o în ordine alfabetică 
-# Simple decision +     - Determinați numarul de apariții al fiecarui nume folosind ​o listă auxiliară care conține elemente distincte 
-a = 33 +     - Determinați numele ​care are numarul maxim de apariții în listă și numele cu numărul minim de apariții (dacă exista mai multe elemente ​care respectă condiția ​se vor afișa ​toate) ​  
-b = 200 +     - Inversați lista copyList ​și ștergeți ultimul element din lista inițială
-if b > a: +   - Întocmiți o bază de date al unui magazin de electrocasnice cu ajutorul dicționarului. Adăugati funcționalitatea ca atunci cand se citește ​de la tastatură un produs ​să se afișeze prețul acestuiaSe va afișa o eroare dacă produsul nu există "Error" și se caută produse până cand se introduce textul "​stop"​**(2p)** 
-  print("b is greater than a"+   - Scrieți un program, care va afișa rezultatul returnat ​de funcția //digitize(n)//. Această funcție va primi ca si parametru un int și va returna o lista cu cifrele numărului în ordine inversă**(1p)** Exemplu: 348597 =[7,9,5,8,4,3] 
-</​code>​ +   - Creați o clasă Senzori folosită pentru ​stoca valori provenind de la următorii senzoritemperatură,​ lumină, umiditatePentru fiecare senzor se pot citi și modifica valorile prin apeluri de funcții**(1p)** 
- +   - Creați un program care folosind clasa definită mai sus reține valori provenind de la seturi diferite de senzori pentru următoarele încăperi a unei locuințe si le afișează pe ecranbucătărieholdormitor, sufragerieProgramul realizează operațiile prin primirea de comenzi din consolă astfel: **(2p)** 
-<code python>​ +    ​* ''​insert ​<încăpere<​sensor>​ <​value>'' ​unde ''<​incapere>''​''<​sensor>''​ si ''<​value>''​ vor fi înlocuiți cu unul din cei 3 senzori ​și o valoare ​inserează o valoarea nouă pentru ​senzorul ​respectiv 
-# Use "​elif"​ to add an additional condition +    * ''​delete <​încăpere>​ <​sensor>​ <​value>''​ - șterge valoarea pentru senzorul respectivvaloarea după ștergere ​va fi 0 
-a = 33 +    * ''​print ​<incapere><sensor>''​ - afișează valoarea pentru senzorul ​din încăperea precizată 
-b = 33 +    * ''​print <​incapere>'' ​- afișează toți senzorii și valorile aferente pentru încăperea precizată 
-if b > a: +    * ''​add_room ​<incapere>''​ - adaugă un nou set de senzori pentru o nouă încăpere 
-  print("​b is greater than a") +    ​* ''​del_room ​<incapere>'' ​șterge setul de senzori pentru o încăpere 
-elif a == b: +  Dacă se introduce ​altă comandă, programul ​va arunca ​excepție
-  print("​a and b are equal"​) +== Bonus == 
-</​code>​ +  ​- Modificați ​programele anterioare pentru a afișa ​valorile pe micro:bitnu în consolă. 
- +  Creați un program care aprinde ​pe rând fiecare LED de pe micro:bit. 
-<code python>​ +  - Creați un program care citește temperatura ambientală folosind senzorul ​de pe micro:bit și o afișează folosind LED-urile.
-# The "​else"​ keyword takes anything that has not been included before +
-a = 200 +
-b = 33 +
-if b > a: +
-  print("​b is greater than a") +
-elif a == b: +
-  print("​a and b are equal"​) +
-else: +
-  print("​a is greater than b") +
-</​code>​ +
- +
-<code python>​ +
-# Else without elif +
-a = 200 +
-b = 33 +
-if b > a: +
-  print("​b is greater than a") +
-else: +
-  print("​b is not greater than a") +
-</​code> ​  +
- +
-==== Exemplul 2 ==== +
- +
-Programul urmator va afișa pe display litera ”A” daca butonul A este apăsatrespectiv litera “B” daca butonul B este apăsat. Dacă niciun buton nu este apăsat ​va afișa pe dislapay o imagine, care reprezintă un emoticon confuz. +
- +
-<​code ​python> +
-from microbit import display, button_a, button_b, Image  +
- +
-while True:   ​#infinite looop +
-    if button_a.is_pressed():​ #check if the button A is pressed +
-        display.scroll("​A"​) +
-    elif button_b.is_pressed():​ #check if the button B is pressed +
-        display.scroll("​B"​) +
-    else: +
-        display.show(Image.CONFUSED) +
-</​code>​ +
- +
- +
-===== Accelerometru. Gesturi ===== +
- +
-Micro:bit poate să recunoască gesturi precum înclinare sau scuturare.  +
-Pe spatele microntroler-ului, în partea de jos, se poate vedea un chip mic, care reprezintă un **accelerometru**,​ numit [[https://ocw.cs.pub.ro/courses/sde/laboratoare/​02_microbit_ro?&​#prezentare_bbc_microbit|"​Compass and Accelerometer”]].  Acesta poate măsura acclerarea în toate cele trei dimensiuni, anume accelerarea stânga-dreapta,​ accelerarea față-spate șaccelerarea sus-jos. +
- +
-Ce este un accelreometru?​ Un accelerometru are rolul de a măsura și a analiza accelerațiile liniare și unghiulare, de exemplu, masinile moderne folosesc un accelerometru care detectează un accident pentru a declansa airbag-urile. +
- +
-==== Exemplul 3 ==== +
-În acest exemplu vom explora acclerometrul ​afișând pe display-ul micr:​obit-ului un pătrat dacă acesta este înclinat către stânga, un tringhi dacă acesta este înclinat către dreapta șun diamant dacă este pus cu fața în sus. +
- +
-<code python>​ +
-from microbit import display, accelerometer,​ Image +
- +
-while True: +
-    if accelerometer.current_gesture() == "​left":​ +
-        display.show(Image.SQUARE) +
-    elif accelerometer.current_gesture() == "​right":​ +
-        display.show(Image.TRIANGLE) +
-    elif accelerometer.current_gesture() == "face up": +
-        display.show(Image.DIAMOND) +
-    else: +
-        display.clear() +
-</​code>​ +
- +
-===== Direcții. Busolă ===== +
- +
-Senzorul pentru ​[[https://​www.youtube.com/watch?​v=a3P6LWwPBqM&​feature=emb_logo|busolă]] deceteaza câmpuri magnetice ale Pământului și este amplasat tot pe spatele micro:​bit-uluiprecum acclerometrul. Acesta este folosit ​pentru a decta dacă un magnet se afla prin preajma micro:bit-ului sau pentru navigare, poate arata direcțiile Nord, Sud, Est șVest+
- +
-==== Exemplul 4 ==== +
- +
-În acest exemplu vom vedea cum micr:obit-ul poate fi folosit ca o busolă. __Atenție__:​ Imediat după ce ați rulat codul trebuie să așteptațpuțin pană se afisează textul care spune “TITLING FILL”, iar apoi pe rând se va afișa ​căte un LED; trebuie să înclinați micro:bit-ul până display-ul se va lumina complet. +
- +
-<code python>​ +
-from microbit import display, compass +
-compass.calibrate() +
- +
-while True: +
-    degrees = compass.heading() +
-    if degrees < 45 or degrees > 315: +
-        display.show('​N'​) +
-    elif degrees < 135: +
-        display.show("​E"​) +
-    elif degrees < 225: +
-        display.show("​S"​) +
-    elif degrees < 315: +
-        display.show("​W"​) +
-    else: +
-        display.show('​ ') +
-</​code>​ +
- +
-===== Microfonul și Speaker-ul ===== +
- +
-BBC micro:bit V2 are fixat pe spate microfonul, iar pe partea din față se observa indicatorul,​ care lumineaza atunci cand acesta aste accesatAcesta poate măsura nivelul de sunet din jurul plăcuței șpoate reacționa la sunete înalte sau mai joase. +
- +
-Tot in partea din spate exista pe [[https://www.allaboutcircuits.com/technical-articles/what-is-a-printed-circuit-board-pcb/​|PCB]] un difuzor(speakermagnetic din care rezultă ca output sunetul. +
- +
- +
-==== Exemplul 5 ==== +
-Acest exemplu simulează o lumânare. După importarea bibliotecilor se declară un contor ​numit //lit//, care inițial are valoarea True. Apoi se verifica dacă a fost înregistrat un sunet puternic ​folosind ​funcția //​was_event()//, ​care totodată șterge istoricul evenimentelor sonore înainte ​de a returna. Dacă cea din urma returnează True se schimba valoare contorului, anume valoarea lui //lit//. În cazul în care lumânarea este aprinsă se va afișa ​pe display o imagine care o simuleaza o lumânare ​și care va face flacăra să licarească la o poziție random ​de la 1 la 3.  +
- +
-Pentru a crea **imaginea** este necesar ​să dăm valori fiecarui pixel de pe display. Valoarea 0 însemna ca led-ul respectiv este oprit, nu lumineazăValorile între 1 și 9(valoarea maximă) arată nivelul de luminozitate al pixelului. Pentru a reprezenta o linie valorile sunt închise în //""​// și se termină cu //:// În acest exemplu, ​ se observă faptul că fiecare linie din //Image()// reprezintă ​ poziționarea led-urilor de pe display-ul fizic al mico:​bit-ului. Prin urmare, analizând prima linie, care sugerează flacăra, toate led-urile sunt oprite cu exceptia celui de pe pozitia 3, care are pixel-ul setat la luminozitate maximă. Restul liniilor sunt asemenea pentru a forma restul lumânării,​ pozițiile 1 și 5, au pixel-ul setat la valoarea 0, iar restul la valoarea 9. +
- +
-Pentru ​crea **efectul ​de licărire** se folosește ​funcția //set_pixel()//, caruia i se dau ca parametrii linia, coloana ​și valoarea pixelului. +
- +
-<code python> +
-from microbit import displaymicrophoneSoundEventImagesleep +
-import random +
- +
-lit = True +
- +
-while True: +
-    if microphone.was_event(SoundEvent.LOUD):​ #check if loud sound was +
-        lit = not lit +
-        sleep(500) +
-    if lit: +
-        display.show(Image( #candle image +
-        "​00900:"​ +
-        "​09990:"​ +
-        "​09990:"​ +
-        "​09990:"​ +
-        "​09990"​)) +
-        sleep(150) +
-        flicker = random.randint(1, 3+
-        if flicker != 2: +
-            display.set_pixel(2,0,0) +
-            display.set_pixel(flicker,​0,​9) +
-        sleep(150+
-    ​else: +
-        display.clear() +
-</code> +
- +
- +
-===== Senzorul de atingere ===== +
- +
-Micro:bit-ul are senzorul de atingere amplasat pe [[https://​www.youtube.com/​watch?​v=spFD3SxxxHQ&​feature=emb_logo|logo]]care poate fi folosit ca și input. Acesta poate interacționa cu user-ul precum un buton. +
- +
-  +
- +
-==== Exemplul 6 ==== +
-În acest exemplu se verifică dacă senzorul ​este atins atuncise va afișa mesajul “Hello” altfel, display-ul ​va fi neluminat. +
- +
-<code python> +
-from microbit import display, pin_logo +
- +
-while True: +
-    if pin_logo.is_touched():​ +
-        display.scroll("​Hello"​) +
-    else: +
-        display.clear() #display stays empty +
-</code> +
- +
-===== Senzorul de temperatura ​și de lumină ===== +
- +
-Senzorul de [[https://​youtu.be/​mrHn8eZ9eqg|temperatură]] înregistrează cu aproximație temperatura ​din jurul micr:​obit-ului,​ iar senzorul de [[https://​youtu.be/​ii0U_FMr-Z4|lumină]] poate înregistra nivelul de lumină prin intermediul LED-urilor. +
- +
-==== Exemplul 7 ==== +
- +
-Exemplul urmator afisează temepratura dacă butonul A este apăsat, iar dacă deasupra LED-urilor micro:​bit-ul înregistrează o lumină puternică va afișa pe display un soare. Pentru a testa senzorul de lumină, în acest exemplu puteți îndrepta lumina de la lanterna telefonului către plăcuță. +
- +
-<code python> +
-from microbit import display, button_a, Image, temperature +
- +
-while True: +
-    ​if button_a.was_pressed():​ +
-        display.scroll(temperature()) #displat the temperature +
-    elif display.read_light_level() > 100: #check the light level +
-        display.show(Image( #sun image +
-        "​90909:"​ +
-        "​09990:"​ +
-        "​99999:"​ +
-        "​09990:"​ +
-        "​90909"​)) +
-    else: +
-        display.clear() +
-</code> +
- +
-===== Exerciții ===== +
- +
-   Scrieți un program care la apăsarea simultană a butoanelor A și B va afișa ​imagine care reprezintă "​DA"​iar dacă niciun buton nu este apăsat ​va apărea ​imagine care reprezintă "​NU"​. Pentru imagini vezi [[https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​tutorials/​images.html|documentația]]+
-   ​- Modificați ​exercițiul anterior astfel încât la apăsarea butonului A se va afișa ​litera "​A"​iar la apăsarea butonului B se va afișa litera "​B"​+
-   ​Scrieți un program care afișeaza ​pe display numărul curent ​de scuturări. Când micro bit-ul înregistrează 9 scuturări pe display va apărea o imagine+
-   ​- Creați un program care înregistrează numarul ​de înclinări către stanga și către dreapta. De fiecare data când micro:bit-ul este îndreptat în una dintre cele două părți să se afișeze numărul curent de înclinări către partea respectivă. //Hint//: folosițmetoda [[https://​microbit-micropython.readthedocs.io/​en/​v1.0.1/​microbit.html#​microbit.sleep|sleep]] +
-   - Scrieți un program care la atingerea logo-ului(senzorul de atingere) să faca toggle între ​imagine cu diamant și imagine cu diamant mic. +
-   - Să se scrie un program, care la înregistrarea unui sunet va afișa pe display o imagine și va rosti cu ajutorul speech-ului "​ON"​. Dacă nu este înregistrat niciun sunet display-ul rămâne golAfișati nivelul de sunet la o acțiune la alegere(apăsare unui buton, atingerea logo-ului, înclinare etc.)  +
-   - Modificați codul de la [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​senzorul_de_temperatura_si_de_lumina|exemplul 7]] astfel încât micro:​bit-ul detectează lumină să folosească speaker-ul pentru a reda muzica JUMP_UP, iar când lumina este oprită să redea muzica JUMP_DOWN. Pentru acesarea bibliotecii "​music"​ vezi [[https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​tutorials/​music.html|documentația]]. +
- +
- +
-  +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-  +
- +
  
 +==== ====
  
 +[[https://​github.com/​UPB-FILS-SdE2/​Solutions/​tree/​main/​TP3|Soluții]]
  
  
sde2/laboratoare/02_microbit_ro.1615969317.txt.gz · Last modified: 2021/03/17 10:21 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