MKS42C/scr/MKS42C.h

87 lines
2.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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