ich programmiere gerade meinen arduino, und benutze dafür die
accelstepper library. die hat einen konstruktor, der wie folgt ausschaut:
AccelStepper(void (*forward)(), void (*backward)());
der wird so aufgerufen:
AccelStepper stepper1(forwardstep1, backwardstep1);
wobei die beiden parameter folgende funktionen sind:
void forwardstep1() {
AFstepper1->onestep(FORWARD, stepType1);
}
void backwardstep1() {
AFstepper1->onestep(BACKWARD, stepType1);
}
das funktioniert auch wunderbar, solange alles in dem main sketch liegt. jetzt habe ich mir eine klasse gebaut:
.h file
#ifndef FILTERWHEEL_H_INCLUDED
#define FILTERWHEEL_H_INCLUDED
#endif
#include "Device.h"
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <AccelStepper.h>
#define IICADDRESS 0x60
class FilterWheel : public Device
{
public:
FilterWheel();
private:
Adafruit_MotorShield AFMS;
Adafruit_StepperMotor *AFstepper;
AccelStepper stepper;
void forwardstep();
void backwardstep();
float gearRatio;
int numberOfFilters;
uint8_t stepType;
};
.cpp file:
#include "FilterWheel.h"
FilterWheel::FilterWheel()
{
Adafruit_MotorShield AFMS (IICADDRESS);
Adafruit_StepperMotor *AFstepper = AFMS.getStepper(200, 1);
AccelStepper stepper(forwardstep, backwardstep);
}
void FilterWheel::forwardstep() {
AFstepper->onestep(FORWARD, stepType);
}
void FilterWheel::backwardstep() {
AFstepper->onestep(BACKWARD, stepType);
}
in der .cpp file, zeile 10 wirft mit der compiler folgende fehlermeldung (egal ob die beiden funktionen public oder private sind):
FilterWheel.cpp:In constructor 'FilterWheel::FilterWheel()'
FilterWheel.cpp:10: error: no matching function for call to 'AccelStepper::AccelStepper(<unresolved overloaded function type>, <unresolved overloaded function type>)'
AccelStepper.h:AccelStepper(void (*)(), void (*)())
AccelStepper.h:AccelStepper(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, bool)
AccelStepper.h:AccelStepper(const AccelStepper&)
Error compiling
weis jemand wie ich das problem lösen kann? wenn ich die zeile auskommentiere kompiliert der code problemlos.
ersetze ich die zeile durch
AccelStepper stepper(&forwardstep, &backwardstep);
gehts auch nicht:
FilterWheel.cpp:In constructor 'FilterWheel::FilterWheel()'
FilterWheel.cpp:10: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&FilterWheel::forwardstep'
FilterWheel.cpp:10: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&FilterWheel::backwardstep'
FilterWheel.cpp:10: error: no matching function for call to 'AccelStepper::AccelStepper(void (FilterWheel::*)(), void (FilterWheel::*)())'
AccelStepper.h:AccelStepper(void (*)(), void (*)())
AccelStepper.h:AccelStepper(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, bool)
AccelStepper.h:AccelStepper(const AccelStepper&)
Error compiling
die klasse Device ist eine leere klasse, hat (noch) keine funktionen oder variablen.
bin für jede hilfe dankbar