11-06-2024, 23:45
Witam, mam problem dotyczący zliczania obrotów czujnikiem halla w arduino. Mam kod który to robi ale jest jeden problem a mianowicie na monitorze portu szeregowego podawane są wartości co 1200 impulsów czyli 1200, 2400, 3600 i tak dalej zamiast normalnie. Kod mam z internetu i ktoś kto to zrobił miał "normalnie" ale u mnie tak niestety nie jest. Czy można to jakoś naprawić ? Z góry dziękuję za pomoc.
Kod:
#include <Wire.h>
const int hallSensorPin = 2;
const unsigned long sampleTime = 50;
const int maxRPM = 14000;
int rpmMaximum = 0;
void setup()
{
pinMode(hallSensorPin,INPUT);
Serial.begin(9600);
}
void loop()
{
delay (350);
int rpm = getRPM();
if (rpm > rpmMaximum) rpmMaximum = rpm;
displayRPM(rpm);
displayBar(rpm);
}
int getRPM()
{
int count = 0;
boolean countFlag = LOW;
unsigned long currentTime = 0;
unsigned long startTime = millis();
while (currentTime <= sampleTime)
{
if (digitalRead(hallSensorPin) == HIGH)
{
countFlag = HIGH;
}
if (digitalRead(hallSensorPin) == LOW && countFlag == HIGH)
{
count++;
countFlag=LOW;
}
currentTime = millis() - startTime;
}
int countRpm = int(60000/float(sampleTime))*count;
return countRpm;
}
void displayRPM(int rpm)
{
Serial.print(rpm);
Serial.println("|");
}
void displayBar(int rpm)
{
int numOfBars=map(rpm,0,maxRPM,0,15);
if (rpm!=0)
{
for (int i=rpm; i<=numOfBars; i++)
{}
}
}