
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.