A biblioteca tone do Arduino realmente apresenta alguns problemas de compatibilidade com outras biblioteca quando estas utilizam a mesma interrupção/timer.
Syntax
- NewTone( pin, frequency [, length ] ) - Play a note on pin at frequency in Hz.
- pin - Pin speaker is wired to (other wire to ground, be sure to add an inline 100 ohm resistor).
- frequency - Play the specified frequency indefinitely, turn off with noNewTone().
- length - [optional] Set the length to play in milliseconds. (default: 0 [forever], range: 0 to 2^32-1)
- noNewTone(pin) - Stop playing note (pin is optional, will always stop playing on pin that was last used).
Example
#include <NewTone.h> #define TONE_PIN 2 // Pin you have speaker/piezo connected to (be sure to include a 100 ohm resistor). // Melody (liberated from the toneMelody Arduino example sketch by Tom Igoe). int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 }; int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; void setup() {} // Nothing to setup, just start playing! void loop() { for (unsigned long freq = 125; freq <= 15000; freq += 10) { NewTone(TONE_PIN, freq); // Play the frequency (125 Hz to 15 kHz sweep in 10 Hz steps). delay(1); // Wait 1 ms so you can hear it. } noNewTone(TONE_PIN); // Turn off the tone. delay(1000); // Wait a second. for (int thisNote = 0; thisNote < 8; thisNote++) { // Loop through the notes in the array. int noteDuration = 1000/noteDurations[thisNote]; NewTone(TONE_PIN, melody[thisNote], noteDuration); // Play thisNote for noteDuration. delay(noteDuration * 4 / 3); // Wait while the tone plays in the background, plus another 33% delay between notes. } while(1); // Stop (so it doesn't repeat forever driving you crazy--you're welcome). }
E realmente a utilização é simples. As únicas alterações no programa são o carregamento da bibliotecaNewTone no início, e a substituição dos comandos Tone por NewTone, e noTone por noNewTone. E só.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // Programa : Som no Arduino - Sirene - Teste biblioteca NewTone // Autor : Arduino e Cia #include <NewTone.h> #define tempo 10 int frequencia = 0; int Pinofalante = 10; void setup() { pinMode(Pinofalante,OUTPUT); //Pino do buzzer } void loop() { for (frequencia = 150; frequencia < 1800; frequencia += 1) { NewTone(Pinofalante, frequencia, tempo); delay(1); } for (frequencia = 1800; frequencia > 150; frequencia -= 1) { NewTone(Pinofalante, frequencia, tempo); delay(1); } } |
Ao montar o circuito, ligue o buzzer na porta 10 do Arduino, e não se esqueça de ligar em série um resistor de pelo menos 100 ohms :
Se você está enfrentando problemas de conflito com a biblioteca tone padrão do Arduino, esta pode ser a solução.
Nenhum comentário:
Postar um comentário