Шаговый двигатель перемещается только на один шаг за раз с помощью ИК-датчика.
Я пытаюсь заставить оба двигателя работать одновременно, как только датчик движения обнаружит препятствие. Оба двигателя работают нормально сами по себе, но когда я использую датчик, двигатели перемещаются только на один шаг за каждое обнаруженное движение.
- Ардуино Мега (ATMega 2560)
- (2) Шаговый двигатель NEMA 17/A4988
- Модуль цифрового ИК-датчика
#include <Arduino.h>
#include <avr/io.h>
#include <AccelStepper.h>
AccelStepper stepper(1,5,4); // с драйвером (1, шаг, направление)
AccelStepper stepper2(1,9,8);
const int pin_ir_in = 3;
int prev_state = 1;
int curr_state = 1;
int counter =0;
void setup() {
Serial.begin(9600);
pinMode(6,OUTPUT); // Давать возможность
pinMode(10,OUTPUT);
digitalWrite(6,LOW); // Установить низкий уровень включения
digitalWrite(10,LOW);
}
void loop() {
digitalWrite(6,LOW); // Установить низкий уровень включения
if (stepper.distanceToGo() == 0)
{
delay(1000);
stepper.moveTo(100);
stepper.setMaxSpeed(200);
stepper.setAcceleration(100);
}
digitalWrite(10,LOW); // Установить низкий уровень включения
if (stepper2.distanceToGo() == 0)
{
delay(1000);
stepper2.moveTo(100);
stepper2.setMaxSpeed(200);
stepper2.setAcceleration(100);
}
int curr_state = digitalRead(pin_ir_in);
if (curr_state != prev_state)
{
if (curr_state == 0)
{
stepper.run(); // На самом деле совершает шаговое движение
stepper2.run();
delay(500);
}
prev_state = curr_state;
}
}
@nicolel_phan, 👍0
Обсуждение1 ответ
▲ 1
Как сказал Крисл, вам нужно неоднократно вызывать run
.
Я попытался переписать код, который вы дали, хотя я не совсем уверен, чего вы пытаетесь достичь.
void loop()
{
stepper.run(); // На самом деле совершает шаговое движение
stepper2.run();
int curr_state = digitalRead(pin_ir_in);
if (curr_state != prev_state)
{
if (curr_state == 0) // Активирован датчик движения
{
stepper.moveTo(100);
stepper.setMaxSpeed(200);
stepper.setAcceleration(100);
stepper2.moveTo(100);
stepper2.setMaxSpeed(200);
stepper2.setAcceleration(100);
}
prev_state = curr_state;
}
}
,
@Gerben
Смотрите также:
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Я думаю, что функция запуска должна вызываться неоднократно, пока вы не достигнете позиции, а не только один раз, @chrisl