我有一个Arduino,它从程序中读取一组三个字节,对应于执行器必须转动的程度。我需要将这些字节转换为整数,这样我就可以将这些整数传递给我的执行器。
例如,我知道我从程序收到的默认休止状态值是127.我写了一个C#程序来解释这些字节,并且可以将它们转换为单个整数值。但是,我无法弄清楚如何在带有C的Arduino环境中执行此操作。我已尝试将每个字节进行类型转换为char并将其存储在字符串中。然而,这会返回毫无意义的乱码值。
void loop() {
if(Serial.available() && sw)
{
for(int j = 0; j < 3; j++)
{
input[j] = Serial.read();
}
//command = ((String)input).toInt();
sw = 0;
}
String myString = String((char *)input);
Serial.println(myString);
}
答案 0 :(得分:2)
这应该有效:
int command = input[0]*256*256 + input[1]*256 + input[2];
顺便说一下,用来编写Arduino的默认语言是C ++,而不是C.虽然它们有一些相似之处。
答案 1 :(得分:1)
以下逻辑将帮助您
iDst = (cSrc[0] << 16) | (cSrc[1] << 8) | cSrc[2]
或者你可以在这种情况下使用union
union byte2char
{
char c[4];
int i;
};
但工会实施需要考虑小端和大端系统
答案 2 :(得分:1)
这里有两件事:
Serial.read()的返回值是一个int。 因此,如果您有以下代码段:
int input [3];
for(int i = 0; i&lt; 3 i ++){
输入[I] = Serial.read()
}
然后输入应存储三个整数。但是,代码:
char* input[3];
for(int i=0; i<3 i++){
input[i]=Serial.read()
}
只是将字节转换从int存储到char。
代码段将是:
#include <stdlib>
char* convertedString = itoa(input[i]);