Function 从其他类成员函数(arduino)调用的类成员函数
我正在开发与arduino接口的nema步进电机驱动器。我创建了一个类。我把它命名为Axis。我想用这个类为每个电机创建一个axis对象。但是,我不能从类中调用Function 从其他类成员函数(arduino)调用的类成员函数,function,class,arduino,static,member,Function,Class,Arduino,Static,Member,我正在开发与arduino接口的nema步进电机驱动器。我创建了一个类。我把它命名为Axis。我想用这个类为每个电机创建一个axis对象。但是,我不能从类中调用arduino.h中的attachintrupt函数。它返回以下错误: In member function 'void Axis::setReverseInt()': parsstep.cpp:12:77: error: invalid use of non-static member function 'void Axis::revD
arduino.h
中的attachintrupt
函数。它返回以下错误:
In member function 'void Axis::setReverseInt()':
parsstep.cpp:12:77: error: invalid use of non-static member function 'void Axis::revDirection()'
attachInterrupt(digitalPinToInterrupt(reverseDirPin), revDirection, RISING);
轴::轴()
{
}
轴::~Axis()
{
}
无效轴::setReverseInt(){
连接中断(数字插针中断(反向插针)、旋转方向、上升);
}
void轴::setStopInt(){
//连接中断(数字插针中断(停止)、停止电机、上升);
}
void Axis::revDirection()
{
dirMode=!dirMode;
}
无效轴::停止电机()
{
moveMotor=!moveMotor;
}
void轴::startMotor()
{
moveMotor=true;
}
void Axis::moveStep(int pulseRev、字节重叠、布尔dir)
{
数字写入(dirPin,dir);
int totalPulse=脉冲数*圈数;
对于(int i=0;istatic Axis *_ISRPointer; // can be declared as private (like in here from the '_' prefix)
然后,在.cpp文件中,您可以这样使用它:
#include "Axis.h"
Axis *Axis::_ISRPointer = nullptr;
您将在安装过程中使用init方法初始化ISR处理程序:
void Axis::init(){
setupISRHandler(reverseDirPin, Axis::ISRHandler, RISING);
}
安装方法如下所示:
void Axis::setupISRHandler(uint8_t pin, void (*ISRFunction)(void), int state){
attachInterrupt(digitalPinToInterrupt(pin), ISRFunction, state);
}
ISR处理程序负责调用ISR例程:
void Axis::ISRHandler(){
_ISRPointer-> revDirection();
}
void Axis::revDirection(void){
// Do not forget to disable interrupts
cli();
// your routine goes here
dirMode= !dirMode;
sei();
}
因此,您将在主.ino文件中执行以下操作:
#include "Axis.h"
#include <whateverotherlibraryyouneed.h>
Axis ax = Axis(); // your new object
void setup(){
ax.init();
ax.startMotor();
}
void loop(){
if(day == SUNNY){
ax.moveStep(100, 2 , CLOCKWISE);
} else {
ax.stopMotor();
}
ax.someOtherMethodToControlTheMotor(anyArgumentYouWant);
}
#包括“Axis.h”
#包括
轴ax=轴();//您的新对象
无效设置(){
ax.init();
ax.startMotor();
}
void循环(){
如果(天=晴天){
最大移动步进(100,2,顺时针);
}否则{
ax.停止电机();
}
ax.其他控制变压器的方法(任意参数);
}
我希望我复杂的解决方案能有所帮助
干杯
丹尼尔博士
void Axis::ISRHandler(){
_ISRPointer-> revDirection();
}
void Axis::revDirection(void){
// Do not forget to disable interrupts
cli();
// your routine goes here
dirMode= !dirMode;
sei();
}
#include "Axis.h"
#include <whateverotherlibraryyouneed.h>
Axis ax = Axis(); // your new object
void setup(){
ax.init();
ax.startMotor();
}
void loop(){
if(day == SUNNY){
ax.moveStep(100, 2 , CLOCKWISE);
} else {
ax.stopMotor();
}
ax.someOtherMethodToControlTheMotor(anyArgumentYouWant);
}