通常在Stack Overflow上给出的答案足以解决我遇到的问题,但是现在我遇到了麻烦。特别...
我正在尝试构建一个定制的模块化解决方案,以使用移位寄存器来驱动步进电机。为此,我尝试实现“ RegisterWrite”功能(就像Arduino的“ digitalWrite”一样)以更改寄存器输出引脚的状态。
现在看来,我无法在其成员函数中使用“注册”对象的成员变量值。我不知道我在哪里搞砸...
我正在尝试尽可能地压缩我的代码:
main.cpp
#include<Register.h>
Register register1(8, 16, 2, 0);
void motor(){ //this function is called via a html request handle
uint8_t value[8] = {1,0,1,0,1,0,1,0}; //setting values for register outputs
register1.setOutputValues(value); //writing values to member variable
register1.setOutput(); //actually setting the output of the register
}
void setup(){
something something
}
void main(){
something something
}
Register.h
#ifndef REGISTER_H
#define REGISTER_H
#include<Arduino.h>
class Register{
private:
int _NumberOutputs;
public:
uint8_t _OutputValues[];
uint8_t _DataPin;
uint8_t _ClockPin;
uint8_t _ShiftPin;
Register(int NOutputs, uint8_t Data, uint8_t Clock, uint8_t Shift);
Register();
void setOutputValues(uint8_t OValues[]);
void setOutput();
};
#endif
Register.cpp
#include<Register.h>
#include<Arduino.h>
Register::Register(int NOutputs, uint8_t Data, uint8_t Clock, uint8_t Shift){
_NumberOutputs = NOutputs;
_DataPin = Data;
_ClockPin = Clock;
_ShiftPin = Shift;
}
Register::Register(){
}
void Register::setOutputValues(uint8_t OValues[]){
for (int i = 0; i < _NumberOutputs; i++){
_OutputValues[i] = OValues[i];
}
}
void Register::setOutput(){
digitalWrite(_DataPin, 0);
....
....
}
这就是_DataPin的值最终为“ 1”而不是“ 16”的原因,从而弄乱了代码。
此外,如果我返回到main.cpp
...在调用register1.setOutput()
之前,_DataPin
的实际值为“ 16”,然后在调用{{1 }}。似乎只有register1.setOutput()
register1.setOutput()
内部等于1。我不知道。