# Metrónomo digital

Usaremos variables para convertir micro:bit en un metrónomo digital. Mediante los botones A y B cambiaremos el tempo del metrónomo, mientras que agitando la tarjeta encenderemos y apagaremos el sonido del metrónomo.

En primer necesitamos una variable que almacene el tempo, y a la que vamos a llamar, obviamente, <span style="color: rgb(224, 62, 45);">**tempo**</span>. Otra variable se llamará **<span style="color: rgb(224, 62, 45);">marcha</span>**, y almacenará los valores **<span style="color: rgb(224, 62, 45);">verdadero</span>**, si el metrónomo está en marcha o **<span style="color: rgb(224, 62, 45);">falso</span>**, si está parado. **<span style="color: rgb(224, 62, 45);">Marcha</span>** será por lo tanto una **variable de tipo booleano**.

La variable <span style="color: rgb(224, 62, 45);">**findepulso**</span> almacenará el momento exacto medido en milisegundos en el que debe acabar cada pulso.

Para crear las variables hay que acceder al menú **<span style="color: rgb(224, 62, 45);">Variables</span>** y pulsar sobre **<span style="color: rgb(224, 62, 45);">Crear una variable... </span>**El aspecto que presentará el menú desplegable una vez creadas las variables es el siguiente:

[![Variables08.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables08.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/variables08.png)

Seguidamente daremos unos valores iniciales a las variables: 120 para el **<span style="color: rgb(224, 62, 45);">tempo</span>** y **<span style="color: rgb(224, 62, 45);">falso</span>** para **<span style="color: rgb(224, 62, 45);">marcha</span>**. Este último valor indica que el metrónomo estará parado cuando sea encendido o reiniciado.

![Variables01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables01.png)

Recordemos que el bloque con la constante **<span style="color: rgb(22, 145, 121);">falso</span>** se obtiene del menú <span style="color: rgb(22, 145, 121);">**Lógica**</span>.

El metrónomo se pondrá en marcha o se parará cada vez que se agite. Usaremos un evento **<span style="color: rgb(185, 106, 217);">si agitado</span>** del menú **<span style="color: rgb(185, 106, 217);">Entrada</span>** y cambiaremos el valor de <span style="color: rgb(224, 62, 45);">**marcha**</span>. Gracias al operador **<span style="color: rgb(22, 145, 121);">no</span>**, del menú <span style="color: rgb(22, 145, 121);">**Lógica**</span>, si el valor de **<span style="color: rgb(224, 62, 45);">marcha</span>** es **<span style="color: rgb(224, 62, 45);">falso</span>**, cambiará a **<span style="color: rgb(224, 62, 45);">verdadero</span>**, y si es **<span style="color: rgb(224, 62, 45);">verdadero</span>**, cambiará a **<span style="color: rgb(224, 62, 45);">falso</span>**.

[![Variables02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/variables02.png)

Cuando se pulse el botón A el tempo disminuirá un pulso y cuando se pulse el botón B el tempo aumentará un pulso.

[![Variables03.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables03.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/variables03.png)

Al pulsar A+B micro:bit mostrará en pantalla el tempo.[![Variables06.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables06.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/variables06.png)

El bloque <span style="color: rgb(53, 152, 219);">**para siempre**</span> será el encargado de hacer sonar un pitido con cada pulso y de mostrar brevemente el icono de una corchea en la pantalla **<span style="color: rgb(224, 62, 45);">LED</span>**.

[![Variables07.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/variables07.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/variables07.png)

En primer lugar, el bucle <span style="color: rgb(22, 145, 121);">**si <span style="color: rgb(224, 62, 45);">marcha</span> entonces**</span> se asegura de que el metrónomo sólo funcione si la variable **<span style="color: rgb(224, 62, 45);">marcha</span>** tiene el valor **<span style="color: rgb(224, 62, 45);">verdadero</span>**. En caso contrario el bucle no hará nada.

Si el metrónomo está en marcha, la variable **<span style="color: rgb(224, 62, 45);">findepulso</span>** tomará el valor en milisegundos en el que debe acabar la ejecución del pulso actual. Este valor es la suma del tiempo actual, **milisegundos (ms)**, y de la duración de un pulso en milisegundos, es decir, 60000 ms/min dividido entre el tempo en pulsos/min. La variable **milisegundos (ms)** se encuentra en el menú **Avanzado/Control**.

Seguidamente se hace sonar una nota breve, se muestra una corchea en pantalla, se espera un instante y se borra la pantalla.

Como todavía quedará tiempo para que finalice el pulso actual, se introduce un bucle de espera cuyo funcionamiento es el siguiente: <span style="color: rgb(45, 194, 107);">**mientras**</span> el tiempo actual en ms sea menor que el tiempo en el que debe finalizar el pulso, no se hará nada. Por el contrario, cuando el tiempo actual en ms sea igual o mayor al tiempo de **<span style="color: rgb(224, 62, 45);">findepulso</span>**, el pulso habrá acabado, el bucle <span style="color: rgb(45, 194, 107);">**mientras**</span> finalizará y se iniciará una nueva ejecución del bucle **<span style="color: rgb(53, 152, 219);">para siempre</span>** (un nuevo pulso).