В продолжении темы " Не возвращает каретку слайдер в предполагаемое положение try 2 " (Не возвращает каретку слайдер в предполагаемое положение try 2 - #11 от пользователя lednevandrey04).
В программе, лазер мигает в моменты, когда двигатель остановился в указанных координатах. А есть ли возможность мигать лазерным диодом во время работы двигателя? С частотой, скажем каждую десятую долю секунды для состояния ON, и каждые пять десятых для состяния OFF ???
#include <AccelStepper.h>
AccelStepper Stepper1(1, 13, 12); // Использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
int LASER = 8; // Пин лазера.
int buttonPin = 11; // Пин концевика.
static bool newZeroPoint = true; // Флаг указывающий, что надо найти сначала нулевую позицию, а потом делать остальное.
void setup() {
pinMode(buttonPin, INPUT); //
pinMode(LASER, OUTPUT); // инициализируем Pin8 как выход
Stepper1.setMaxSpeed(1000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
// скорость перемещения по слайдеру 20 секунд -- Stepper1.setMaxSpeed(1800);
Stepper1.setAcceleration(300); //устанавливаем ускорение (шагов/секунду^2)
}
void loop() {
// Поиск начальной позиции.
if (newZeroPoint)
{
if (digitalRead(buttonPin))
{
// Если концевик сработал, то выставляем нуливую позицию и завершаем поиск.
Stepper1.setCurrentPosition(0);
Stepper1.moveTo(100);
Stepper1.runToPosition();
delay(1000); // Пауза в 1 сек
newZeroPoint = false;
} else
{
// Двигаемся влево на один шаг, до тех пор пока не сработает концевик.
if (Stepper1.distanceToGo() == 0) {Stepper1.moveTo(Stepper1.currentPosition() - 1);}
Stepper1.run();
}
}
else
{
digitalWrite(LASER, HIGH); // Включение лазера на 1 секунду
delay(1000); // Включение лазера на 1 секунду
digitalWrite(LASER, LOW); // Выключение лазера
Stepper1.moveTo(30000); // Позиция №1
Stepper1.runToPosition(); // Ждем пока двигатель не встанет в заданную позицию
delay(5000); // Пауза в 5 сек
digitalWrite(LASER, HIGH); // Включение лазера на 1 секунду
delay(1000); // Включение лазера на 1 секунду
digitalWrite(LASER, LOW); // Выключение лазера
Stepper1.moveTo(-30000); // Позиция №1
Stepper1.runToPosition(); // Ждем пока двигатель не встанет в заданную позицию
delay(5000); // Пауза в 5 сек
}
}