Помогите высчитать обороты.
- Войдите на сайт для отправки комментариев
Втр, 01/04/2014 - 12:39
У меня есть колесико, когда оно проделывает оборот задивает кнопку и она зажимается где-то на секунду +- сотые секунды.
Я сделал вот такой код:
SensorState = digitalRead(PinSensor); if (WinSensorState == HIGH){ Oboroti=Oboroti+1; Serial.println(Oboroti); }
Но в нем проблема, т.к. кнопка зажимается где-то на секунду в переменной "Oboroti" успевает приплюсоваться около 20-25 цифр. Мне же необходимо засчитывать по 1 цифре в каждый оборот. Подскажите пожалуйста как это сделать?
Немного поправил код.
Использовать прерывание. Там можно указать выполнение при изменении с 0 на 1
attachInterrupt()
Только придется датчик подключить на пин прерывания - 2
Спасибо большое, но код все равно немного не так работает. Сейчас он выводит такие цифры:
И почему в вашем коде я нигде не вижу цифру, пин "2"?
Потому что нужно читать по ссылке и возможно у вас "дребезг" контактов
Я не думаю что это из за дребезка контактов. Возможно для этой схемы нужно как-то иначе подключать кнопку, я ее подключил как указано на этой схеме: http://arduino.ru/tutorials/button это правильно?
NeironN вам написал - дребезг контактов. Об этом на форуме сто раз писалось. В указанной вами схеме всё правильно, только не учтён дребезг. Введите обработку кнопки от дребезга в ваш код и всё будет гуд.
Понял. Я сначало подумал под словом дребезг подрузамивался какой-то шум в соеденение. Я и не предполагал что такое может быть в самой кнопке.
Воспользовался вот таким кодом против дребезга:
Но не совсем им доволен. Где-то раз в 10 - 15 оборотов проскакивает 2 цифры. Или же если я millis()-1000 меняю на millis-1500 так же иногда не засчитывается оборот. Подсажите пожалуйста как это побороть?
если есть мелкий кондер 10-100 нФ (0,1-0,01мкф, придется подобрать) поставьте паралельно кнопке. должно пропасть