Пожалуй поделюсь неплохой новостью, хотя и без когтей в носу.
Гоняя тиньку13 и ища что же с ней такого вытворить, начал искать альтернативу как в неё всё втиснуть и наконец то гугл начал меня понимать и давать чтото не только ардуиновское, ну хотя это не в тему.
В общем
нашёл рабочий код и он православный. Прикошачил вариант 2.
Вот только работает он исключительно с 8 ногой ардуины она же ICP, у qfp32 меги328 похоже 14, но суть в том что у камня она всего одна.
Статью недочитал поэтому на кой там
pinMode(IR_PIN, OUTPUT); //на выход не знаю, врятли добавит точности.
В коде есть delay(1000) в setup() который я выкинул и delay(500) в loop() который у меня эстетически остался 40.
Строка деления времени в частоту
float f = 2000000/float(ttime) ну эт полнейшая фигня. Не понял в чём суть выставления такого числа, но показания были завышены в 2 раза.
Ну если быть точнее то когда выставил 1000000, 8кгц было 8333[3]гц, в общем оно завышает.
Ну а вообще
float в этом месте не работает и его надо объявлять за пределами строки,
вывод результата внутри
if (ttime!=0) {} тоже нерабочий, его надо делать после. Но у меня экран.
будто бы это какойто другой ардуино.
Поэтому на экран сразу отправлял ttime.
Работает в целом своеобразно, результат стоит на месте, но раз в четверть времени подрагивает.
При 1гц получилось чтото вроде 1002300, не считая последние 3 цифры.
При 4кгц окло 241, при 8к 118, при 32к 27.
Хотя как влиять скважность не знаю.
Ну а теперь костыль с выводом.
Поскольку при 1гц показания должны быть 6.066, то и взял за основу 6066, а подругому я пытался, но никак.
- Код:
#define KM_SYM 5
static char SpeedKmHtxt[KM_SYM+1];
Тут кабы борьба за байты, от числа мало что меняется, но если нехватает места, перекашивает весь код и на экране чёрти что, как это связано я не нашёл, но перекашивает всё кроме этой функции.
- Код:
SpeedKmH =6087230959/ttime ;
у меня получилась вот такая цифра и это не точно, на высоких частотах она заметно завышает, подобрать можно толь ко вручную, но на милионы я не готов.
- Код:
dtostrf(SpeedKmH/1000,KM_SYM,3,SpeedKmHtxt);
вот такой вот костыль чтоб увидеть десятые, делить именно переменную впихную в функцию.
KM_SYM напрямую связана с этим же числом в переменной, если гдето тесно, начинает округлять результат куда попадя.
Цифру поставлю 2 когда точнее настрою, тогда и KM_SYM можно скинуть до 4, хотя 1 байт мало что даст.
Осталось это дело подключить к датчику и крутануть
----------
Ну в общем оно не работает