seems to work, thank you!
in the meantime, i have come across another problem:
i want to use the accelstepper library. i have extended my code:
Code: Select all
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <AccelStepper.h>
#include "Test.h"
Adafruit_StepperMotor *StepperXAxis;
Adafruit_StepperMotor *StepperYAxis;
Test test;
void setup() {
// put your setup code here, to run once:
test.init();
}
void loop() {
// put your main code here, to run repeatedly:
test.run(); //stepper does not move
}
Code: Select all
#include "Test.h"
Test::Test() : Adafruit_MotorShield(0x60)
{
}
void Test::init()
{
//AFMS = AFMS(0x60);
StepperXAxis = Adafruit_MotorShield::getStepper(200, 1);
StepperYAxis = Adafruit_MotorShield::getStepper(200, 2);
Adafruit_MotorShield::begin();
AccelStepper StepperX(ForwardStepX, BackwardStepX); //correctly initializes AccelStepper, but only works inside the init() function
AccelStepper StepperY(ForwardStepY, BackwardStepY); //correctly initializes AccelStepper, but only works inside the init() function
//StepperX(ForwardStepX, BackwardStepX); //error: no match for call to '(AccelStepper) (void ()(), void ()())'
//StepperY(ForwardStepX, BackwardStepX); //error: no match for call to '(AccelStepper) (void ()(), void ()())'
//set default parameters for the stepper motors
StepperX.setMaxSpeed(400.0); //speed in steps / second
StepperX.setAcceleration(100.0); //steps / second^2
StepperX.moveTo(1000000); //default destination
StepperY.setMaxSpeed(400.0); //speed in steps / second
StepperY.setAcceleration(100.0); //steps / second^2
StepperY.moveTo(1000000); //default destination
while (true)
{
run(); //stepper does not move
StepperX.run(); //stepper moves
StepperY.run(); //stepper moves
}
}
void Test::run()
{
StepperX.run();
StepperY.run();
}
//X Axis: go 1 step forward
void Test::ForwardStepX() {
StepperXAxis->onestep(FORWARD, SINGLE);
}
//X Axis: go 1 step backward
void Test::BackwardStepX() {
StepperXAxis->onestep(BACKWARD, SINGLE);
}
//Y Axis: go 1 step forward
void Test::ForwardStepY() {
StepperYAxis->onestep(FORWARD, SINGLE);
}
//Y Axis: go 1 step backward
void Test::BackwardStepY() {
StepperYAxis->onestep(BACKWARD, SINGLE);
}
Code: Select all
//Test Class
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <AccelStepper.h>
extern Adafruit_StepperMotor *StepperXAxis;
extern Adafruit_StepperMotor *StepperYAxis;
class Test : public Adafruit_MotorShield
{
public:
Test();
void run();
void init();
static void ForwardStepX();
static void BackwardStepX();
static void ForwardStepY();
static void BackwardStepY();
private:
//Adafruit Motor Shield object
//AccelStepper wrapper
AccelStepper StepperX;
AccelStepper StepperY;
//AccelStepper *StepperX;
//AccelStepper *StepperY;
};
a similar problem like before.
i cannot initialize the AccelStepper objects like the Adafruit_MotorShield object in
my first response. (i also think deriving the class fom AccelStepper won't help in this case, as i need 2 AccelStepper objects.)
when i try to define AccelStepper *StepperX; and AccelStepper *StepperY; and then initialize them with StepperX(ForwardStepX, BackwardStepX); and StepperY(ForwardStepY, BackwardStepY); in the init() function, i get the following error:
error: '((Test*)this)->Test::StepperX' cannot be used as a function
at
StepperX(ForwardStepX, BackwardStepX);
StepperY(ForwardStepX, BackwardStepX);
in init().
i would be most grateful if you could help me with this too.