¿Como funciona?
Genera una onda cuadrada de la frecuencia especificada (y un ciclo de trabajo del 50%) en un pin.[1] Se puede especificar una duración; de lo contrario, la ola continúa hasta que se realiza una llamada a noTone()
. El pin se puede conectar a un zumbador piezoeléctrico u otro altavoz para reproducir tonos.
Solo se puede generar un tono a la vez. Si ya se está reproduciendo un tono en un pin diferente, la llamada a tone()
no tendrá ningún efecto. Si el tono se reproduce en el mismo pin, la llamada establecerá su frecuencia.
Función tone
El uso de la función tone()
interferirá con la salida PWM en los pines 3 y 11 (en tableros que no sean Mega).
No es posible generar tonos inferiores a 31Hz. Para detalles técnicos, vea las notas de Brett Hagman.
Sintaxis
tone(pin, frequency)
tone(pin, frequency, duration)
Parámetros
- pin: Pin para generación de tonos
- frequency: Frecuencia del tono en herz
- duration: Duración del tono en milisegundos
Retornos
No retorna datos
Placas que soporta tone
El uso de la función tone()
interferirá con la salida PWM en los pines 3 y 11 (en las placas distintas de la Mega) [2].
Placa | Frecuencia Mín. (Hz) | Frecuencia Máx (Hz) |
---|---|---|
Uno, Mega, Leonardo y otras placas AVR | 31 | 65535 |
Gemma | No implementado | No implementado |
Zero | 41 | 275000 |
Due | No implementado | No implementado |
Ejemplo
Veamos un simple ejemplo de como funciona la generación de sonidos con arduino.
Materiales
El parlante puede ser uno pequeño, en este caso lo conectamos directamente a la placa pero hay que tene en cuenta que la potencia debe ser muy baja.
Material | Cantidad | Descripción |
---|---|---|
Arduino | 1 | Usado para controlar el circuito |
Resistencias de 1kΩ | 8 | Protección del parlante y de la placa arduino |
Parlantre de 1Ω5w de potencia o similar | 1 | El transductor de los sonidos |
Cables macho a macho | 2 Aprox | Conexión al circuito |
Conexión
Observemos la conexión de circuito, tenemos el arduino y el parlante en el pin 8.
Códígo
Para colocar un ejemplo sencillo, usemos el nos proporciona en programa arduino que se llama toneMelody, el único cambio fue añadirle una tonada diferente.
//Libreria de tonos
#include "pitches.h"
//Melodia
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
//Nota duración: 4 = cuarto de nota, 8 = octavo de nota, etc.:
int noteDurations[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
void setup() {
//Iterar sobre las notas de la melodía:
int size = sizeof(melody) / sizeof(int);
for (int thisNote = 0; thisNote < size; thisNote++) {
//Para calcular la duración de la nota, tome un segundo dividido por el tipo de nota.
//e.g. cuarto de nota = 1000 / 4, octavo de nota = 1000/8, etc.
int noteDuration = 1000 / noteDurations[thisNote];
tone(9, melody[thisNote], noteDuration);
//Para distinguir las notas, establece un tiempo mínimo entre ellas.
//La duración de la nota + 30% parece funcionar bien:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
//Deja de tocar el tono
noTone(9);
}
}
void loop() {
//No requiere en este proyecto
}
Referencias
[1] Arduino tone https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/, Consultado noviembre 2018
[2] Manueldelgadocrespo, http://manueldelgadocrespo.blogspot.com/p/tone.html Consultado noviembre 2018