подсчет количества оборотов с помощью щелевого оптического датчика
- Войдите на сайт для отправки комментариев
Сб, 25/02/2017 - 16:38
добрый день!
Програмированием занялся недавно, написал код для подчета оборотов вала на ардуино, обороты сичтаю с помощью щелевого оптического датчика.
Только возникла проблема, если при остановки вала когда ответрстие на диске попадет на щелевой датчик, ардуино начинает считатать с большой скоростью.
Помогите с кодом, что не так?
# define PIN 3 //вход с датчика
#include <LCD5110_Basic.h>
LCD5110 myGLCD(8, 9, 10, 11, 12);
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern unsigned char BigNumbers[];
int schet = 0; // переменая для счетчика
void setup()
{
pinMode(PIN, INPUT);
digitalWrite(PIN, HIGH);
//Инициализируем дисплей
myGLCD.InitLCD();
}
void loop()
{
bool hoot = ! digitalRead(PIN);
delay(10);
if (hoot)
{
schet++;
}
//выводим колличество
myGLCD.setFont(BigNumbers);
myGLCD.printNumI (schet, CENTER, 8);
}
Ваш код не имеет вообще никаколго отношения к подсчету количества оборотов.
Для подсчета оборотов необходмо считать количество переходов сигнала из "0" в "1" (или наоборот), а не то, сколько раз Ваша программа читает с датчика единицу. Да еще и считывание производится с неизвестным периодом, т.к. в его длительность вносит вклад время отображения на дисплее.
тоесть мне нужно считать сколько переходов с 1 на 0 и 0 на 1
у меня одно отвестие в диске с которого он считывает, получается 2 перехода за один круг. верно?
Вам нужно считать либо один переход, либо другой. Оба - совершенно излишне.
Если в диске 1 отверстие, будет один переход. Количество переходов в единицу времени - и есть скорость вращения.
Если бы отверстий было бы больше, результат нужно было бы делить на количество отверстий.
Правильней наверное зацепть датчик на прерывание, для нано пин D2 и по прерыванию увеличивать счётчик?