我已经研究了一些arduino代码几天了,我遇到了这个问题。我需要检查inData是否等于最多150的数字,但当我进入双位和三位数时它会停止工作。这是我正在使用的代码。它需要设置键盘的数字输入,以便将其数字发送到arduino的串行RX引脚。
把它放在这里太长了所以我把它放在pastebin here上。
char inData[20]; // Allocate some space for the string
if (inData[0] == '10') {
// Code snipped for brevity
}
答案 0 :(得分:1)
假设inData
,一个char
数组,是一个C风格的'\0'
终止字符串。那么你应该做的是调用strcmp()
而不是只比较1 st 字符。
#include <cstring>
if (std::strcmp(inData, "1") == 0) {
}
else if (std::strcmp(inData, "2") == 0) {
}
//...
else if (std::strcmp(inData, "10") == 0) {
}
请注意''
引用的字符文字与""
引用的字符串文字之间的区别。
答案 1 :(得分:0)
我看到了几个问题。
首先,对if..then..else
个语句使用if..then
构造或开关。
并且,当您对char 10
进行比较时,有两个char值,所以简单= =赢了。
您可以先使用atoi
将其转换为整数,然后进行比较,或者您可以查看if (inData[0] == '1' && inData[1] == '0')
可以执行的操作。
<强>更新强>
我会确保首先将inData的每个部分设置为零,而不是&#39; 0&#39;。
然后使用开关,例如:
switch(inData[0]) {
case '1':
switch(inData[1]) {
case 0:
// This would be '1'
break;
case '0':
// This will be 10
break;
}
break;
case '2':
break;
}
我还没有测试过这段代码,只是作为一个例子。
答案 2 :(得分:0)
如果这是C ++,你应该使用std::string
std::string inData; // Allocate some space for the string
// Replace this:
// inData[index] = c;
// index++;
// inData[index] = '\0';
// with
inData += c;
if (inData == "10") { // Test for a specific string.