我正在使用此代码的项目:Arduino的串行返回奇异数+故障转换的字符数组为int C++
#include <string.h>
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) {
String input = String(Serial.read());
Serial.println("original: " + input);
char inputarray[100];
input.toCharArray(inputarray, 100);
char *message = inputarray;
char* num;
num = strtok(message, ":");
String numstr(num);
Serial.println(numstr);
num = strtok(NULL, ":");
String numstr2(num);
Serial.println(numstr);
}
delay(500);
}
它应该从串口读取输入并解析它,使得输入“10:15:20”将返回3个输出,“10”,“15”和“20”。
我的问题是,当我在串行终端发送字符串“10点15分20秒”,它返回:
original: 49
49
49
original: 48
48
48
original: 58
58
58
original: 49
49
49
original: 53
53
53
original: 58
58
58
original: 50
50
50
original: 48
48
48
现在,我真的很困惑。我试着输入一个号码,说,“1”为串行,并返回此:
original: 49
49
49
所以,它不仅认为“1”是“49”,当我输入类似“10 :15:20“将该语句作为”输入“循环使用该程序8次。
这是怎么发生的?我的代码有什么问题,或者arduino/arduino软件有问题吗?
任何帮助非常感谢!!!!
-Gabriel
编辑:感谢米奇小麦带来了我的注意串口终端输出了我的“numstr”变量作为ASCII ....现在我只是想知道:
- 如何将字符数组'num'转换为int,以便我可以在串行监视器中看到正确的输出
- 似乎并不像我在串行监视器中获得正确的输出... “10:15”似乎没有返回两个语句“10”和“15”...
我也试图打印使用输出的atoi()是这样的:
num = strtok(message, ":");
Serial.println(atoi(num));
但无济于事......(我不知道我是否被正确使用的atoi,所以这可能是无关的,但我会添加它。
BIG编辑:
确定。所以,感谢Alphonsos_Pangas,我能够正确打印并验证我的strtok()工作正常。
但是,现在我的问题是,当我尝试转换我从strtok()获得的字符串;到一个int,我得到一个错误。我一直在使用这种代码:
#include <string.h>
String data[4];
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) {
String input = String(Serial.readStringUntil((char)13));
Serial.println("original: " + input);
//Serial.println(atoi(input.c_str()));
// Serial.println(strtok(input.c_str(), ":"));
data[0] = ((char*)strtok((char*)input.c_str(), ":"));
Serial.println(data[0]);
int testint = data[0].toInt;
data[1] = (strtok(NULL, ":"));
Serial.println(data[1]);
data[2] = (strtok(NULL, ":"));
Serial.println(data[2]);
data[3] = (strtok(NULL, ":"));
Serial.println(data[3]);
}
delay(500);
Serial.println("end");
}
这一切工作正常,除了这行:
int testint = data[0].toInt;
它应该字符串为int(即我把第一个数字)转换,但当我尝试编译它,它说,这:
cannot convert 'String::toInt' from type 'long int (String::)()const' to type 'int'
我不知道我做错了什么......
“所以,它不仅认为'1'是'49'”:ascii'1'IS 49 –
@MitchWheat因此,这意味着我的代码正确解析了两个数字,它只是不以相同的语言输出我输入了什么? –
“它只是不是用我输入的同一种语言输出的?” - 它与语言无关:代表性。字符编码整数 –