Conhece a biblioteca NewTone? Recentemente um leitor do blog me escreveu , dizendo que ao tentar utilizar a biblioteca IRremote junto com o comando Tone do Arduino, o programa não compilava, apresentando a seguinte mensagem de erro:

…..arduinocoresarduino/Tone.cpp:535: multiple definition of  `__vector_7′

Já havia acontecido comigo em algumas oportunidades, especialmente ao tentar utilizar o comando Tone junto com a biblioteca NewPing, usada para controlar múltiplos sensores ultrasônicos HC-SR04 (usei a NewPing no post Controle de estacionamento com o sensor HC-SR04).

Como usar a biblioteca Newtone

A biblioteca tone do Arduino realmente apresenta alguns problemas de compatibilidade com outras biblioteca quando estas utilizam a mesma interrupção/timer. O exemplo que eu citei anteriormente, com a biblioteca para sensores infravermelhor IRremote, é o mais comum.

Felizmente encontrei uma biblioteca bem simples, a NewTone, que pelo menos nos meus testes, não apresentou nenhum conflito. Inclusive utilizei os programas que eu já havia criado no post Sons no Arduino para me certificar que não seriam necessárias grandes alterações no código.

A biblioteca pode ser instalada usando o link acima. Faça o download da biblioteca e coloque-a na pasta Libraries da IDE do Arduino. Não se esqueça de reiniciar a IDE para que a biblioteca seja carregada corretamente.

Para usar a biblioteca NewTone é muito simples. As únicas alterações no programa são o carregamento da biblioteca NewTone no início, e a substituição dos comandos Tone por NewTone, e noTone por noNewTone. E só.

// 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);  
  }  
}  

Para testar, montei o circuito abaixo usando um Arduino Uno. Ao montar o circuito, ligue o buzzer na porta digital 10 do Arduino, e não se esqueça de ligar em série um resistor de pelo menos 100 ohms:

arduino buzzer tone newtone

Assim, se você está enfrentando problemas de conflito com a biblioteca tone padrão do Arduino, esta pode ser a solução.

Gostou? Confira outros posts com Arduino aqui mesmo no Arduino e Cia!

Avalie este post!