RuiViana

TestaTacometro

Jul 28th, 2021
870
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <AFMotor.h>
  2.  
  3. AF_DCMotor motor(3);
  4.  
  5. // DEFINIÇÃO DAS VARIÁVEIS
  6.  
  7. int pino_D0 = 2;
  8. int rpm;
  9. volatile byte pulsos;
  10. unsigned long tempo_passado;
  11. unsigned int pulsos_por_volta = 20;
  12. //----------------------------------------------------------
  13. // INTERRUPÇÃO
  14. void contador()
  15. {
  16.   // incrementa o contador
  17.   pulsos++;
  18. }
  19. //----------------------------------------------------------
  20. void setup() {
  21.   Serial.begin(9600);
  22.   motor.setSpeed(255);
  23.   motor.run(FORWARD);
  24.   pinMode(pino_D0, INPUT);
  25.  
  26.   //Aciona o contador a cada pulso
  27.   attachInterrupt (0, contador, FALLING);
  28.   pulsos = 0;
  29.   rpm = 0;
  30.   tempo_passado = 0;
  31.   analogWrite(9,125);
  32. }
  33. //----------------------------------------------------------
  34. void loop() {
  35.   // Atualiza o contador a cada segundo
  36.   if (millis() - tempo_passado >= 100)
  37.   {
  38.     // Desabilita a interrupção durante o cálculo
  39.     detachInterrupt(0);
  40.     rpm = (60 * 1000 / pulsos_por_volta) / (millis() - tempo_passado) * pulsos;
  41.    
  42.     pulsos = 0;
  43.     Serial.print("RPM = ");
  44.     Serial.print(rpm, DEC);
  45.     Serial.print ("   ");
  46.     Serial.print("TEMPO = ");
  47.     Serial.println(tempo_passado, DEC);
  48.     //Habilita interrupcao
  49.     attachInterrupt(0, contador, FALLING);
  50.     tempo_passado = millis();
  51.   }
  52. }
  53.  
RAW Paste Data