Arduino 检查 uint8_int 的相等性
Arduino check equality of uint8_int
当我按下 Arduino shield 上的按钮时,我正在尝试检查 uint8_t
类型是否相等。我知道类型是一个无符号整数,但是即使我得到打印语句 "Button pressed: 0"
代码也不会进入 if 语句,谁能告诉我为什么?
#include <MFShield.h>
MFShield mfs ;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mfs.onKeyPress( [](uint8_t button){
if (button == 0 || button == 0x00 || button == '0')
{
Serial.println("working");
}
Serial.println("Button pressed: " + String(button));
});
}
void loop() {
mfs.loop();
}
如评论中所述
button == 0
和 button == 0x00
是一回事。所以一个可以省略。
button == '0'
没有意义,因为 '0'
是 48
。这在您的程序中永远不会成立。
从我在 MFShield 库的源代码中看到的 source code 所描述的行为应该是不可能的。
// Keys polling
if (onKeyPress_func != NULL && time - t_buttons >= MFS_BUTTONS_POLLING_INTERVAL_MS)
{
t_buttons = time;
uint8_t key_mask = 0;
for (uint8_t i=0; i < 3; i++)
key_mask |= (!digitalRead(KEY_PIN[i]) << i);
if (key_mask != key_mask_pre)
{
if (key_mask != 0)
{
key_mask_pre = key_mask;
onKeyPress_func (ffs(key_mask));
}
else
key_mask_pre = 0;
}
}
代码检查所有 3 个按钮并在 key_mask 中为每个按下的按钮设置一个位。
您提供的回调函数onKeyPress_func
仅在key_mask
不等于0且自上次检查后按键状态发生变化时调用。
所以使用这段代码你永远不会得到你声称的打印 "Button pressed: 0"。你的 button
不能变成 0
。它是
出于同样的原因,您永远不会输入 if 语句。
当我按下 Arduino shield 上的按钮时,我正在尝试检查 uint8_t
类型是否相等。我知道类型是一个无符号整数,但是即使我得到打印语句 "Button pressed: 0"
代码也不会进入 if 语句,谁能告诉我为什么?
#include <MFShield.h>
MFShield mfs ;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mfs.onKeyPress( [](uint8_t button){
if (button == 0 || button == 0x00 || button == '0')
{
Serial.println("working");
}
Serial.println("Button pressed: " + String(button));
});
}
void loop() {
mfs.loop();
}
如评论中所述
button == 0
和 button == 0x00
是一回事。所以一个可以省略。
button == '0'
没有意义,因为 '0'
是 48
。这在您的程序中永远不会成立。
从我在 MFShield 库的源代码中看到的 source code 所描述的行为应该是不可能的。
// Keys polling
if (onKeyPress_func != NULL && time - t_buttons >= MFS_BUTTONS_POLLING_INTERVAL_MS)
{
t_buttons = time;
uint8_t key_mask = 0;
for (uint8_t i=0; i < 3; i++)
key_mask |= (!digitalRead(KEY_PIN[i]) << i);
if (key_mask != key_mask_pre)
{
if (key_mask != 0)
{
key_mask_pre = key_mask;
onKeyPress_func (ffs(key_mask));
}
else
key_mask_pre = 0;
}
}
代码检查所有 3 个按钮并在 key_mask 中为每个按下的按钮设置一个位。
您提供的回调函数onKeyPress_func
仅在key_mask
不等于0且自上次检查后按键状态发生变化时调用。
所以使用这段代码你永远不会得到你声称的打印 "Button pressed: 0"。你的 button
不能变成 0
。它是
出于同样的原因,您永远不会输入 if 语句。