Arduino函数无缘无故地更改参数

Arduino function changes argument for no reason

本文关键字:参数 函数 无缘无故 Arduino      更新时间:2023-10-16

我为阿杜诺(Aduino(写了一个课程,用于阅读ADS124X,并且我遇到了一个主要问题,我无法称呼该类定义的功能。这是结构化的方式:

  • .ino调用功能。操作员
  • .h包含寄存器地图和类定义
  • .cpp包含类的所有功能

到目前为止,正在发生的.ino在.cpp中成功调用一个函数,但是当同一函数在.cpp中调用另一个函数时,它无法调用。

.ino:

#include "ADS124X.h"
void setup(){
    ADS124X ADS124X(1,2,3,4);
    Serial.begin(9600);
    ADS124X.setUP(0x20, 0x20);}

.h:

class ADS124X{
    public:
        void reset(void);
        void setUP(unsigned char* mux1, unsigned char* sys0);
    private:
        void SPI_Write(unsigned char* data, unsigned char size);
}

.cpp:

void ADS124X::setUP(unsigned char * mux1, unsigned char * sys0)
{
    Serial.println("hi");    //prints this
    delay(1);
    reset();                 // stops here
    Serial.println("hi");    // doesn't print this
    delay(1);
    stopDataCont();
    delay(210);
    setREG(MUX1, mux1, 1);
    setREG(SYS0, 0x01, 1);
    delay(1);
}
void ADS124X::reset(void)
{
    unsigned char dataToSend[] = { RESET };
    START_HIGH;
    CS_LOW;
    Serial.println(RESET);       // prints this as 0x06 (correct value)
    SPI_Write(dataToSend, 1);    // Seems to stop here
    START_LOW;
    CS_HIGH;
}
void ADS124X::SPI_Write(unsigned char * data, unsigned char size)
{
    Serial.println("SPI_Write");    //prints this
    for (unsigned int i = 0; i < size; i++) {
        Serial.println("SPI_Write");    //prints this
        Serial.println(* data);    //prints this as 126 (if RESET is 3 * data becomes 189...)
        SPI.transfer(*data);
        Serial.println("SPI_Write");
        data++;
    }
}

这是不对的...

   Serial.println(RESET);       // println expects a null terminated string  
                                // you are sending a char.

您应该将datatosend定义为null终止的char数组。

void ADS124X::reset(void)
{
  char dataToSend[] = { RESET, 0 };
  // ...
  serial.println(dataToSend);  // maybe println "reset" would be better?
  SPI_Write(dataToSend, 1); 
  //...
}

不要期望在串行显示器上看到一个不错的0x06,因为那不是可打印的字符。