Update README.md
This commit is contained in:
parent
08df10b3b0
commit
9f4a6fd0be
117
README.md
117
README.md
|
@ -46,3 +46,120 @@ uint8_t clicks; // доступ к счётчику кликов
|
||||||
uint8_t hasClicks(); // вернёт количество кликов, если они есть
|
uint8_t hasClicks(); // вернёт количество кликов, если они есть
|
||||||
bool hasClicks(uint8_t num); // проверка на наличие указанного количества кликов
|
bool hasClicks(uint8_t num); // проверка на наличие указанного количества кликов
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### GyverStepper2 by AlexGyver
|
||||||
|
|
||||||
|
###### Логика работы
|
||||||
|
|
||||||
|
- setTarget()/setTargetDeg() отправляет мотор на указанную позицию
|
||||||
|
- Движение происходит в tick(), который нужно опрашивать постоянно. Либо в tickManual, который нужно вызывать с периодом, полученным из getPeriod() и пересчитывать на каждом шаге
|
||||||
|
- tick() вернёт true, если мотор крутится
|
||||||
|
- ready() однократно вернёт true, если мотор доехал до цели и остановился
|
||||||
|
- Во время движения к цели можно вызвать pause(), тогда мотор доедет до точки и остановится, ready() не вернёт true
|
||||||
|
- Во время движения к цели можно вызвать stop(), тогда мотор затормозит с заданным ускорением, ready() не вернёт true
|
||||||
|
- Во время движения к цели можно вызвать brake(), тогда мотор остановится, ready() не вернёт true
|
||||||
|
- После остановки можно вызвать resume(), мотор продолжит движение к цели
|
||||||
|
- Постоянное вращение задаётся setSpeed()/setSpeedDeg(). Остановиться можно резко - stop() или brake()
|
||||||
|
- Скорость и ускорение можно задать в любое время, но применяются они после остановки мотора!
|
||||||
|
|
||||||
|
###### Инициализация
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
GStepper2<STEPPER2WIRE> stepper(шаговНаОборот, step, dir); // драйвер step-dir
|
||||||
|
GStepper2<STEPPER2WIRE> stepper(шаговНаОборот, step, dir, en); // драйвер step-dir + пин enable
|
||||||
|
GStepper2<STEPPER4WIRE> stepper(шаговНаОборот, pin1, pin2, pin3, pin4); // драйвер 4 пин
|
||||||
|
GStepper2<STEPPER4WIRE> stepper(шаговНаОборот, pin1, pin2, pin3, pin4, en); // драйвер 4 пин + enable
|
||||||
|
GStepper2<STEPPER4WIRE_HALF> stepper(шаговНаОборот, pin1, pin2, pin3, pin4); // драйвер 4 пин полушаг
|
||||||
|
GStepper2<STEPPER4WIRE_HALF> stepper(шаговНаОборот, pin1, pin2, pin3, pin4, en); // драйвер 4 пин полушаг + enable
|
||||||
|
```
|
||||||
|
|
||||||
|
###### Использование
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// === наследуется из Stepper ====
|
||||||
|
void step(); // сделать шаг
|
||||||
|
void invertEn(bool val); // инвертировать поведение EN пина
|
||||||
|
void reverse(bool val); // инвертировать направление мотора
|
||||||
|
void disable(); // отключить питание и EN
|
||||||
|
void enable(); // включить питание и EN
|
||||||
|
void attachStep(void (*handler)(uint8_t)); // подключить обработчик шага
|
||||||
|
void attachPower(void (*handler)(bool)); // подключить обработчик питания
|
||||||
|
|
||||||
|
int32_t pos; // текущая позиция в шагах
|
||||||
|
int8_t dir; // направление (1, -1)
|
||||||
|
|
||||||
|
// ========= GStepper2 ==========
|
||||||
|
// тикер
|
||||||
|
bool tick(); // тикер движения, вызывать часто. Вернёт true, если мотор движется
|
||||||
|
bool tickManual(); // ручной тикер для вызова в прерывании таймера с периодом getPeriod(). Вернёт true, если мотор движется
|
||||||
|
bool ready(); // однократно вернёт true, если мотор доехал до установленной позиции и остановился
|
||||||
|
|
||||||
|
// вращение
|
||||||
|
void setSpeed(int16_t speed); // установить скорость в шагах/сек и запустить вращение
|
||||||
|
void setSpeed(float speed); // установить скорость в шагах/сек (float) и запустить вращение
|
||||||
|
|
||||||
|
// движение к цели
|
||||||
|
void setTarget(int32_t ntar, GS_posType type = ABSOLUTE); // установить цель в шагах и опционально режим ABSOLUTE/RELATIVE
|
||||||
|
void setTargetDeg(int32_t ntar, GS_posType type = ABSOLUTE); // установить цель в градусах и опционально режим ABSOLUTE/RELATIVE
|
||||||
|
int32_t getTarget(); // получить целевую позицию в шагах
|
||||||
|
|
||||||
|
void setAcceleration(uint16_t nA); // установка ускорения в шаг/сек^2
|
||||||
|
void setMaxSpeed(int speed); // установить скорость движения при следовании к позиции setTarget() в шагах/сек
|
||||||
|
void setMaxSpeed(float speed); // установить скорость движения при следовании к позиции setTarget() в шагах/сек, float
|
||||||
|
void setMaxSpeedDeg(int speed); // установить скорость движения при следовании к позиции в град/сек
|
||||||
|
void setMaxSpeedDeg(float speed); // установить скорость движения при следовании к позиции в град/сек, float
|
||||||
|
|
||||||
|
void setCurrent(int32_t npos); // установить текущую позицию
|
||||||
|
int32_t getCurrent(); // получить текущую позицию
|
||||||
|
void reset(); // сбросить текущую позицию в 0
|
||||||
|
|
||||||
|
// всякое
|
||||||
|
uint32_t getPeriod(); // получить текущий период тиков
|
||||||
|
void brake(); // резко остановить мотор
|
||||||
|
void pause(); // пауза - доехать до заданной точки и ждать (ready() не вернёт true, пока ты на паузе)
|
||||||
|
void resume(); // продолжить движение после остановки/паузы
|
||||||
|
uint8_t getStatus(); // текущий статус: 0 - стоим, 1 - едем, 2 - едем к точке паузы, 3 - крутимся со скоростью, 4 - тормозим
|
||||||
|
|
||||||
|
// ===== ДЕФАЙНЫ НАСТРОЕК =====
|
||||||
|
// дефайнить перед подключением библиотеки
|
||||||
|
#define GS_NO_ACCEL // отключить модуль движения с ускорением (уменьшить вес кода)
|
||||||
|
|
||||||
|
#define GS_FAST_PROFILE размер_массива (например 10)
|
||||||
|
Включает быстрый планировщик скорости. Участок разгона/торможения разбивается
|
||||||
|
на указанное количество отрезков (+8 байт SRAM на участок), на них скорость будет одинаковая.
|
||||||
|
Это позволяет быстро вычислять скорость мотора и достигнуть 30000 шаг/с на участке разгона
|
||||||
|
(в обычном режиме в два раза меньше).
|
||||||
|
```
|
||||||
|
|
||||||
|
###### Пример
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "GyverStepper2.h"
|
||||||
|
GStepper2<STEPPER2WIRE> stepper(2048, 2, 3);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
//stepper.enable();
|
||||||
|
stepper.setMaxSpeed(100); // скорость движения к цели
|
||||||
|
stepper.setAcceleration(200); // ускорение
|
||||||
|
stepper.setTarget(300); // цель
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dir = 1;
|
||||||
|
void loop() {
|
||||||
|
stepper.tick(); // мотор асинхронно крутится тут
|
||||||
|
|
||||||
|
// если приехали
|
||||||
|
if (stepper.ready()) {
|
||||||
|
dir = !dir; // разворачиваем
|
||||||
|
stepper.setTarget(dir * 300); // едем в другую сторону
|
||||||
|
}
|
||||||
|
|
||||||
|
// асинхронный вывод в порт
|
||||||
|
static uint32_t tmr;
|
||||||
|
if (millis() - tmr >= 30) {
|
||||||
|
tmr = millis();
|
||||||
|
Serial.println(stepper.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue