Descrición:
Imos facer que un altofalante conectado nunha saída dixital emita unha melodía
Programas:
1. Melodía programada
- Creamos unha variable para detectar o estado do pulsador
- Utilizamos a función tone(pin,frecuencia,duración) para definir o son
// Declaración de variables: const int pulsador=2; // Definimos o pulsador no pin 2 const int altofalante=4; // Definimos o altofalante no pin 4 int estado=0; //Inicialmente o estado do pulsador é 0 (desactivado) // Configuración: void setup(){ pinMode(4,OUTPUT); // Configuramos o pin 4 como saída } // Programa: void loop(){ estado = digitalRead(pulsador); if(estado==HIGH){ tone(4,1000,200); // 1000 Hz durante 0.2s delay(400); // Agarda 0.4s tone(4,1500,300); // 1500 Hz durante 0.3s delay(400); // Agarda 0.4s tone(4,2000,500); // 2000 Hz durante 0.5s } }
1. Melodía con arrays
Outra maneira de definir unha melodía é definindo ao principio dous arrays, un coas frecuencias das notas que queremos que soen e outro cos tempos de duración de cada nota. Despois imos percorrendo os arrays mediante unha función for.
// Declaración de variables: int melodia[] = {262, 196, 196, 220, 196,0, 247, 262}; // Array de notas int tempos[] = {4, 8, 8, 4, 4, 4, 4, 4}; // Array de tempos (cuarta, oitava, etc.) const int zumbador = 4; const int pulsador=2; // Configuración: void setup() { pinMode(zumbador, OUTPUT); } // Programa void loop() { int estado = digitalRead(pulsador); // comeza a melodía ao premer no pulsador if(estado==HIGH){ for (int nota = 0; nota < 8; nota++) { // Imos percorrendo os arrays de 0 a 7 int duracion = 1000/tempos[nota]; // calculamos o tempo de duración de cada nota en ms tone(zumbador, melodia[nota], duracion); // Soa a nota correspondente int pausaNota = duracion * 1.30; // Deixa de soar a nota delay(pausaNota); noTone(zumbador); } } }
3. Piano
Agora imos utilizar os pulsadores como se fosen teclas dun piano. Cada vez que prememos nun pulsador soa a nota correspondente mentres estea activado e deixa de soar cando soltamos.
- Para executar o son mentres estamos premendo utilizamos a función while(condición){ proceso }
- Non imos marcar un tempo predeterminado, pois a nota soará mentres esteamos premendo, así que usaremos as funcións tone(pin, frecuencia); e noTone(pin);
Ímolo programar para tres notas, DO, RE e MI. Necesitaremos conectar tres pulsadores, un para cada nota. Se queres facer a escala completa non tes máis que conectar 7 pulsadores e engadir as notas que faltan.
// Declaración de variables const int zumbador = 11; // zumbador no pin 11 const int doPin =2; // Pins dos pulsadores const int rePin =3; const int miPin =4; const int DO = 262; // Frecuencias das notas mulicais const int RE = 294; const int MI = 330; // Configuración void setup(){ pinMode(zumbador, OUTPUT); // zumbador como saída } // Programa void loop(){ while(digitalRead(doPin) == HIGH){ // Mentres o pulsador doPin estea premido tone(zumbador, DO); // Soa a nota DO } while(digitalRead(rePin) == HIGH){ tone(zumbador, RE); } while(digitalRead(miPin) == HIGH){ tone(zumbador, MI); } noTone(zumbador); // Silencio se non hai nada pulsado }
Propostas:
Conecta dous interruptores e dous LEDs, con cadansúas resistencias de protección e, utilizando as funcións condicionais, resolve os seguintes problemas:
- Mellora do programa “Melodía”: Fai que ao premer un botón soe unha melodía de maneira sincronizada co acendido e apagado duns LEDs.
- Piano: Utiliza 7 pulsadores para crear un piano musical. Engade o que falta na práctica do piano.
- Variando as notas: Fai que ao mover o cursor do potenciómetro cambie a frecuencia do ton emitido polo altofalante, desde a nota do a 262 Hz ata o si a 494Hz. Utiliza a función map para facer a conversión. y = map(x, ax, bx, ay, by);
- Theremin de luz: Conecta unha LDR e un zumbador. Ao achegar e afastar a man sobre a LDR variará a luz recibida por ela. O zumbador emitirá un son cuxa frecuencia variará en función da luz recibida pola LDR. Establece un máximo de nivel de luz (a man afastada do sensor) para o cal o zumbador non emitirá ningún son.