2
我有多个不超过32字节的变长字符串,每个变长字符串需要通过2个Arduino Nanos之间的I2C发送。我使用#来终止每个字符串。我可以成功地发送和接收第一个字符串,但对于我的生活,我无法弄清楚如何发送后续的字符串。如何向I2C主机发送多个32字节的字符串?
String answer = "12345,123.4,50.6,12345#";
String answerV = "4.10,4.15,4.13,4.05,4.18,0#";
主码
#include <Wire.h>
int esc = 0;
int throttle = 80;
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("I2C Master ready!");
esc = throttle * 100/180;
}
void loop() {
delay(500);
Serial.println("Receive data");
Wire.requestFrom(9,32);
String response = "";
Serial.println(Wire.available());
while (Wire.available())
{
char b = Wire.read();
response += b;
}
String dataString = response;
int hashIndex = dataString.indexOf('#');
String SportData = dataString.substring(0, hashIndex);
Serial.println(SportData);
String SDdata = String (esc) + "," + String(SportData);
Serial.println(SDdata);
}
从编码
#include <Wire.h>
byte ANSWERSIZE= 22;
String answer = "12345,123.4,50.6,12345#";
String answerV = "4.10,4.15,4.13,4.05,4.18,0#";
void setup() {
Wire.begin(9);
Wire.onRequest(requestEvent); // data request from Master
Serial.begin(115200);
Serial.println("I2C Slave ready!");
ANSWERSIZE = answer.length();
}
void requestEvent() {
byte response[ANSWERSIZE];
for (byte i=0;i<ANSWERSIZE;i++)
{
response[i] = (byte)answer.charAt(i);
}
Wire.write(response,sizeof(response));
}
void loop() {
delay(50);
}
是否有人可以告诉我怎么可以这样做:我与这个样子的测试样品?
你的方法是一种享受。现在我只需要将它写入主要草图。非常感谢帮助(和优化)。 –
@RogerMcClurg不用客气 –
我试图分阶段做到这一点,因为我现有的主/从很复杂。我整合了你在我的奴隶中提供的代码,并使用你提供的主人。当我使用你提供的测试数据数组时,它工作得很好。一旦我使用填充实时数据的数组,主服务器从从服务器获取第一个数组入口数据[0],但数据[1]不显示。 这里是我如何定义数组: const byte DATA_SIZE = 2; 字符串数据[DATA_SIZE]; –