A função tone() , interfere no funcionamento do programa ?

Fiz um programa para controlar um carro robo pelo controle remoto IR.

Resolvi implementar uma sonorização quando o carro movimentar para trás (marcha ré).

Não estou entendendo por que quando utilizo o comando Tone(), o som toca e o programa não responde mais a nenhum comando ??? Pela lógica do programa, o tone deveria tocar enquanto estiver dando a marcha ré somente.

Exibições: 2158

Responder esta

Respostas a este tópico

Luis, coloca um delay para tocar num determinado tempo e adiciona um player.stop() logo depois... acho que isso deve resolver...

Estou me referindo a este comando: http://arduino.cc/en/Reference/Tone , não existe método stop para ele.

Consegui resolver o problema fazendo isso: 

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
     digitalWrite(SPEAKER, HIGH);
    delayMicroseconds(tone);
    digitalWrite(SPEAKER, LOW);
    delayMicroseconds(tone);
    }
}

Não sabia que teria problemas usando a função tone(), mas encontrei uma biblioteca Tone.h que é muito boa.

vc conseguiu resolver man?

http://letsmakerobots.com/node/28278

timer0 é utilizado pelas funcoes delay(), millis() e micros(). Se alterar registradores do timer0 isso pode influenciar a funcao de timer do Arduino. Logo, voce precisa saber o que esta fazendo.

timer1 (16bit): utilizado pela biblioteca Servo no Arduino Uno (timer5 no Arduino Mega)

timer2 (8bit): utilizado pela funcao tone().

timer3, timer4, timer5 (16bit) somente disponivel nos modelos Mega

Esta usando a IRRemote? Se for, edite o arquivo IRremoteInt.h para utilizar algum diferente do timer2

Estou utilizando o mega 2650, com a biblioteca Irremote. então eu tenho que alterar CLK do arquivo IRremoteInt.h? 

é isto?

Não entendi muito bem!

O CLK nao, o timer.

Preste atencao no arquivo IRremoteInt.h, tem um trecho:

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  //#define IR_USE_TIMER1 // tx = pin 11
  #define IR_USE_TIMER2 // tx = pin 9
  //#define IR_USE_TIMER3 // tx = pin 5
  //#define IR_USE_TIMER4 // tx = pin 6
  //#define IR_USE_TIMER5 // tx = pin 46
Ou seja, por padrao a biblioteca IRremote usa o timer2, mas o tone() tambem usa, basta mudar para algum outro timer que nao esteja utilizando. Se continuar dando problema, ai tem que investigar mais.

Quando eu chegar em casa....vou analisar...Mas muito obrigado Gabriel...Quando tiver o resultado, eu posto aqui...XD

VLW

Poderia me passar essa biblioteca Luís?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço