Обычно данных ответов о переполнении стека достаточно для решения проблем, с которыми я сталкиваюсь, но теперь я сталкиваюсь с чем-то.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. Понятия не имею.