【发布时间】:2017-07-31 07:39:06
【问题描述】:
我是 Arduino 新手,我正在尝试使用 SPI 将数据从一个 Arduino 传输到另一个。我在发送字符数组(C 字符串)时遇到问题。首先,我认为问题在于定义字符串本身(因为我试图在同一个 Arduino 上连续打印它并且它确实有效),所有其他数据类型都可以正常发送,但是由于某种原因字符串变成空白(当我连续打印它们时) , 而是打印一个空行。
这是master的代码,slave的代码也有同样的问题。
// master
#include <SPI.h>
#include "SPI_anything.h"
// create a structure to store the different data values:
typedef struct myStruct {
char cmd[4];
double b;
long c;
};
myStruct sent;
myStruct recieved;
void setup () {
Serial.begin(115200);
SPI.begin ();
// Slow down the master a bit
SPI.setClockDivider(SPI_CLOCK_DIV16);
sent.cmd[4] = "def";
sent.b = 32.2;
sent.c = 100000;
} // end of setup
void loop () {
digitalWrite(SS, LOW); // SS is pin 10
// SPI_writeAnything (sent);
delay(20);
Serial.println (SPI_readAnything (recieved));
String command=recieved.cmd;
Serial.println (recieved.cmd);///////////
Serial.println (sent.cmd);/////////////
Serial.println (command);
Serial.println (recieved.b);
Serial.println (recieved.c);
Serial.println ();
digitalWrite(SS, HIGH);
delay (1000); // for testing
sent.c++;
} // end of loop
在监视器中,b 和c 正常打印(是来自从站的数据),但cmd 打印为空行(接收和发送)。
非常感谢。
【问题讨论】:
-
C != C++。仅使用您使用的语言标记一个。
-
我认为最好将
sent.cmd[4]="def"更改为strcpy(send.cmd, "def")。您编码的指令将指向"def"的指针的值分配给最多包含4 个字节的字符数组的第5 个字符。 ;)