Arduino 如果语句失败
Arduino if Statement fails
我有一个带触摸屏的 ILI9341 QVGA 彩色 TFT LCD 显示屏的 ESP32 Wrover 模块(整个板是从 HackerBox 购买的,特别是 HackerBox50)。我已经设置了一个程序,它有一个选项主菜单,其中一个选项打开了一个需要密码才能输入的键盘功能。当Prompted loop()调用Canary_Setup()函数时,会调用触摸屏校准文件和绘制keypad()函数。键盘工作正常,并将输入的密码发送到串行监视器,但由于某种原因,无论输入密码如何,它都不会触发 if 语句。 char 类型的变量“numberBuffer”是存储密码的地方。当我检查“numberBuffer 的 Len 时,它 returns 的长度是否正确,但它没有在 if 语句中正确注册。
变量声明:
char numberBuffer[NUM_LEN + 1] = "";
如果语句:
if (b == 2) {
status("Sent value to serial port");
Serial.print(numberBuffer);
if (numberBuffer == "2991") {
Serial.println("hello");
menu_return();
break;
} else {
Serial.println("wrong");
}
代码的所有其他方面都可以正常工作,没有任何关于问题可能是什么的想法;我对 Arduino/Hardware 世界有些陌生,如果我的代码不干净,我深表歉意。
此行与您认为的不同:
if (numberBuffer == "2991") {
您无法在 C/C++ 中使用 ==
比较字符数组(通常也称为小写字符串,在本例中这就是您使用它们的方式)操作员。您可以使用它比较 String
个对象,但这不是 String
个对象。
当您使用 ==
比较 C/C++ 中的字符数组时,您比较的是数组的地址,而不是内容。只有当它们是完全相同的数组时才会如此——而不仅仅是完全相同的内容。当一个是字符串文字时不太可能,尤其是当另一个是字符数组时(该变量的值将是一个常量内存地址)。
要比较字符数组,您将使用 strcmp()
函数。这需要两个字符指针参数,假设它们指向以 null 结尾的 C 字符串,并比较它们指向的内容。 returns 如果它们相同则为 0,如果左侧“小于”右侧(“a”小于“b”的方式)则为 -1,如果左侧为 1 “大于”右侧(“b”大于“a”的方式)。
所以这行代码应该是:
if (strcmp(numberBuffer, "2991") == 0) {
我有一个带触摸屏的 ILI9341 QVGA 彩色 TFT LCD 显示屏的 ESP32 Wrover 模块(整个板是从 HackerBox 购买的,特别是 HackerBox50)。我已经设置了一个程序,它有一个选项主菜单,其中一个选项打开了一个需要密码才能输入的键盘功能。当Prompted loop()调用Canary_Setup()函数时,会调用触摸屏校准文件和绘制keypad()函数。键盘工作正常,并将输入的密码发送到串行监视器,但由于某种原因,无论输入密码如何,它都不会触发 if 语句。 char 类型的变量“numberBuffer”是存储密码的地方。当我检查“numberBuffer 的 Len 时,它 returns 的长度是否正确,但它没有在 if 语句中正确注册。
变量声明:
char numberBuffer[NUM_LEN + 1] = "";
如果语句:
if (b == 2) {
status("Sent value to serial port");
Serial.print(numberBuffer);
if (numberBuffer == "2991") {
Serial.println("hello");
menu_return();
break;
} else {
Serial.println("wrong");
}
代码的所有其他方面都可以正常工作,没有任何关于问题可能是什么的想法;我对 Arduino/Hardware 世界有些陌生,如果我的代码不干净,我深表歉意。
此行与您认为的不同:
if (numberBuffer == "2991") {
您无法在 C/C++ 中使用 ==
比较字符数组(通常也称为小写字符串,在本例中这就是您使用它们的方式)操作员。您可以使用它比较 String
个对象,但这不是 String
个对象。
当您使用 ==
比较 C/C++ 中的字符数组时,您比较的是数组的地址,而不是内容。只有当它们是完全相同的数组时才会如此——而不仅仅是完全相同的内容。当一个是字符串文字时不太可能,尤其是当另一个是字符数组时(该变量的值将是一个常量内存地址)。
要比较字符数组,您将使用 strcmp()
函数。这需要两个字符指针参数,假设它们指向以 null 结尾的 C 字符串,并比较它们指向的内容。 returns 如果它们相同则为 0,如果左侧“小于”右侧(“a”小于“b”的方式)则为 -1,如果左侧为 1 “大于”右侧(“b”大于“a”的方式)。
所以这行代码应该是:
if (strcmp(numberBuffer, "2991") == 0) {