87 lines
2.9 KiB
C++
87 lines
2.9 KiB
C++
#ifndef MKS42C_H
|
||
#define MKS42C_H
|
||
|
||
#include <Arduino.h>
|
||
#include <HardwareSerial.h>
|
||
|
||
class MKS42C {
|
||
public:
|
||
/**
|
||
* @brief Конструктор класса
|
||
* @param serial Ссылка на объект HardwareSerial (например, Serial2)
|
||
* @param address UART адрес мотора (по умолчанию 0xE0)
|
||
*/
|
||
MKS42C(HardwareSerial& serial, uint8_t address = 0xE0);
|
||
|
||
/**
|
||
* @brief Включить или выключить удержание вала
|
||
* @param state true - включить (Enable), false - отключить (Disable)
|
||
*/
|
||
void setEnable(bool state);
|
||
|
||
/**
|
||
* @brief Остановка двигателя
|
||
*/
|
||
void stop();
|
||
|
||
/**
|
||
* @brief Установить текущую позицию как нулевую (Home)
|
||
* Данные записываются в EEPROM драйвера.
|
||
*/
|
||
void setHome();
|
||
|
||
/**
|
||
* @brief Установка крутящего момента через ограничение тока
|
||
* @param ma Ток в миллиамперах (рекомендуется 0 - 2000)
|
||
*/
|
||
void setTorque(uint16_t ma);
|
||
|
||
/**
|
||
* @brief Запустить непрерывное вращение
|
||
* @param dir Направление: 0 - CW (по часовой), 1 - CCW (против часовой)
|
||
* @param speed Скорость вращения (0 - 255)
|
||
*/
|
||
void run(uint8_t dir, uint8_t speed);
|
||
|
||
/**
|
||
* @brief Поворот на определенное количество градусов
|
||
* @param degrees Угол (положительный или отрицательный)
|
||
* @param speed Скорость вращения (0 - 255)
|
||
*/
|
||
void rotateDegrees(float degrees, uint8_t speed);
|
||
|
||
/**
|
||
* @brief Чтение текущей позиции вала (0-360 градусов)
|
||
* @return Позиция в градусах (float)
|
||
*/
|
||
float readPosition();
|
||
|
||
/**
|
||
* @brief Чтение абсолютной позиции энкодера (с учетом полных оборотов)
|
||
* @return Количество импульсов (14-бит энкодер: 16384 на оборот при MStep 16)
|
||
*/
|
||
long readAbsolutePosition();
|
||
|
||
/**
|
||
* @brief Проверка, завершил ли мотор движение (по команде rotateDegrees)
|
||
* @return true - мотор еще в пути, false - мотор остановился
|
||
*/
|
||
bool isBusy();
|
||
|
||
/**
|
||
* @brief Проверка состояния защиты (блокировка вала)
|
||
* @return true - сработала защита (Protect), false - нормальная работа
|
||
*/
|
||
bool isBlocked();
|
||
|
||
private:
|
||
HardwareSerial* _serial;
|
||
uint8_t _addr;
|
||
bool _moving;
|
||
|
||
uint8_t calculateCRC(uint8_t* data, uint8_t len);
|
||
void sendRaw(uint8_t* data, uint8_t len);
|
||
void clearBuffer();
|
||
};
|
||
|
||
#endif |