- Схема
Код: Выделить всё
// com0 STOP
// com1 шаг+
// com2 шаг-
// com3 ход+
// com4 ход-
// comZ СТОП после отключения Bluetooth
#include <AccelStepper.h>
#define HALFSTEP 8
#define motorPin1 8 // IN1 on ULN2003 ==> синий на 28BYJ-48
#define motorPin2 9 // IN2 on ULN2004 ==> Розовый на 28BYJ-48
#define motorPin3 10 // IN3 on ULN2003 ==> Желтый на 28BYJ-48
#define motorPin4 11 // IN4 on ULN2003 ==> Оранжевый на 28BYJ-48
//ПРИМЕЧАНИЕ. Последовательность 1-3-2-4 требуется для правильной последовательности 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
String myString = "";
boolean validCommand = false;
boolean justRun = false; //если правда, указывает нужно работать на постоянной скорости
long mySteps = 2048; //Предполагая, что номинально 4096 шагов на оборот
float mySpeed = 500.0;
char command;
void setup()
{
Serial.begin(9600);
Serial.println("Bluetooth is NOT connected");//Bluetooth не подключен
Serial.println("Waiting for data");//Ожидание данных
stepper1.disableOutputs(); // отключить мотор катушки, пока не потребуется
stepper1.setMaxSpeed(1000.0);
}
void loop()
{
validCommand = false;
readData(); // Прочитайте все доступные символы из последовательного входного буфера
checkData(); // Проверите строку ввода данных на валидность и извлечь команду
if (validCommand) //Если командная строка была действительна
{
processCommand(); // Команда характер процесса и изменения шагового двигательное поведение
}
if (justRun)
{
stepper1.runSpeed(); // Хранить непрерывно работает на заранее определенной скорости и направлении
}
else
{
stepper1.run(); // Запуск до определено ранее конечная точка не будет достигнута,
} //с предварительно определенным ускорением и конечной скоростью.
}
//-------------------------------------------------------------------------------------------
//
// Функция для чтения доступных данных из последовательного входного буфера
//
void readData()
{
while ( Serial.available() ) //Читайте в то время как есть доступные персонажи
{
delay(3);
char c = Serial.read();
myString += c; //построить командную строку
}
Serial.print(myString); // Вывод полной командной строки - для отладки
}
//-------------------------------------------------------------------------------------------
//
//Функция для проверки строки входных данных для действия и извлечь управляющий символ
//
void checkData()
{
// Является ли строка входных данных 4 символов, начиная с подстроки "com" ?
if (( myString.length() == 4) && (myString.startsWith("com") ))
{
validCommand = true;
command = myString[3]; //Получить командный характер
Serial.print(" command is ");
Serial.println(command);
}
else //строка входных данных должна содержать по крайней мере 1 символ, или мы застреваем в цикле
if ( myString.length() > 0)
{
validCommand = false;
Serial.println(" command string is invalid"); //командная строка недействительна
}
myString = ""; // Очистить строку ввода данных в следующий раз
}
//-------------------------------------------------------------------------------------------
//
//Функция для обработки команд характера и изменить поведение двигателя шагового
//
void processCommand()
{
justRun = false;
stepper1.enableOutputs(); // включить катушки двигателя
switch (command)
{
case '0': //Прекратите немедленно
{
Serial.println("STOP immediately");//Прекратите немедленно
stopNow();
break;
}
case '1': // двигаться половиной оборота по часовой стрелке, ускорение и замедление
{
Serial.println("step clockwise"); //шаг по часовой стрелке
moveSteps(mySteps);
break;
}
case '2': //перейти половину оборота против часовой стрелки, ускорение и торможение
{
Serial.println("step anti-clockwise");//шаг против часовой стрелки
moveSteps(-mySteps);
break;
}
case '3': // бегите медленно по часовой стрелке на постоянной скорости, без ускорения
{
Serial.println("бежать по часовой стрелке");
runAtSpeed(mySpeed);
break;
}
case '4': //бегите медленно против часовой стрелки на постоянной скорости, без ускорения
{
Serial.println("бегите против часовой стрелки");
runAtSpeed(-mySpeed);
break;
}
case 'Z': // Bluetooth отключен; немедленно остановитесь
{
Serial.println("Bluetooth отключен; немедленно остановитесь");
stopNow();
break;
}
default: // символ команды не соответствует диапазону допустимых команд
Serial.print(command);
Serial.println(" ....не находится в допустимом диапазоне команд");
break;
}
}
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для перемещения на определенное количество шагов
//
void moveSteps(long steps)
{
stepper1.setAcceleration(10.0);
stepper1.setSpeed(5.0);
stepper1.setCurrentPosition(0);
stepper1.moveTo(steps);
}
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для работы с определенной скоростью
//
void runAtSpeed(float cSpeed)
{
stepper1.setSpeed(cSpeed);
justRun = true;
}
//-------------------------------------------------------------------------------------------
//
//Функция для того чтобы остановить stepper мотор немедленно и отключить катушки мотора
//
void stopNow()
{
stepper1.stop();
stepper1.setCurrentPosition(0);
stepper1.run(); // остановки и набор команд только "активные" после звонка на ("побегать") "run"
stepper1.disableOutputs(); // отключите катушки двигателя для экономии энергии
}
GOOGLE PLAY