Galera estou tentando fazer um contador de RPM, mas não estou conseguindo. Eu queria que uma interrupção fosse chamada só quando mudar o valor do sensor, e incrementaria o contador. 

O meu código fica incrementando mesmo sem ir de HIGH para LOW. Alguém pode ajudar?

Sketch

volatile byte rpmcount;

unsigned int rpm;

void rpm_fun()
{
    rpmcount++;
}

void setup()
{
   Serial.begin(9600);

}

void loop()
{

   

   rpmcount = 0; 
   rpm = 0;

  attachInterrupt(0, rpm_fun, FALLING);
  delay(1000); //Espera 1 seg

  detachInterrupt(0);

  rpm = (rpmcount /7)* 60;

  Serial.print("RPM=");
  Serial.println(rpm);


  attachInterrupt(0, rpm_fun, FALLING);
}

Exibições: 396

Responder esta

Respostas a este tópico

Parece correto... O static ta lá, a int0 é pra isso, ta Falling...

Vc tentou forçar o valor do sensor, ligando o pino no GND e no 5V (em vez do sensor) ?

Pode ser que o sinal esteja com ruído. Se for algo como um capacitor pequeno (1nF ou 10nF) pode fazer grande diferença, entre o pino e o GND. Um resistor em série tb ajuda (depende do seu sensor).

byte te atende ? Não seria melhor contar como int ?

Verdade, vou fazer essas alterações Eduardo.

Outra coisa tu sabe como eu posso enviar algum código para o receptor, para identificar o emissor? O receptor tá pegando frequência até da luz.

Obrigado!

Oi GSG, bom dia.

Voce esta'  zerando a variavel rpmcount toda vez que o loop reinicia, ou seja a cada segundo.

Nao e' necessario o segundo attachInterrupt, pois ao voltar ao inicio do loop, existe esta função.

Eu também colocaria a equação: rpm = (rpmcount /7)* 60; dentro da função de interrupt.

Voce nao disse como esta fornecendo estes pulsos para o arduino. E' por um switch ou um sensor?

Rui

Olá Rui, rapaz to sofrendo aqui para fazer isso funcionar. Estou utilizando leds IR, mas os valores estão variando muito. Dando valores não reais.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço