我混合了 python 代码和 arduino 代码来完成这项工作。我通过蓝牙(bluetoothsocket(RFCOMM))从python发送一个范围从0-65353的数字数组作为字符串。它们在 arduino 中逐个字符地接收并读入一个数组,该数组会将 char 数组转换为单个原始 int。我想知道这是否应该是要走的路。理想情况下,整数应介于 0-65353 之间。
# define ledPinr 4
void setup() {
pinMode(ledPinr, OUTPUT);
digitalWrite(ledPinr, LOW);
Serial.begin(115200);
Serial.setTimeout(10000); // for now, not too important
}
void loop() {
// Read serial input:
char val[5]; //
if (Serial.available()){
digitalWrite(ledPinr, LOW);
Serial.readBytesUntil(',', val, 5);
unsigned int num = atol(val);
}
if (Serial.available()==0){
digitalWrite(ledPinr, HIGH);
}
}
我对这种方法的问题是,为了使它工作,我必须首先用 0 填充我发送的整数,所以它们的长度都是 5,例如:ints2send=['00001','65353','01000']。然后将它们设置为 arduino 中的 char 数组,例如:{'0','0','0','0','1'} 并且 atol 在转换为 int 1 时会忽略前导 0。 arduino 的新手我想知道是否有办法将字符读入可变长度数组?,例如:{'1'},{'6','5','3','5','3'}。 或者,如果我只发送没有填充的值,是否有一种方法可以初始化一个不会出错的 char 数组? 或者我想知道解决这个问题是否值得,但我只是好奇是否可以从改进此代码中学到一些东西。我意识到我真的忽略了 Serial.readBytesUntil 参数,该参数在找到“,”时停止读取,但理想情况下我想在某个时候暂停发送,所以我看不到 ints2send=['00012,00034']作为解决方案。