Всем привет! Сделал всё по инструкции от Alex Измеряем скорость спиннера, или оптический тахометр своими руками - YouTube
Внес изменения по его же инструкции для подсчета количества оборотов, вместо определения скорости. Но у меня при старте кол-во начинается с 1, а не с 0. В чем может быть причина? Спасибо заранее!
Created 2017
by AlexGyver
AlexGyver Home Labs Inc.
*/
byte n = 1; // число лопастей
float r = 2; // радиус тела В САНТИМЕТРАХ
#include "LCD_1602_RUS.h"
LCD_1602_RUS lcd(0x27, 16, 2);
float r_speed, rev_time;
volatile unsigned long lastflash, flash, lastshow;
unsigned int RPM;
String spaces = " ";
int revolutions;
void setup() {
Serial.begin(9600); // открыть порт
attachInterrupt(0, sens, RISING); // подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); // 3 пин как выход
digitalWrite(3, HIGH); // подать 5 вольт на 3 пин
lcd.init(); // инициализация дисплея
lcd.backlight(); // включить подсветку
lcd.setCursor(0, 0); // курсор слева 1 строчка
lcd.print(L"Об/мин: "); // слово Обороты
lcd.setCursor(0, 1); // курсор слева 2 строчка
lcd.print(L"Оборотов: "); // слово Скорость
}
void sens() {
flash = micros() - lastflash; // вычислить время между двумя оборотами
revolutions++;
lastflash = micros(); // запомнить время последнего оборота
}
void loop() {
if (micros() - lastflash > 1000000) { // если сигнала нет больше секунды
RPM = 0; // считаем, что всё стоит и не крутится
r_speed = 0;
} else {
rev_time = (float) flash / 1000000 * n; // время одного оборота в секундах, с учётом числа лопастей
RPM = (float) 60 / rev_time; // обороты в минуту
r_speed = (float) 2 * 3.1415 * r / 100 / rev_time * 3.6; // скорость точки на радиусе, км/ч
}
if (millis() - lastshow > 200) { // кадждые 300 миллисекунд
lcd.setCursor(10, 0); // курсор 10 слева 1 строчка
lcd.print(RPM); // выводим RPM
lcd.print(spaces); // очищаем цифры с прошлого вывода
lcd.setCursor(10, 1); // курсор 10 слева 2 строчка
lcd.print(revolutions); // выводим циклы
lcd.print(spaces); // очищаем цифры с прошлого вывода
lastshow = millis(); // сброс таймера
}
} ```
Здесь новая версия форума, поэтому не все важные моменты успели перекочевать сюда со старого.
Изложу вкратце:
Алекс Гайвер - талантливый блогер, но весьма посредственный программист. Причем с амбициями. Ему неоднократно указывали на явные ошибки в составленных им программах, но без толку.
В общем, написанный им код не рекомендуется к использованию. И вычищать из него ошибки на этом форуме никто не будет. На специализированный форум, где это по идее должны были бы делать, Вам указали.
Ну и на будущее: если хотите получить помощь, к вопросу нужно добавлять не только код, но и схему подключения.
Не видя схемы, трудно что-нибудь сказать, но навскидку я бы перенес attachInterrupt() в конец setup(), возможно даже, добавив небольшую задержку перед ней.
Правильно ли я понимаю, что если бы не указал автора кода и почистил его имя в самом коде, то мне сразу же, перебивая друг-друга кинулись бы помогать с проблемой? Т.е. из-за личной неприязни к конкретному блогеру, данное сообщество посылает лесом всех, кто решил реализовать его идею, впервые прикоснувшись к ардуино и программированию? Я ничего не пропустил?
Предвосхищая Ваши оправдания, я Вам скажу, что это ущербная стратегия специалистов и специализированного ресурса в целом. Этот блогер, каким бы кривым не был его код, делает для популяризации данной темы и собственно привлечения юзеров на данный ресурс, гораздо больше всех вместе взятых здешних снобов.
Во-первых, да, дедовщина (правила на новый форум пока не перенесли, но новички и на старом их не читали). Во-вторых, в ваш адрес хамства не было
Ваше мнение очень важно для нас (с). У вас ущербное понимание вопроса - это не специализированный, а хоббийный ресурс. Здесь не занимаются ни популяризацией темы, ни привлечением новых пользователей, соответственно, никто вам ничего не должен. В том числе разбирать ваши (или не ваши) ошибки. Хотите, чтобы вам помогли, сделайте так, чтобы вам захотели помочь. Но Гайвера здесь недолюбливают не без оснований. Вот и вы тоже с его ошибками у него помощи не получили
прямо таки и недолюбливают? да нормально относимся, нормально, прикольный пацан …у него просто времени нет вылизывать коды…вы к нему на форум сходите…вот там настоящая дедовщина…банят влёт )))
Теперь по существу вопроса - с типами переменных ты запутался, при округлении будет округлять в большую сторону то-есть, 0.00001 == 1