Кажется, переменные-члены изменяются сами по себе. - PullRequest
0 голосов
/ 25 июня 2018

Обычно данных ответов о переполнении стека достаточно для решения проблем, с которыми я сталкиваюсь, но теперь я сталкиваюсь с чем-то.special ...

Я пытаюсь создать нестандартное модульное решение для управления шаговым двигателем с помощью регистра переключения передач.Для этого я попытался реализовать функцию «RegisterWrite» (как и Arduinos «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
}

Зарегистрироваться.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", а затем снова после вызова register1.setOutput().Кажется, что только внутри register1.setOutput() _DataPin равно 1. Понятия не имею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...