20 fevereiro 2014

NewTone - Alternativa à biblioteca tone do Arduino

Um leitor do site 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 :


.....\arduino\cores\arduino/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).

A biblioteca tone do Arduino realmente apresenta alguns problemas de compatibilidade com outras biblioteca quando estas utilizam a mesma interrupção/timer.

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.

E realmente a utilização é 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ó.

 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 :

arduino buzzer tone newtone


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

9 comentários:

  1. Respostas
    1. Boa noite Márcio !

      Valeu, bom poder ajudar.

      Abraço !

      Excluir
  2. a pasta do newtone é pra extrair para onde?

    ResponderExcluir
    Respostas
    1. Boa tarde Carlos,

      Coloque a pasta newtone dentro da pasta LIBRARIES da IDE do Arduino.

      Abraço !

      Excluir
  3. É possível gerar dois tons com frequências diferentes? Tipo um tom no pino 9 e outro no pino 3? Já que os relógio são diferentes para esses pinos. Não precisas necessariamente usar a biblioteca, eu preciso que meu Arduino uno gere duas frequência distintas no mesmo intervalo de tempo.

    ResponderExcluir
    Respostas
    1. Boa noite Cleiton,

      É possível sim. Eu encontrei um fórum de discussão com vários exemplos para isso:

      http://forum.arduino.cc/index.php?topic=69079.0

      Abraço!

      Excluir
  4. Onde encontro o lin para download da biblioteca newtone?

    ResponderExcluir
  5. Como usar o "noNewTone", ou como parar a emissão do som? Não estou conseguindo fazer funcionar.. Obrigado!

    ResponderExcluir