Bóson Treinamentos em Ciência e Tecnologia

Arduino – Conhecendo as funções Tone e noTone

Funções Tone() e NoTone() no Arduino

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

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

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:

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!

Sair da versão mobile