Enunciado del problema
Crear un programa que vaya haciendo un bucle produciendo tonos de longitudes crecientes y frecuencias cada vez mas bajas
Montaje
Para resolver el ejercicio, se ha utilizado un Arduino UNO y un altavoz piezoeléctrico, además de una resistencia de 10k ohm.
Tal como se puede apreciar en la imagen anterior, uno de los pines del altavoz está conectado a la toma de tierra y el otro a la entrada o pin digital número 8, a través de una resistencia de 10k ohm.
Software desarrollado
Debido a que se desea que la reproducción del sonido no se repita de forma periódica, el código principal se ha incluido en la función setup().
Se han declarado 5 variables:
pinAltavoz, en el que se indica el pin donde se ha conectado el altavoz. En este caso en el número 8. Si se deseara cambiar de pin tan sólo habría que cambiar el valor de la variable sin que afecte a la lógica del programa.
ifrecuencia_inicial: frecuencia inicial, con la que se reproducirá el primer tono.
ifrecuencia_final: frecuencia baja a la que se pretende llegar después de un proceso iterativo.
Idrecremento: valor numérico que representa el valor de decrecimiento de la frecuencia en cada iteración del bucle principal.
Iduracion: duración inicial del tono. El valor de esta variable se incrementa en una unidad en cada una de las iteraciones del bucle principal.
El bloque de sentencias incluidas en el bucle es el siguiente:
Reproducción de un tono según los valores de frecuencia y duración actuales.
Incremento de la duración en una unidad.
Delay de 50 ms antes de la siguiente reproducción.
Detección de la reproducción en el altavoz antes del siguiente tono.
En cada iteración la frecuencia se decrementa según el valor de la variable idecremento.
Código fuente
/* Crear un programa que vaya haciendo un bucle produciendo tonos de longitudes crecientes y frecuencias cada vez mas bajas */
#include "pitches.h"
void setup() { // declaracion de variables int pinAltavoz = 8; //pin donde est´ conectado el altavoz piezoelectrico
//valores limite en las frecuencias int ifrecuencia_inicial = 4978; int ifrecuencia_final = 123;
//valor de decremento en la frecuencia int idecremento = 200;
//duracion de la nota; int iduracion = 1;
//reproduccion de sonidos (se incluye en setup() para repetirlo una sola vez) for (int i = ifrecuencia_inicial; i > ifrecuencia_final; i = i - idecremento) {
//la variable i que controla el bucle se empleara para las frecuencias //reproduccion de nota tone(pinAltavoz, i, iduracion);
//despues de reproducir la nota se incrementa la duracion en una unidad iduracion = iduracion + 1;
//50 ms de demora hasta la proxima nota delay(50);
//se detine la reproduccion al final de cada nota noTone(pinAltavoz); } }
void loop() { // no se repite ningun proceso }