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:

Protoboard cm buzzer e funções Tone e noTone no 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!

Sobre Fábio dos Reis (1212 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Arduino – Conhecendo as funções Tone e noTone

  1. Daniel Poletto // 14/02/2017 em 20:34 // Responder

    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.

  2. muito obrigado! 🙂 , estava precisando de ajuda neste codigo….

Escreva um comentário

Seu e-mail não será divulgado


*