Gaita_electronica
OJO

RECUERDA: Este post fue originalmente escrito usando la primera versión de Bitbloq. Si estás buscando el contenido y los programas del post original, podrás encontrarlos en la sección de descargas.

Zumbador

La llamada Gaita Electrónica no es más que otro instrumento electrónico programable como el CongaConga. Bien puede llamarse también Luzófono o ¡Zumbatófono! La cuestión es que utilizando tan sólo 3 vitaminas del Kit: el sensor de luz, el potenciómetro y el zumbador, podrás hacer sonar notas musicales como un Jedi entrena levantando piedras… ¡Sin tocarlo! Aquí te explico cómo.

G003522

Conexiones:

Conecciones-Gaitas

Programación:

Abre Bitbloq2 y ¡manos al código!

En primer lugar vamos a declarar las variables globales en las que estableceremos las frecuencias de las distintas notas musicales, para poder usarlas posteriormente, y las dos variables locales en las que guardaremos la medida del sensor de luz y del potenciómetro:
Selección_059

Selección_060

También, una variable que llamamos “velocidad” o “frecuencia” que va a ser el tiempo que se reproduce cada nota musical (en milisegundos). En esta variable guardaremos la medida del potenciómetro (valores entre 0 y 1023) sumándole un 50 para que nunca pueda ser cero. ¡No queremos esperar 0 segundos! ¿verdad?

Selección_050

Lo que haremos será ir reproduciendo en el zumbador distintas notas musicales dependiendo de la cantidad de luz que detecte el sensor de luz. Recuerda que el sensor de luz devolverá valores entre 0 y 500 (0 si no percibe luz y 500 si percibe mucha luz). Por tanto, iremos haciendo sonar notas en estos rangos de valores:

(0 , 50] = DO

(50 , 100]  = RE

(100, 200] = MI

(200, 300] = FA

(300, 400] = SOL

(300, 400] = LA

GAITA-Sol-sensor

Por ejemplo, si tapamos bien el sensor con la mano y este toma valores pequeñitos (entre 0 y 50 inclusive), sonará un DO. Esto se programa así:

Selección_051

Si el sensor mide valores entre 50 y 100 sonará un RE… y así todas las notas hasta un LA cuando mida valores más altos entre 400 y 500.

Selección_052

El programa al completo queda así:

Completo1

EXPERTO ROBONAUTA: Optimizando el código

El programa anterior compila y funciona pero… no es óptimo. Se pueden quitar algunos bloques para hacerlo más corto y eficiente. Veamos, el programa anterior iba haciendo una comparación por cada rango de valores y aunque la primera opción fuese cierta, el cerebro electrónico seguiría comprobando el resto de opciones una a una… ¡Qué trabajo! Además, ya sabemos que el sensor de luz nunca nos devolverá valores menores que cero ni mayores que 500… Entonces vamos a resumir todo un poco:

La primera opción a comprobar es tan sólo menor que 50. Como creo que ya sabéis, pulsando la estrella de este bloque, se puede añadir la opción “en cambio, si” (en inglés else if), vamos a usarla:

Selección_056

Date cuenta que si la primera opción (menor que 50) es cierta, la placa cerebro tocará la nota DO y dejará de comparar más rangos en esta pasada por el programa en bucle. Sin embargo, si la opción es falsa quiere decir que tenemos un valor mayor que 50 por lo que sólo será necesario ir comparando hasta dónde llega: ¿es menor que 100? Si es falso entonces ¿es menor que 200? Si todo lo anterior es falso ¿es menor que 300? … así quedaría el programa reducido:

Completo2