#include "Movement.h" // У библиотеки есть два конструктора для создания класса. // 1 - пустой, как указано ниже. // 2 - Movement m(double wheel_rad, int steps_per_turn) - задает два дополнительных параметра (радиус колеса в миллиметрах и количество шагов на оборот у шаговика) Movement m; void setup() { Serial.begin(9600); // Если был использован первый тип конструктора, необходимые константы надо задать вручную: m.set_wheel_rad(100); m.set_steps_per_turn(360); // Поскольку подсчет шагов и измерения радиуса колеса могут иметь погрешность, библиотека имеет // скаляр для модификации количества подсчитанных шагов. Если робот делает их слишком мало, // сюда можно поставить, например, "1.3", и количество шагов увеличится. Если слишком много - "0.7" // и так далее. Этот параметр нужно будет найти подбором путем большого количества тестов. // Это обязательный параметр, без него ничего работать не будет. m.set_steps_mod(0.9); // Метод set_speed(int speed) устанавливает относительную скорость робота. // Все значения скорости находятся в интервале [0, 1]. 0 - отсутствие движения, // 1 - максимальная скорость. В этом методе, по сути, задается штука, на которую // будут умножаться все скорости колес после их вычисления. m.set_speed(1); // На данный момент работает функция для движения по прямой - m.move_straight(double angle, double distance_mm); // Она принимает значение угла (в радианах) и расстояния (в миллиметрах) и делает все подсчеты. m.move_straight(3.14, 500); // Получить доступ к скоростям и шагам можно через соответствующие функции. // Метод get_speed(int wheel) возвращает скорость для определенного колеса. // 0 - верхнее левое // 1 - верхнее правое // 2 - нижнее левое // 3 - нижнее правое Serial.print(m.get_speed(0)); Serial.print('\t'); Serial.print(m.get_speed(1)); Serial.print('\t'); Serial.print(m.get_speed(2)); Serial.print('\t'); Serial.print(m.get_speed(3)); Serial.print("\t\t"); // Метод get_steps(int type) возвращает количество шагов, которое должно сделать // колесо каждого типа. Тип - это, по сути, угол шарниров на колесе. // Тип 1 - верхнее левое и нижнее правое // Тип 2 - верхнее правое и нижнее левое // Количество шагов может быть отрицательным! Это просто значит, что крутить колесо надо в противоположную сторону. Serial.print(m.get_steps(1)); Serial.print('\t'); Serial.println(m.get_steps(2)); // Через библиотеку также можно напрямую задать угол без расстояния и она // просто подсчитает скорости для каждого колеса. for (double angle_deg = 0; angle_deg <= 360; ++angle_deg) { // Из градусов в радианы ( acos(-1) это Пи ) // Метод set_force_angle(double angle) принимает угол в радианах и вычисляет // скорости для колес. m.set_force_angle(angle_deg / 180 * acos(-1)); Serial.print(angle_deg); Serial.print(": \t"); Serial.print(m.get_speed(0)); Serial.print('\t'); Serial.print(m.get_speed(1)); Serial.print('\t'); Serial.print(m.get_speed(2)); Serial.print('\t'); Serial.println(m.get_speed(3)); } } void loop() { }