This shows you the differences between two versions of the page.
info2:laboratoare:02 [2021/03/08 01:08] alexandru.vochescu |
info2:laboratoare:02 [2021/03/09 14:55] (current) alexandru.vochescu [Exerciții] |
||
---|---|---|---|
Line 7: | Line 7: | ||
===== Cuvinte cheie ===== | ===== Cuvinte cheie ===== | ||
* for, if, while, vector | * for, if, while, vector | ||
+ | * basic, music | ||
+ | * show_string, show_number, show_leds, clear_screen, pause | ||
+ | * play_tone, start_melody | ||
===== Concepte de programare ===== | ===== Concepte de programare ===== | ||
Line 31: | Line 33: | ||
</code> | </code> | ||
- | Un lucru atipic la python față de multe limbaje de programare clasice, este faptul că acesta ne permite să avem valori din tipuri diferite de date în cadrul aceluiași vector (numere întregi, șiruri de caractere și valori logice). | + | Un lucru atipic la Python față de multe limbaje de programare clasice, este faptul că acesta ne permite să avem valori din tipuri diferite de date în cadrul aceluiași vector (numere întregi, șiruri de caractere și valori logice). |
==== If - Else ==== | ==== If - Else ==== | ||
Line 92: | Line 94: | ||
</code> | </code> | ||
+ | ===== Interacțiunea cu simulatorul în Python ===== | ||
+ | Pentru a putea interacționa cu simulatorul, fiecare din funcțiile expuse în Python de către placă trebuie prefixate cu "basic" (care este obiectul în care se află funcțiile respective). | ||
+ | |||
+ | Un exemplu de astfel de funcție este scrierea unui șir de caractere pe ecran: | ||
+ | <code python> | ||
+ | basic.show_string('Hello!') | ||
+ | </code> | ||
+ | |||
+ | ==== Interacțiunea cu led-urile de pe placă ==== | ||
+ | |||
+ | Funcțiile principale pe care le avem la dispoziție sunt: | ||
+ | * Afișarea unui șir de caractere pe ecran: | ||
+ | <code python> | ||
+ | basic.show_string('Hello!') | ||
+ | </code> | ||
+ | * Afișarea unui număr pe ecranul de led-uri: | ||
+ | <code python> | ||
+ | basic.show_number(0) | ||
+ | </code> | ||
+ | * Afișarea unei imagini din led-uri: | ||
+ | <code python> | ||
+ | basic.show_leds(""" | ||
+ | . # . # . | ||
+ | # # # # # | ||
+ | # # # # # | ||
+ | . # # # . | ||
+ | . . # . . | ||
+ | """) | ||
+ | # Se va afișa o inimă din Led-uri | ||
+ | # # - semnifică led aprins | ||
+ | # . - semnifică led stins | ||
+ | </code> | ||
+ | |||
+ | * Stingerea tuturor led-urilor de pe placă: | ||
+ | <code python> | ||
+ | basic.clear_screen() | ||
+ | </code> | ||
+ | * Întârzierea execuției programului cu un anumit număr de milisecunde: | ||
+ | <code python> | ||
+ | basic.pause(1000) | ||
+ | </code> | ||
+ | |||
+ | ==== Sunete folosind Python ==== | ||
+ | Funcții pentru redarea sunetelor folosind simulatorul de Microbit: | ||
+ | * Redarea unei singure note folosind obiectul "Note": | ||
+ | <code python> | ||
+ | freq = Note.D | ||
+ | music.play_tone(Note.C, 1000) | ||
+ | </code> | ||
+ | |||
+ | * Redarea unei melodii o singură dată: | ||
+ | <code python> | ||
+ | melody = music.built_in_melody(Melodies.ENTERTAINER) # Vom folosi o melodie predefinită | ||
+ | music.start_melody(melody, MelodyOptions.ONCE) # Redă o singură dată melodia | ||
+ | </code> | ||
+ | |||
+ | * Redarea unui sample până când se termină acel sample: | ||
+ | <code python> | ||
+ | soundExpression.giggle.play_until_done() | ||
+ | </code> | ||
+ | |||
+ | Funcționalitățile explicate mai sus, dar și altele pot fi găsite în [[https://makecode.microbit.org/reference|documentație]]. | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
- | Toate exercițiile vor fi realizate pe [[https://www.tinkercad.com/| Tinkercad]] | + | - Generați o secvență de imagini care să apară pe ecran la un anumit interval de timp. |
- | - Folosind un **VOLTMETRU** masurați voltajul de pe pinul GPIO 3. Setați pinul pe LOW/HIGH și observați cum se modifică valorile. | + | - Generați o secvență folosind ecranul din LED-uri. Veți genera mai întâi o imagine, iar după 2 secunde de întârziere, vă veți scrie prenumele (de preferat prescurtat) sau o poreclă. În final după încă o întârziere de 200 de milisecunde, veți aprinde toate led-urile de pe plăcuță (simularea umplerii ecranului). |
- | - Folosind un **ARDUINO**, un **LED** și o **REZISTENȚĂ de 220 ohmi**, aprindeti LED-ul **(NU folositi pinii GPIO)**, apoi masurați curentul și voltajul circuitului. | + | - Afișați pe ecranul format din led-uri numerele de la 1 la 10. |
- | - Folosind un **ARDUINO**, un **LED** și o **REZISTENȚĂ de 220 ohmi**, faceți un LED să clipească (rezolvați exercițiul în 2 modalități). | + | - Afișați pe ecran numerele pare de la 1 la 20. |
- | - Folosind un **ARDUINO**, **LED-uri** și **REZISTENȚE de 220 ohmi**, simulați un semafor de mașini și un semafor de pietoni care să fie sincronizate. Semafoarele vor fi implementate folosind led-uri și parcurgerea acestora trebuie făcută cu **șiruri/vectori** (rezolvați exercițiul în 2 modalități). | + | - Parcurgeți numerele de la 1 la 30: dacă numărul este divizibil cu 5, afișați o inimă, dacă numărul este divizibil cu 3 (dar nu și cu 5), afișați o față zâmbitoare, iar în orice alt caz afișați o față tristă. |
- | - Conectați la un **ARDUINO**, un **7 SEGMENT DISPLAY** și folosind funcții ajutătoare, afișați fiecare număr (0-9) pe display. Rezolați în 2 modalitați: folosind un **7 SEGMENT DISPLAY** cu **anod comun**, respectiv cu **catod comun**. | + | - Generați un vector de 20 de elemente aleatoare între 0 și 100. Apoi parcurgeți vectorul generat și calculați numărul de elemente care sunt divizibile cu 10 și numărul de elemente divizibile cu 9. Dacă numărul de elemente divizibile cu 10 este mai mare, afișați o față zâmbitoare pe ecran. În caz contrar, afișați o față tristă. **Hint**: pentru generarea de elemente aleatoare, uitați-vă în secțiunea Math, la funcția //randint//. |
- | - Folosind montajul anterior implementați un numarator ce afiseaza cifrele de la 0 la 9. | + | - Modificați proiectul anterior pentru a găsi numărul prim cel mai mare din vector și se va afișa pe ecran. Dacă nu există niciun număr prim în vector, se va genera o secvență în care toate led-urile se aprind de 3 ori cu o întârziere de 500 ms între ele. |
- | {{:info2:laboratoare:arduino-7-segment-display.png?200|100}} | + | - Modificați proiectul anterior astfel încât în caz de succes se va cânta melodia "Entertainer", iar dacă numărul nu este găsit se va reda melodia "Funeral". Se va folosi funcția //music.built_in_melody//. |
- | - Conectati 5 LED-uri si controlati-le astfel incat fiecare sa clipeasca pe rand: primul o data, al doilea de doua ori etc. | + | - Căutați pe google notele pentru melodia "Twinkle Twinkle little star" și creați un vector cu notele respective. Apoi folosiți funcția //play_tone// pentru a reda melodia. |
- | - Folositi un LED pentru a lumina un cuvant in cod morse. | + | - Adaptați proiectul anterior pentru a genera câte o imagine diferită pentru fiecare notă care este redată. |
- | - Folositi un buzzer cu acelasi scop. | + | - Creați un proiect nou în care veți reda aceeași melodie, folosind funcția //music.play_melody// (mai multe detalii în platformă, în meniul de //music//, primul bloc). Încercați să adaptați codul pentru a genera imagini în mod similar exercițiului anterior. |
+ | - Implementați redarea primelor note din melodia preferată. Modificați diverse variabile precum tempo-ul și volumul. | ||
+ | - Redați un sample precum cel din laborator și afișați o față zâmbitoare. |