Помогите подружить vl53l0x и FlexiTimer2
- Войдите на сайт для отправки комментариев
Сб, 04/04/2020 - 15:40
Пожалуйста подскажите что делаю не так:
#include <FlexiTimer2.h> #include <VL53L0X.h> #include <Wire.h> VL53L0X sensor; float distance; void setup() { Wire.begin(); Serial.begin(9600); Serial.println("initialization"); FlexiTimer2::set(1500, radar); FlexiTimer2::start(); sensor.setTimeout(500); sensor.init(); } void loop() { // radar(); // delay(1000); } void radar() { Serial.println("radar"); distance = sensor.readRangeSingleMillimeters() / 10; Serial.print("Distance = "); Serial.println(distance); }
Зависает и не хочет мерять растояние при вызове через FlexiTimer2, в com-порт отдается так:
----
initialization
14:26:12.258 -> ra
----
А если строки 15 и 16 закоментировать, а в loop() разкоментировать - то отлично все меряет.
Спасибо.
библиотека FlexTimer запускает вашу процедуру через прерывание - а это значит что внутри запускаемой процедуры, в данном случае процедуры radar - никакие другие прерывания использовать нельзя. А VL53 как раз именно через прерывания и работает.
Вывод - вместе эти процедуры использовать не выйдет.
непонятно другое - нафига вам вообще понадобился ФлексТаймер? - неужели всего лишь ради того, чтоб запускать радар раз в секунду? - это, простите, как микроскопом гвозди забивать. Выкиньте таймер, напишите 2 строчки через миллис - и все отлично заработает
Эх, уже б давно и сделал и пробовал через миллис, но не пашет оно так:) Это четырехногий паук, у него эти все движения серво-лап через FlexTimer идут, а я хочу прицепить дальномер чтоб он постоянно головой крутил, оценивал ситуацию и коректировал движение в процесе, уже по-всякому пробовал тот дальномер сунуть, пока работает только между движением - когда он стоит. Т.е. остановился, головой прокрутил - пошел дальше. А некрасиво это выглядит.
Эх, уже б давно и сделал и пробовал через миллис, но не пашет оно так:)
показывайте как пробовали, не вижу проблем сделать через миллис
там кода 1387 строк (и большинство не моего:) Как бы если есть доброты настолько чтоб это все глянуть то вот текущее состяние кода: ------, сейчас я пока между шагами всовываю дальномер. А текущее желание это всегда раз в 100мс повернуть серво с дальномером и оценить растояние на новом угле.
Когда он делает шаг вперед: step_forward(1) то на секунду loop останавливается и идет работа только с лапами - millis туда не могу вставить, я пробовал сунуть дальномер в ф-ции какие движут лапами, но он там уже не определяет растояние, наверное причина в том что лапы вызываются FlexTimer-ом.
https://www.youtube.com/watch?v=Px1HZeMtJQY - а это старый вариант когда препятствие прямо перед носом, он оставливается и тогда смотрит куда идти, но так он трется по стенах боком. Пробовал поставить по бокам два ультразвуковых, чтоб постоянно смотрел по сторонам и корректировался, но так тоже не очень красиво:)
вы вполне можете выложить в форум свои 1300 строк - сюда и больше выкладывали. Тогда может не только я, но и кто другой посмотрит.
Только, пожалуйста, спрячьте код под спойлер.
А качать архив и разбираться внем - нет, настолько моя доброта не простирается, извините