C - прекрасный язык для работы с микропроцессорами, и для многих задач запись в ассемблере все еще жизнеспособна.
Не думаю, что вам действительно нужна сложная структура данных.
I 'd просто определите несколько констант, таких как минимальная и максимальная передача и диаметр колеса
. Затем индексируйте массив, используя номер передачи, который имеет минимальную и максимальную скорости для каждой передачи и, наконец, переменную для хранения текущей передачи.
Я бы просто вызывал прерывание при каждом обороте и использовал его для вычисления скорости и при необходимости давал команду переключения передач вверх и вниз.
Для дополнительного использования я бы добавил что-то, чтоВы не хотите менять передачу, если вы неподвижны, изменили передачу меньше, чем x мс назад, и вам понадобится какая-то калибровка.
У Shimano есть система, которая хорошо выглядит и хорошо отзывается, но стоит дорогоТем не менее, было бы хорошо использовать в качестве ссылки.