Arduino函数无法编辑数组

Arduino function can't edit array

本文关键字:编辑 数组 函数 Arduino      更新时间:2023-10-16

Background

我编写了一个 Arduino 函数,它通过串行连接接收"a,b,c,d,e"格式的字符串,其中 a、b、c、d、e 是整数,每次收到新字符串时,我都会尝试使用这些整数更新数组。数据被接收并解析为单个整数,但数组不会正确更新。

尝试

下面是代码,我省略了getData()函数,因为它所做的只是从串行连接接收字符串并将其存储在字符数组中input(该部分工作正常(。

void setup() {
Serial.begin(9600);
}
void loop() {
getData();
if(parsed == false){
parseData(readings);
}
}
void parseData(int readings[]) {
x = 0;
char * split;
split = strtok(input,",");
while (split != NULL)
{
readings[x] = split;
split = strtok (NULL, ",");
x++;
}
parsed = true;
}

问题

如果我发送像"6,7,8,9,0"这样的字符串,数组readings[]都会更新为[289,291,293,295,297]无论我发送什么值,我已经检查了函数内部split取的值并且它们是正确的,但是行readings[x] = split;无法将数组元素更新为该顺序中那 5 个数字以外的任何内容。当在parseData函数内部或外部检查readings[n]的值时,就是这种情况。

另外,如果我在字符串中发送少于 5 个整数,例如a,b,c,只有第一个数组元素会改变,其他数组元素将保持在 0,例如[289,291,293,0,0]

在我发现将数组指针传递给函数之前,完全相同的事情发生在略有不同的代码中 - 当我在循环中调用函数时,我只使用parseData();,当我定义函数时,我只是使用了void parseData(){

问题

为什么阵列没有正确更新,我该如何修复它?

您的readings是一个整数数组。split是一个指向字符的指针。

声明

readings[x] = split

将拆分(字符的地址(存储为整数值。

如果我写

const char *pointer = "42";
int address = pointer;

我不是在address中存储42的整数值 - 我正在存储标识字符串中第一个字符的内存位置的数字。

如果要将字符串转换为整数,则需要使用类似strtol的函数对其进行解析。