const int sensor1Pin = 2;
const int sensor2Pin = 4;

const float pi = 3.14159265358979;

unsigned int diametroDaRodaEmMm = 785; // mm
unsigned int quantidadeDeFuros = 108; // Qtde. em cada carreira: 54
unsigned int tempoEntreLeituras = 100; // Tempo em millisegundos

float perimetroDaRodaEmMm = pi * diametroDaRodaEmMm;
float perimetroDaRodaEmKm = perimetroDaRodaEmMm / 1000000.0;

unsigned long tempoAnterior = 0;

volatile int contadorDePulsos = 0;

void incrementarContador() {
  contadorDePulsos++;
}

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

  pinMode(sensor1Pin, INPUT_PULLUP);
  pinMode(sensor2Pin, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(sensor1Pin), incrementarContador, CHANGE);
  attachInterrupt(digitalPinToInterrupt(sensor2Pin), incrementarContador, CHANGE);
}

void loop() {
  unsigned long tempoAtual = millis();

  if (tempoAtual - tempoAnterior >= 100) {
    calcularVelocidade();
    tempoAnterior = tempoAtual;
  }
}

void calcularVelocidade() {
  // Calcular a velocidade com base no número de pulsos e no tempo entre as leituras
  float velocidade = (float)contadorDePulsos / 2.0; // Dividir por 2, pois há dois sensores

  // Diferença de tempo em segundos
  float tempoEmSegundos = (millis() - tempoAnterior) / 1000.0;

  // Considerando o perímetro da roda e a quantidade de furos no disco
  velocidade = (velocidade * perimetroDaRodaEmKm) / (quantidadeDeFuros * tempoEmSegundos) * 3600.0;

  Serial.printf("%.2f KM/h\n", velocidade);

  contadorDePulsos = 0; // Reseta o contador de pulsos
}
Loading chip...chip-scope
Loading chip...chip-pwm