Arduino函数无缘无故地改变参数
Arduino function changes argument for no reason
我为 Aduino 写了一个 class,用于阅读 ads124x,但我有一个主要问题,我无法调用 class 定义的函数。这是它的结构:
- .ino 调用函数使用 .运算符
- .h 包含寄存器映射和 class 定义
- .cpp 包含 class
的所有函数
到目前为止,.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 结尾的字符数组。
void ADS124X::reset(void)
{
char dataToSend[] = { RESET, 0 };
// ...
serial.println(dataToSend); // maybe println "reset" would be better?
SPI_Write(dataToSend, 1);
//...
}
不要指望在您的串行监视器上看到漂亮的 0x06
,因为那不是可打印的字符。
我为 Aduino 写了一个 class,用于阅读 ads124x,但我有一个主要问题,我无法调用 class 定义的函数。这是它的结构:
- .ino 调用函数使用 .运算符
- .h 包含寄存器映射和 class 定义
- .cpp 包含 class 的所有函数
到目前为止,.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 结尾的字符数组。
void ADS124X::reset(void)
{
char dataToSend[] = { RESET, 0 };
// ...
serial.println(dataToSend); // maybe println "reset" would be better?
SPI_Write(dataToSend, 1);
//...
}
不要指望在您的串行监视器上看到漂亮的 0x06
,因为那不是可打印的字符。