Arduino – Conhecendo as funções Tone e noTone
Funções Tone e noTone no Arduino
Vamos explorar neste artigo as funções Tone() e noTone() do Arduino, que permitem gerar tons de frequências pré-estabelecidas e interromper a execução dos tons, respectivamente.
Função Tone()
A função Tone() gera um sinal de onda quadrada de uma frequência especificada, com 50% de ciclo de trabalho (duty cicle) em um pino da placa. É possível especificar também uma duração para o sinal gerado, o qual sem essa especificação continua a ser executada até que uma chamada à função NoTone() seja realizada.
Geralmente usamos essa função para gerar um tom de áudio (dapi o nome Tone), o qual pode ser reproduzido em um alto-falante ou transdutor piezoelétrico (buzzer).
Somente é possível gerar um tom por vez. Se houver um tom sendo tocado em um pino do Arduino, uma chamada à função Tone() em outro pino não surtirá efeito. Se a chamada à função for realizada no mesmo pino onde há um tom tocando, a frequência do tom é ajustada de acordo. Caso você queira tocar um som em outro pino, quando já houver um tom tocando em um pino diferente, primeiramente você deverá chamar a função NoTone() no pino atual para interromper o som, antes de tocar o próximo.
Ao usar a função Tone() tome cuidado, pois ela pode interferir com as saídas PWM dos pinos 3 e 11, em placas que não sejam o Arduino Mega.
A tabela a seguir as frequências mínima e máxima que podem ser geradas com essa função, em vários modelos de placas Arduino:
Placa | Frequência mín., em Hz | Frequência máx., em Hz |
Uno, Mega, Leonardo | 31 | 65535 |
Zero | 41 | 275000 |
Due | Não disponível | Não disponível |
Sintaxe:
tone(pino, frequência) tone(pino, frequência, duração)
Parâmetros
- pino: o pino no qual o tom será gerado
- frequência: a frequência do tom em Hz, um número do tipo unsigned int
- duração: duração do tom em milissegundos, um valor do tipo unsigned long. Esse parâmetro é opcional.
Função noTone()
A função noTone() interrompe a geração do sinal de onda quadrada (“tom”) disparado pela função Tone(). Se não houver nenhum tom sendo gerado, chamar a função noTone não tem efeito algum.
Sintaxe
noTone(pino)
Parâmetros
- pino é o número do pino no qual o tom gerado será interrompido.
Exemplo de uso das funções Tone() e noTone(): Vamos gerar uma nota “Lá” por um segundo, em seguida uma nota “Sol’ por mais um segundo, e pausar por mais um segundo, repetindo todo o processo na sequência.
Para isso precisamos saber as frequências das notas que serão geradas. Vamos usar as frequências a seguir:
- Lá: 440 Hz
- Sol: 392 Hz
E a seguir, o código a ser utilizado:
int buzzer = 9; // conectar um buzzer ao pino 9 unsigned int la = 440; unsigned int sol = 392; unsigned long tempo = 1000; void setup() { } void loop() { tone(buzzer, la); delay(tempo); noTone(buzzer); tone(buzzer, sol,tempo); delay(tempo); noTone(buzzer); delay(tempo); }
A função delay(buzzer) é usada para que tenhamos a temporização de 1 segundo (1000 ms) entre as notas. A figura a seguir mostra a conexão dos componentes para esse sketch. Note o resistor de 1 KΩ entre o pino 9 da placa e o buzzer – ele é essencial para evitar danos ao seu Arduino:
Basta compilar o código e gravar no Arduino para executar a sequência de notas no buzzer.
É isso aí, até o próximo artigo com mais funções e projetos com Arduino!
Prezado
Legal, muito bom. Preciso de ajuda, estou precisando gerar tom para linha telefônica, você sabe quais as frequência e os respectivos números? Quero montar um discador telefônico.
muito obrigado! 🙂 , estava precisando de ajuda neste codigo….