This is an old revision of the document!


Laborator 03 - Set up BBC micro:bit

Resurse

Obiectivele laboratorului

  • Conectarea micro:bit-ului la PC
  • Încărcarea programelor pe micro:bit

Prezentare BBC micro:bit V2

BBC micro:bit este o placă de dezvoltare care folosește un microcontroller. Scopul acestui device este de a oferi studenților un bun start pentru a începe devoltarea competențelor în programare. Micro:bit V2 este un ARM Cortex M4, mic, ușor de utilizat. Este prevăzut cu 25 de LED-uri, pe care se pot afișa mesaje sau imagini, cu acclerometru pentru a detecta mișcarile, busolă, bluetooth, două butoane prin care se poate intercționa cu user-ul si alți senzori pe care-i vom descoperi pe parcursul laboratorului.

Programele se scriu pe PC și sunt încărcate pe BBC micro:bit, acestea rămân în memoria flash și se executa atunci când microcontroller-ul este alimentat.

Ce este un microcontroller? Microcontroller-ul este un calculator micșorat într-un singur chip, care poate rula câte un program o dată si consuma cu mult mai puțină decât un laptop sau un calculator. În plus, acestea sunt bune în a controla și a detecta semnalele electrice prin intermediul pinilor. Acestea se găsesc peste tot, de exemplu ceasul digital, cuptorul cu microunde, mouse-ul etc. sunt controlate de microcontrollere. Pentru mai multe informații despre acestea poți accesa acest link.

Set up

Pentru desfășurarea laboratoarelor, vom folosi MicroPython pentru a scrie programe pe micro:bit. Este un limbaj de programare creat pentru a lucra cu microcontrollere. Acesta este un subset al limbajului de programare numit Python.

Dacă ai BBC micro:bit V2 urmează instrucțiunile de la secțiunea "Conectarea micro:bit-ului la PC".

Dacă nu ai un BBC micro:bit urmează instrucțiunile de mai jos pentru a folosi simulatorul.

Utilizarea simulatorului de Micropython

Pentru desfășurarea laboratoarelor se poate folosi și simulatorul de MicroPython. Pentru a-l putea utiliza trebuie să tastați urmatoarele comenzi în terminal, dacă folosiți Windows tastați comenzile în cmd.

Dacă nu aveți Python3 instalat sau nu sunteți siguri că-l aveți urmați pașii din acest document.

Urmatorul pas este să tastați urmatoarele comenzi:

git clone https://github.com/ducklord420/PythonEditor.git
cd PythonEditor
git submodule update --init --recursive
py -m http.server --bind 0.0.0.0

Pentru a accesa simulatorul daca folosiți Linux sau MacOS scrieți comanda:

$ firefox editor.html

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.

Connectarea micro:bit-ului la PC

Primul pas pentru a conecta microcontroller-ul la calculator este să ne folosim de cablul micro USB din kit. Introduceți capatul USB tip B în partea de sus a micro:bit-ului, iar celălalt capăt în calculator.

Scrierea primului program în editorul de cod online

Pentru desfășurarea acestui laborator vom scrie programele într-un editor de cod online, numit Makecode creat de Microsoft.

Exemplul 1

Primul program pe care îl vom scrie va fi afișarea textului “Hello” pe cele 25 LED-uri, urmat de abrevierea “SdE”, care va fi stocat într-o variabilă.

from microbit import display  #import "diplay" from microbit library
 
name = "SdE" #declaration of a variable with a String
 
#all the code that is idented under the loop belongs to it
while True: #infinite looop
    # "display" is an object that refers to the LEDs, this method allows us to control them
    display.scroll("HELLO" + " " + name) # concatenation of Strings
 

Încărcarea pe micro:bit

Transferul de program se numește flashing deoarece programul este copiat în memoria flash a micro:bit-ului.

Metoda 1: Incarcarea fisierului .hex pe micr:obit

După conectarea microcontroller-ului în calculator va aparea “MICROBIT” ca un stick de memorie.

Următorul pas este sa salvam programul din editorul de cod ca fișier .hex. Se apasă pe butonul “Load/Save”, apoi acesta downloadează făcând click pe “Download Project Hex”, așa cum este reprezentat în imaginile de mai jos:

Ultimul pas pentru a încarca programul pe micro:bit este să deschideți folder-ul unde s-a salvat fisierul .hex downloadat și să-l copiați în “MICROBIT”. Programul se va compila automat pe microcontroller.

Metoda 2: Direct flash

Această metodă funcționează doar pentru editorul de cod online dintr-un browser Chrome sau Edge.

Primul pas este să se conecteze placuța apăsând pe butonul “Connect” din meniul editorului de cod.

Va apărea o fereastra similara cu cea de jos. Tot ce rămane de facut este să faceți click pe placuta “BBCmicrobit” pe care editorul o dectează, apoi click pe butonul “Connect”.

Ultimul pas pentru a flash-ui programul este să apasați pe butonul “Flash”. Este posibil să așteptați câteva secunde pana când programul va fi încarcat pe placută.

Programarea Python

Majoritatea limbajelor de programare precum C, C++, Java utilizează {} pentru a defini blocuri de cod. Contrar acestei convenții, Python folosește identarea pentru a separa diferite secvențe.

Un bloc de cod(corp de funcție, conținutul unei bucle) începe la prima linie identată și se termină la ultima linie care nu mai respectă identarea.

Trebuie să se țină cont de faptul că, în cazul în care o anumită linie se termină cu : este obligatoriu ca următoarea linie să fie identată.

De obicei, pentru identare se folosește un TAB, ca în exemplul următor:

for i in range(1,11):
    print(i)
    if i == 5:
        break

Variabile

Spre deosebire de alte limbaje de programare, în Python nu etse necesară declararea variabilelor sau tipul lor inainte de a le utiliza. Din acest punct de vedere, Python face parte din categoria limbajelor de programare dinamice, unde tipul variabilelor este interpretat la moemntul execuției.

Variabilele numerice

Python are 2 tipuri numerice: întregi și reale

# Sintaxa pentru a declara un număr întreg:
myInt = 7
 
# Sintaxa pentru a declara un număr real:
myFloat = 7.0
myFloat = float(7)

Variabile pentru șirurile de caractere

myString = 'hello'
myString = "hello"

Se poate realiza atribuirea valorilor pentru mai multe variabile.

# Instrucțiuni corecte
a, b = 1, 2             
suma = a  + b
# Instrucțiuni corecte
hello = "hello"
world = "world"
message = hello + " " + world
#Codul următor nu va funcționa
one = 1
two = 2
three = 3
hello = "hello"
 
print (one + two + three + hello)

Pentru a afișa rezultatul concatenării precedente, trebuie să folosim funcția str, care afce posibila conversia din variabile numerice in variabile de tip string:

one = 1
two = 2
three = 3
hello = "hello"
 
print ( str(one) + str(two) + str(three) + hello )

Structuri de date

Liste

Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente.

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.

Pentru a crea o listă care contine elemente de tip intreg vom rula următoarea linie de cod:

myList = [1,2,3,4,5]

Putem de asemeanea să creăm o listă goală, la care vom adăuga elemente ulterior:

# Declararea unei liste
 
mylist = []
 
# Inserarea elementelor
 
mylist.append(1)
mylist.append(2)
mylist.append(3)

Pentru a extrage un element din listă folosim o construcție de tipul lista[indice]:

mylist = [1,2,3]
 
# Afișarea fiecărui element
 
print( mylist[0] )
print( mylist[1] )
print( mylist[2] )
 
# Output
1
2
3

În toate limbajele de programare numerotarea elementelor dintr-o listă începe de la indicele 0.

Funcții predefinite pentru gestionarea listelor
Metode predefinite pentru gestionarea listelor

Dicționar

Un dicționar este o structură de date similară cu vectorii sau cu listele, dar funcționează cu cheie și valoare în loc de indice. Fiecare valoare stocată într-un dicționar poate fi accesată cu ajutorul unei chei, care poate fi reprezentată de orice tip de obiect(un șir, un număr, o listă etc.).

De exemplu, dicționarele pot fi utilizate pentru a implementa baze de date, Presupunând că avem o bază de date de studenți trebuie să reținem specializarea pentru care fiecare a optat.

Declararea unui dicționar
specialisation = {}
 
specialisation["Ana"] = "Informatique"
specialisation["Radu"] = "Electronique"

Sau

specialisation = {
   "Ana": "Informatique",
   "Radu": "Electronique"
}
Parcurgerea elementelor dintr-un dicționar
for nom, spec in specialisation.iteritems():
   print ("Le nom de l'optionel ou {} a été répartisé est: {}".format(nom, spec))
Eliminarea valorilor dintr-un dicționar
del optionalRepartizare["Ana"]
 
# sau
 
optionalRepartizare.pop("Ana")
Proprietățile cheilor într-un dicționar

Într-un dicționar nu există restricționări pentru valori, doar pentru chei, acestea trebuie să fie unice. În cazul în care nu se respectă această proprietate și există aceeași cheie de 2 ori, doar ultima înregsitrată va fi validă. De exemplu, pentru următoarea secvență de cod:

age = {
    "Ana" : 14,     
    "Ioana" : 13,     
    "Ana" : 16,     
    "Ioana" : 22,     
    "Ana" : 11
}
 
print ("Ana a  {} années et Ioana a {} années.".format(age["Ana"], age["Ioana"]))

Se va afișa mesajul urmator: “Ana a 11 années et Ioana a 22 années.”.

Funcții utile pentru dicționare
Metode utile pentru dicționare

numeDictionar.clear() → eliminarea tututot elemetelor dintr-un dicționar

Structura de decizie "if"

# Decizie simplă
 
a = 33
b = 200
if b > a:
  print("b is greater than a")
# Utilizare elif pentru a adăuga condiție suplimentară
 
a = 33
b = 33
if b > a:
  print("b is greater than a")
elif a == b:
  print("a and b are equal")
# Cuvantul cheie else care cuprinde tot ce nu a fost inclus anterior
 
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")
# else fară elif
 
a = 200
b = 33
if b > a:
  print("b is greater than a")
else:
  print("b is not greater than a")

Structurile repetitive

Bucla "for"

Contrar altor limbaje, care au forma strandard for(..) { code } pentru bucla for, Python a eliminat parantezele care arata iterarea unei liste si utilizează : pentru a indica începutul uni bloc de cos care va fi executat în interiorul buclei, ca în exemplul următor:

listaDeNume = ["Ana", "Maria", "Ioana", "Irina", "Andreea", "Cristina"]
 
for nume in listaDeNume:
    print (nume)

În Python, indicele pasului la care ne aflăm în timpul parcurgerii, nu este vizibil, iar pentru asta exista o metodă care numără pașii, numită enumerate:

cours= [ "Analyse", "SdE", "ALF"]
 
 
for index, hobby in enumerate(cours):
    print (index, hobby)
 
# Output:
0 Analyse
1 SdE
2 ALF

O altă funcție este ultilitarul zip, care permite oarcurgerea a două liste simultan.

lista1 = [ 3, 9, 17, 15, 19]
lista2 = [ 2, 4, 30, 24, 3]
 
for a, b in zip( lista1, lista2 ):
    if a > b:
        print (a)
    else:
        print (b)
 
# Output:
 
3
9
30
24
19

O altă particularitate a limbajului Python este faptul că se poate aplica conditioa else si pentru bucla for. În acest caz, ramura else va fi executată după bucla for, dacă și numai dacă în interiorul buclei for nu există p declarație de tip break. De exemplu:

listeAnimaux = [ "loup", "lapin", "lion", "ours" ]
 
for i in listeAnimaux:
   print (i)
   if i == "lapin"
     print ("Le lapin n'est pas sauvage")
     break
else:
   print ("Tous les animaux!")
 
# Output
loup
lapin
Le lapin n est pas sauvage
 
#Si on execute la sequence suivante:
for i in listeAnimaux:
   print (i)
   if i == "lapin"
     print ("Le lapin n'est pas sauvage")
else:
   print ("Tous les animaux!")
 
# Output
loup
lapin
Le lapin n est pas sauvage
lion
ours
Tous les animaux!

Bucla "while"

#Afficher les chiffres de 0 a 9
 
count = 0
 
while count < 10:
    print (count)
    count = count + 1

Ca și pentru bucla for există, de asemnea, posibilitatea de a aplica condița else pentru bucla while. Diferența este că blocul else va fi executat de fiecare dată când condiția de la structura repetitivă va fi evaluată ca și falsă:

print ("Dévinez de numéro de l'intervalle [ 1, 10 ]")
 
monNr = 7
votreNr = 0
 
while votreNr!= monNr:
    votreNr = int( input("Choisissez. ") )
else:
    print ("Félicitations!")

Break și Continue

Instrucțiunea break este utilizată pentru a ieși dintr-o structură repetitivă. De exemplu, se pot afișa numerele de la 0 la 9 în felul următor:

count = 0
 
while True:
    print (count)
    count = count + 1
    if count > 10:
        break

Continue este utilizat pentru a ignora un bloc de instrucțiuni. De exemplu, il putem utiliza pentru a afișa numerele pare de la 0 la 20 astfel:

number = 0
 
while number < 21:
    if number % 2 == 1
        continue
    print (number)

Funcții

Declarație

def myFunction():
   print ("Welcome")
 
# sau
 
def simpleSum( a, b ):
   return a + b

Apel

myFunction()
 
# sau
 
first = 1
second = 1
sum = simpleSum( first, second )
print (sum)
 
print (simpleSum( first, second ))

Clase și obiecte

Un obiect este o încapsulare de variabile și de funcții într-o singură entitate, în timp ce o clasă reprezintă un model pentru a crea obiecte. În concluzie, un obiect își ia datele dintr-o clasă.

# Classe simple
 
class MaClasse:
   variable = "Bonjour"
 
   def maFonction(self):
      print ("Bonjour de l'autre part!")
 
 
# Association classe objet
monObjet = MaClasse()
 
 
# Afficher le contenu de la variable de MaClasse
print (monObjet.variable)
 
# Appeler la fonction maFonction, qui va afficher sur l'écran le message "Bonjour de  l'autre part!"
monObjet.maFonction()

În Python self reprezintă instanța unei clase, fiind identică cu this din Java. Utilizând cuvantul-cheie self, se pot accesa atributele și metodele definite în clasă.

Numărul de obiecte care pot fi create dintr-o clasă nu este limitat, acestea moștenesc toate caracteristicle clasei(variabile și funcții). Cu toate acestea, fiecare obiect conține copii independente ale variabilelor definite în interiorul clasei. Prin urmare, dacă se creaza un obiect nou din clasa mamă, se poate modifica conținutul făra a afecta clasa ințială.

class MaClasse:
   variable = "Bonjour"
 
   def maFonction(self):
      print ("Bonjour de l'autre part!")
 
monObjet1 = MaClasse()
monObjet2 = MaClasse()
 
monObjet2.variable = "au revoir"
 
print (monObjet1.variable)
print (monObjet2.variable)
 
#Output
bonjour
au revoir

Funcții matematice

Pentru a putea utiliza funcții care execută operații matematice în Python, trebuie ca modulul math să fie importat.

import math

Fiecare funcție a bibliotecii math se apelează astfel:

math.functionName( params )

Câteva funcții elementare: floor, ceil, pow, sqrt.

Există funcții predefinite care nu necesită să fie importate dintr-un modul auxiliar. Sunt apelate astfel:

functionName( params )

Exemple de funcții din acestă categorie: abs, round, sum.

O listă completă de funcții matematice din Python poate fi găsită aici.

Citirea de la tastatură

Datele de intrare pot fi citite de la tastaura, pentru asta există funcția input(). Aceasta poate avea și parametrii suplimentari, string-ul care va fi afoșsat în linia de comanda la momentul citirii datelorȘ

name = input("Quel est votre nom? ")
print("Bienvenue, " + name + "!")
# Output dans la ligne de commande
Quel est votre nom? "Ana"
Bienvenue, Ana!

Rulați exemplul de mai sus pe BBC micro:bit. Conectați placuta și deschideți editorul de cod. Conectați plăcuța iar apoi apăsați Flash. După cateva secunde deschideți faceți click pe Open Serial. Veți avea un output similar cu cel de jos, ce rămâne de făcut este să introduceți de la tastatură input-ul. Pentru a reveni apăsați pe Close Serial.

Excepții în Python

Există 2 tipuri de execpții: erori de sintaxă și de excepții.

Erorile de sintaxă, cunoscute sub numele de erori de analiză (parsing error) sunt cele mai cunoscute:

>>> while True print('Hello world')
  File "<stdin>", line 1
    while True print('Hello world')
                   ^
SyntaxError: invalid syntax

Excepțiile apar la momentul execuției:

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

Gestionarea excepțiilor

Pentru a rezolva execpțiile în Python, se utilizează bloc-ul try-except, ca în exemplul următor:

while True:
    try:
        x = int(input("Please enter a number: "))
        break
    except ValueError:
        print("Oops!  That was no valid number.  Try again...")

Input devices sau butoane

În schema microcontroller-ului prezentată anterior, se poate observa faptul că micro:bit-ul are trei butoane.

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.

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 o metoda is_pressed(), care va returna True dacă butonul este apăsat, în caz contrar metoda va returna False.

În acest exemplu vom folosi condiționalul “if” sau “if statement”.

# Simple decision
a = 33
b = 200
if b > a:
  print("b is greater than a")
# Use "elif" to add an additional condition
a = 33
b = 33
if b > a:
  print("b is greater than a")
elif a == b:
  print("a and b are equal")
# 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")
# Else without elif
a = 200
b = 33
if b > a:
  print("b is greater than a")
else:
  print("b is not greater than a")

Exemplul 2

Programul urmator va afișa pe display litera ”A” daca butonul A este apăsat, respectiv 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.

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)

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 "Compass and Accelerometer”. Acesta poate măsura acclerarea în toate cele trei dimensiuni, anume accelerarea stânga-dreapta, accelerarea față-spate și 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 și un diamant dacă este pus cu fața în sus.

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()

Direcții. Busolă

Senzorul pentru busolă deceteaza câmpuri magnetice ale Pământului și este amplasat tot pe spatele micro:bit-ului, precum 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 și 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ți 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.

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(' ')

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 accesat. Acesta poate măsura nivelul de sunet din jurul plăcuței și poate reacționa la sunete înalte sau mai joase.

Tot in partea din spate exista pe PCB un difuzor(speaker) magnetic 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 a crea efectul de licărire se folosește funcția set_pixel(), caruia i se dau ca parametrii linia, coloana și valoarea pixelului.

from microbit import display, microphone, SoundEvent, Image, sleep
import random
 
lit = True
 
while True:
    if microphone.was_event(SoundEvent.LOUD): #check if a 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()

Senzorul de atingere

Micro:bit-ul are senzorul de atingere amplasat pe 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 atunci, se va afișa mesajul “Hello” altfel, display-ul va fi neluminat.

from microbit import display, pin_logo
 
while True:
    if pin_logo.is_touched():
        display.scroll("Hello")
    else:
        display.clear() #display stays empty

Senzorul de temperatura și de lumină

Senzorul de temperatură înregistrează cu aproximație temperatura din jurul micr:obit-ului, iar senzorul de 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ță.

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()

Exerciții

  1. Scrieți un program care la apăsarea simultană a butoanelor A și B va afișa o imagine care reprezintă “DA”, iar dacă niciun buton nu este apăsat va apărea o imagine care reprezintă “NU”. Pentru imagini vezi documentația.
  2. 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”.
  3. 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.
  4. 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ți metoda sleep
  5. Scrieți un program care la atingerea logo-ului(senzorul de atingere) să faca toggle între o imagine cu diamant și imagine cu diamant mic.
  6. 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 gol. Afișati nivelul de sunet la o acțiune la alegere(apăsare unui buton, atingerea logo-ului, înclinare etc.)
  7. Modificați codul de la 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 documentația.
sde2/laboratoare/02_microbit_ro.1615969726.txt.gz · Last modified: 2021/03/17 10:28 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