En aquesta unitat anirem coneixerem makecode. El programa és molt interactiu, per tant anirem coneixent-lo a mesura que anem fent pràctiques amb ell. Podeu trobar el mateix manual i programes a la web: https://microbit.org/es/code/
Aquí tenim una breu explicació del joc d'instruccions:
A l’esquerra veieu el simulador.
En colors, hi ha les diferents instruccions de programació.
A la dreta, els blocs de makecode, a l’estil Scratch.
Podem treballar amb els leds i amb dos polsadors que inclou la targeta: A i B
Els leds tenen una posició en la matriu, però no és la típica element(fila, columna), ans al revés.
Si atanseu el ratolí al damunt del led, us dirà la seva posició. Altrament, si us poseu amb el ratolí al damunt d'un bloc, ens apareix un text per aclarir-nos la seva funció.
Per enviar el programa: clic a Download (part inferior esquerra).
Per desar-lo, cliqueu al disc. Es troba també a la part inferior esquerra. Poseu-li un nom que us permeti reconèixer-lo. A mesura que n’aneu creant ho agraireu.
Bucle On start: S’executa quan s’inicia el programa.
Bucle Forever: El programa s’executa sempre.
Hem declarat la variable counter, i usat els polsadors A, B i A+B.
Explica i simula el programa.
Podem definir vectors. Podem llegir cada element.
Canvia el número 1 pels números 0,1,2,3 i digues què passa.
Es pot fer aquest programa amb els noms dels millors amics, etc. Al fer-ho, prova d'accedir als valors emmagatzemats al vector creant una variable anomenada index, com al programa. Endavant!!
Hem creat un array de números, anomenat list. És un vector, ja que només té una columna. Si comparem el vector amb un armari, accedim a cada calaix amb un índex (variable que hem creat per a l'ocasió).
Per exemple, list[4] = 4. En aquest cas he fet coincidir cada valor del calaix, amb el valor de l'índex. O sia, el que hi ha dins del calaix coincideix amb el número que l'identifica i permet accedir-hi.
Prova de canviar la instrucció change del bucle Forever pel set, i compara el que s'ha emmagatzemat en cada cas a la variable index.
En aquest primer exemple, veiem com imprimir els valors d'un array, mitjançant un bucle for.
El bucle for és en essència un comptador, i en aquest cas va imprimint els valors de la llista: 2,4,6,8
Noteu que els índex són list[0], list[1], list[2], list[3]. El valor de cada índex és, respectivament, 2,4,6,8
Com que per la pantalla no podem visualitzar dues coses a la vegada, podem fer servir l'escriptura al port sèrie de micro:bit: si escrivim el valor, ha de coincidir amb la de la pantalla/matriu de leds. En canvi, l'índex va de zero al darrer valor de la matriu, en aquest cas 3.
Clica al botó "Show console Simulator" , a sota de la targeta, al makecode.
Els objectius són:
veure la diferència entre l'índex i el seu valor
visualitzar un pols de sortida cada vegada que hi ha un canvi de valor de l'array
L'exemple fa el mateix que l'anterior però amb un bucle/comptador for diferent. El for anterior llegeix els valors d'una llista, mentre que aquest for llegeix els índexs del vector.
Recordeu que si poseu el ratolí al damunt de cada element hi trobeu la xuleta. Llegint-la, mireu d'entendre el funcionament del programa i feu els canvis que calgui per acabar de dominar-lo. Remeneu!
Noteu que l'índex del for ha de començar per zero. Això vol dir que per accedir al primer calaix del vector hem d'invocar list[0]
En aquest cas, si volem que faci el mateix que el programa anterior, hem de fer uns petits ajusts, amb una instrucció if, que torna a inicialitzar value a zero en el moment que ja hem llegit tots els índexs.
Proveu de treure la instrucció if i expliqueu què passa
Fixeu-vos en la diferència de les instruccions serial write value respecte les del programa anterior
Proveu de resoldre l'exercici amb un for de 0 a 3. Tot seguit, fes-ho amb l'índex del for des de 0 fins a la longitud del array. Com resoldries l'anomalia que se't presenta ? Amb aquest for, et sobra una variable i algunes instruccions, esborra-les.
Ara fem el mateix però amb un bucle while (mentre condició certa, fes).
Inicialitzem la variable valor a zero. Això vol dir que ens n'assegurem que a la caixa anomenada value, hi posem un zero. És una bona tècnica de programació inicialitzar variables. El contrari ha donat molts missatges d'error i no menys mals de cap. Si no inicialitzeu la variable, no sabeu quin valor hi ha emmagatzemat i això fa que el programa no respongui com esperem.
Tornem a escriure el valor de l'índex primer i el que està emmagatzemat en aquest índex després. El valor emmagatzemat també el mostrem per pantalla.
Mantenim els polsos pel pin0 (hi connectarem un led en sèrie amb una R d'uns 120 ohms)
Evitem una lectura impossible (el programa ens avisaria que no pot llegir cap número, però això en general ho hem d'evitar), i ho fem amb la instrucció if
Mirem ara d'aplicar els números aleatoris per a accedir a l'índex d'una matriu.
Primer mirem com invocar un número aleatori. Definim l'interval i cop definit posem el valor que s'ha triat a l'atzar dins d'una variable que hem de crear nosaltres.
En general, les inicialitzacions de les variables es fan al bucle on start
Tot seguit mostrem el que s'ha emmagatzemat a la variable random i esperem un temps per a poder-la llegir
El darrer exemple d'aquesta pràctica busca la manera d'invocar un índex de manera aleatòria.
Noteu que en cada casella de l'array/vector sempre hi ha el mateix valor. El que fem en aquesta pràctica decidir "a quina caixa apuntem" a l'atzar, i mostrem el valor que hi ha emmagazemat.
Per tal d'emmagatzemar el número aleatori generat per la funció pick random, creem la variable i , que farà d'índex del vector list.
A l'hora de mostrar, primer mostrem l'índex del vector, i després el seu valor, tant al port sèrie com a la matriu de leds.
Es tracta d'inicialitzar la variable Temperatura, a un valor que podem anar canviant.
Mostrem la Temperatura en ºC, i després d'una pausa d'un segon, prenem decisions mitjançant la instrucció if then else (Si s'acompleix una condició, aleshores executa1 i si no, executa2.
Els blocs es poden niar o anul·lar amb el + i el - , respectivament.
Aquí treballem bastant la el bloc logic
La matriu de leds identifica un led en la forma led(columna, fila), al revés del que estem acostumats en àlgebra. Si poseu el ratolí al damunt de cada led, us indicarà la columna i la fila. És el primer objectiu de la pràctica.
Es tracta de que localitzem les entrades de les portes lògiques: el led(columna0, fila1) i el led(columna0, fila3). La sortida de les portes (sortida de la taula de la veritat) és el led(columna1, fila2).
Proveu d'activar les entrades i fixeu-vos que es compleix la taula de la veritat d'una porta OR (sortida 0 si i només si les dues entrades són zero)
Proveu les taules de la veritat de les portes INV, AND, NAND i NOR. És el segon objectiu de la pràctica.
Segur que us resulta senzill explicar el funcionament del programa.
Micro:bit té dos polsadors incorporats a la targeta: A i B, tot i que també podem associar un event a la seqüència A+B. El simulador permet provar el programa sense haver de tenir micro:bit connectada.
Noteu la diferència entre mostrar un string i mostrar un número.
P07_Comptador. Fer un comptador que:
- Amb A incrementi, amb B decrementi - Si arriba a 0 no ha de comptar, si arriba a 9 tampoc
P08_Generador d'impulsos. Fes un generador d'impulsos amb el led (0,0)
- Si polsem A generarà 10 impulsos; 1 s actiu i 0,5 s inactiu
- Si polsem B també generarà 10 impulsos, 0,3 s actiu i 0,6 s inactiu
P09_Acceleració_x. Mostra el valor de l'acceleració x en el display.
Redueix el valor de l'acceleració en escala de manera que el dividim per 50 i l'arrodonim. La variable acceleració_x l'associarem al valor d'aquesta acceleració. El valor escalat es mostrarà al display.
També el traurem pel port sèrie amb la opció “ Escriure serial número”, de la llibreria/bloc d'instruccions serial de makecode