Функция Arduino меняет аргумент без причины

Я написал класс для Aduino, для чтения ads124x, и у меня возникла одна большая проблема: я не могу вызвать функцию, определенную классом. Вот как это структурировано:

  • .Ино вызывает функции с помощью. оператор
  • .h содержит карту регистра и определение класса
  • .CPP содержит все функции класса

пока что происходит то, что .ino успешно вызывает функцию в .cpp, но когда та же самая функция вызывает другую в .cpp, она не может вызвать.

.я нет:

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

.час:

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

.каст:

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++;
}
}

-1

Решение

Это неправильно…

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

Вы должны определить dataToSend как массив символов с нулевым символом в конце.

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

Не ожидайте увидеть хороший 0x06 на вашем последовательном мониторе, так как это не печатный символ.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]