ARDUINO gps и шаговый мотор. Где косячу и как сделать лучше.

Romashchandr

✩✩✩✩✩✩✩
19 Июл 2022
19
0
Ура! кажется заработало.. стрелочки <, > неправильно стояли. Моторчик заработал. Угол поворота высчитывается от разницы курсов двух последовательных циклов.... завтра помучаю в автомобиле.

подозреваю что может вылезти и накапливаться ошибка с округлением данных курса до целочисленной переменной.

если же все нормально будет работать. то следующая цель --- Первоначальное приведение положения циферблата компаса и соответствующих переменных к нулю

@Старик Похабыч,
То есть "как можно чаще" следует понимать "как можно раньше"?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,264
1,301
Москва
@Romashchandr,
Нет.
В замкнутом цикле "раньше" это очень условно.
Пример:
если пин в состоянии HIGH, то флаг=1
если флаг==1, то включить светодиод

если флаг - глобальная переменная , то порядок абсолютно не важен.

Как можно чаще - с частотой обеспечивающей нужную работу. Пример номер 2
Мотор нема обеспечивает максимальную скорость 5 оборотов в секунду.
Драйвер работает в режиме четверти шага, т.е. имеем 800 шагов на оборот.
Для максимальной скорости надо делать 800*5=4000 шагов в секунду. При для плавной работы они должны быть через 1000000/4000=250мкс.
Это можно обеспечить работой по таймеру, но если цикл loop крутится быстрее чем 4000 циклов в секунду, то можно прост вызывать тик в теле цикла. 4000 обеспечит почти любой код (кроме совсем уж убитых). Большие задержки в цикле приведут к возможным подергиванием мотора, а избыточное тиканье будет проигнорировано в библиотечной функции
 
  • Лойс +1
Реакции: Romashchandr

Romashchandr

✩✩✩✩✩✩✩
19 Июл 2022
19
0
Подскажите еще пожалуйста. Как теперь организовать:
1. по двойному клику энкодера полную остановку выполненияпрограммы написаной выше и перевод мотора под управление энкодера.
2. обратное действие -- прекращение управления мотором с помощью энкодера и возврат к выполнению программы..

с библиотеками энкодера и мотора разобрался и состыковать их могу.... не понимаю как с одной задачи переключится на другую

З.Ы. тут подумал, первоначальную программу даже не надо всю отключать, достаточно убрать (заменить) передачу данных в переменную real_course с GPS (на энкодер). либо прекратить выполнение таймера работы мотора. и написать отдельно работу мотора по командам энкодера . GPS пусть себе координаты считает.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,264
1,301
Москва
в начале писываем
логическая переменная "режим работы"=тру;

в цикле loop:
если двойное нажатие энкодера, то режим работы=!режим работы;
если (режим работы)
// тут один вариант кода , скажем для работы под энкодером
иначе
// тут режим работы кода под каким то другим вариантом.

если режимов работы больше, то чуть сложнее. режим работы будет не логическая переменная а числовая, с каждым климом режим увеличивается на 1, если превышает диапазон - возвращается на начальное значение.
а далее по switch делается выбор нужного кода для выполнения.
 
  • Лойс +1
Реакции: Romashchandr