Arrays 将字符串传递到arduino中的uint8_t数组
我必须通过XBee(API模式)从Arduino发送一个整数计数器作为'num'。为此,我必须将该整数转换为字符串,然后转换为uint8_t数组,因为它在API帧中需要传输 除了其他细节外,我还将整数转换为字符串形式Arrays 将字符串传递到arduino中的uint8_t数组,arrays,arduino,xbee,Arrays,Arduino,Xbee,我必须通过XBee(API模式)从Arduino发送一个整数计数器作为'num'。为此,我必须将该整数转换为字符串,然后转换为uint8_t数组,因为它在API帧中需要传输 除了其他细节外,我还将整数转换为字符串形式 String str; int num = 0; char cstr[16]; void loop() { num++; str = String(num); str.toCharArray(cstr,16); Serial.println(cst
String str;
int num = 0;
char cstr[16];
void loop() {
num++;
str = String(num);
str.toCharArray(cstr,16);
Serial.println(cstr); // this shows the correct result, means int is converted to String correctly
uint8_t data[] = {cstr}; // passing String to uint8_t array
XBeeAddress64 addr64 = XBeeAddress64();
addr64.setMsb(0x00000000);
addr64.setLsb(0x00000000);
ZBTxRequest zbTx = ZBTxRequest(addr64, data, sizeof(data));
xbee.send(zbTx);
int count = sizeof(data);
for (int i = 0; i < count; i++) {
if (i == (count-1)) {
Serial.print(data[i]); // here it prints "104" of ASCII which is equal to "h"
}
}
}
String-str;
int num=0;
char-cstr[16];
void循环(){
num++;
str=字符串(num);
str.toCharArray(cstr,16);
Serial.println(cstr);//这显示了正确的结果,意味着int被正确地转换为String
uint8_t data[]={cstr};//将字符串传递给uint8_t数组
XBeeAddress64 addr64=XBeeAddress64();
addr64.setMsb(0x00000000);
addr64.setLsb(0x00000000);
ZBTxRequest zbTx=ZBTxRequest(addr64,data,sizeof(data));
xbee.send(zbTx);
int count=sizeof(数据);
for(int i=0;i
它也像串行打印一样传输数据,即('104')。
如果我犯了错误,请指出,如果我没有按要求做,请指导我 首先去掉那些cstr和字符串:
int num = 0;
//char cstr[16];
char data[16] = {'\0'}; // Initialize data array
void setup() {
}
void loop() {
num++;
//str = String(num);
//str.toCharArray(cstr,16);
itoa (num, data, 10);
Serial.println(data);
// To get the number of elements in the array use
uint8_t datalen = strlen(data);
// Black box see lib for details
XBeeAddress64 addr64 = XBeeAddress64();
addr64.setMsb(0x00000000);
addr64.setLsb(0x00000000);
ZBTxRequest zbTx = ZBTxRequest(addr64, data, datalen);
xbee.send(zbTx);
// Print test
Serial.println("Content of data: ");
Serial.print(data);
Serial.print(" datalen: ");
Serial.print(datalen);
}
这应该像你期望的那样工作要复制数组,可以使用strcpy(或带有malloc和free的memcopy),使用strlen获取元素数 编辑: 下面是一段经过测试的代码(只需复制并粘贴,然后首先仅替换包含到xbee库中的代码):
#include "Xbee.h" //-> Change to your xbee lib
uint16_t num = 0;
char xdata[16] = {'\0'};// Initialize data array
char numbuf[16] = {'\0'}; // initialize number buffer
long currentMillis = 0;
void setup() {
Serial.begin(115200);
currentMillis = millis();
}
void loop() {
if (millis() - currentMillis > 1000) { // 1 sec timer to prevent overflow due to hammering xbee with data -> tune to your stable transmission
num++;
itoa (num, numbuf, 10); // Num buffer
strcpy(xdata, numbuf); // Copy content of num buffer to data array
Serial.println(xdata);
// To get the number of elements in the array use
uint16_t datalen = strlen(xdata);
// Black box see lib for details
XBeeAddress64 addr64 = XBeeAddress64();
addr64.setMsb(0x00000000);
addr64.setLsb(0x00000000);
ZBTxRequest zbTx = ZBTxRequest(addr64, data, datalen);
xbee.send(zbTx);
// Print test
Serial.print("Content of xdata: ");
Serial.print(xdata);
Serial.print(" datalen: ");
Serial.println(datalen);
currentMillis = millis(); // reset timer
}
}
串行监视器中的结果是:
1
Content of xdata: 1 datalen: 1
2
Content of xdata: 2 datalen: 1
3
Content of xdata: 3 datalen: 1
4
Content of xdata: 4 datalen: 1
....
864
Content of xdata: 864 datalen: 3
865
Content of xdata: 865 datalen: 3
866
Content of xdata: 866 datalen: 3
因此,所有的工作都如预期的那样,没有104或类似的。请先复制粘贴-测试它-然后你添加的内容我仍然对此感到困惑,因为它对我不起作用,我只是想知道如何将计数器
int num=0;
在每次循环执行中递增的内容传递到uint8\t数组。如何传递在上面的代码中,什么exactlly“不起作用”。老实说-Xbee库是黑匣子。打印字符数组是有效的。-参见编辑我要求的实际上是那个黑匣子。到目前为止,Xbee mycode和您的都给出了相同的输出,即“104”我添加了一个完整的工作和测试示例-只需复制和粘贴,只需将include更改为xbee库,然后运行然后学习;-)如果此解决方案有效,mark as Solutioned Sommers可以学习密码破解,上面讨论的问题已解决,但现在我面临另一个问题,现在我想用数据发送一些字符作为节点标识符,我需要传递num++
在我的数据数组中,这里有什么可能?