У меня возникают трудности с движением моего шагового двигателя. Я сузил его до проблемы с кодом, потому что пример кода по умолчанию для easydriver отлично работает:
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::DRIVER, 3, 2);
int pos = 3600;
void setup()
{
stepper.setMaxSpeed(3000);
stepper.setAcceleration(1000);
}
void loop()
{
if (stepper.distanceToGo() == 0)
{
delay(500);
pos = -pos;
stepper.moveTo(pos);\
}
stepper.run();
}
Но если я использую этот код, он терпит неудачу. Я думаю, что это как-то связано с моей попыткой использовать AccelStepper
как подкласс Motor
, Это странно, потому что приведенный ниже код компилируется и загружается без ошибок в микроконтроллер, но двигатель не вращается. Я также получаю серийный выход.
#include <Arduino.h>
#include <AccelStepper.h>
class Motor{
protected:
AccelStepper accelStepperObject;
public:
Motor(int, int, int, int, int);
void travelToAngle(int angleTarget);
};
Motor::Motor(
int maxSpeed,
int sleepPin,
int enablePin,
int stepPin,
int dirPin
)
: accelStepperObject(AccelStepper::DRIVER, stepPin, dirPin)
{
//set mcu pins
pinMode(sleepPin, OUTPUT);
digitalWrite(sleepPin, LOW);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, HIGH);
//configure accelstepper object
this->accelStepperObject.setMaxSpeed( maxSpeed );
this->accelStepperObject.setAcceleration( 1000 );
Serial.println("f");
}
void Motor::travelToAngle(int angleTarget){
//code that would usually convert angle to steps omitted here for simplicity
Serial.println("a");
this->accelStepperObject.runToNewPosition(angleTarget);//something messes up here
Serial.println("b");
};
void setup() {
Serial.begin(9600);
delay(4000);//give UART time to sync up
Motor theta(
3000,//maxSpeed
19,//sleepPin
20,//enablePin
3,//stepPin
2//dirPin
);
Serial.println("c");
theta.travelToAngle(100);
Serial.println("d");
theta.travelToAngle(0);
Serial.println("e");
}
void loop() {
}
стандартный вывод:
f
c
a
b
d
a
b
e
Задача ещё не решена.
Других решений пока нет …