成员变量似乎会自己改变。

时间:2018-06-25 16:41:30

标签: c++ object variables scope arduino

通常在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。我不知道。

0 个答案:

没有答案