NewTone – Alternativa à biblioteca tone do Arduino
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:
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!
Obrigado, me ajudou bastante.
Boa noite Márcio !
Valeu, bom poder ajudar.
Abraço !
Muito obrigado e muita sorte em outros projetos, continue ajudando.
a pasta do newtone é pra extrair para onde?
Boa tarde Carlos,
Coloque a pasta newtone dentro da pasta LIBRARIES da IDE do Arduino.
Abraço !
É 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.
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!
Onde encontro o lin para download da biblioteca newtone?
Como usar o "noNewTone", ou como parar a emissão do som? Não estou conseguindo fazer funcionar.. Obrigado!
Boa noite,
noNewTone();
Abraço!
Boa noite,
Estou a tentar fazer um daqueles jogos em que se carrega num botão e dá o som de um animal, alguém me pode dizer como posso encontrar os sons dos animais?
Obrigado pela ajuda
Obrigado pelo poste, recebi essa dica de um grupo no Face e encontrei sua postagem com exatamente meu problema, foi a ultima coisa que checkei no meu codigo, até q percebi o conflito, mas não sabia uma alternativa para o tone(); vlw
Legal Sebastião!
Bom poder ajudar. 🙂
Abraço!
Adilson
ecelente gostei do programa deu certo ook obrigado
Boa tarde. Estou com esse conflito, entretanto é com a biblioteca newping. Qual a solução? Problema entre sensor infravermelho e sonar de distancia.
Oi Rodrigo,
O programa não compila?
Adilson
otima ajuda muito obg
Valeu Gustavo!
Abraço.
Adilson