首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino检查uint8_int的相等性

Arduino检查uint8_int的相等性
EN

Stack Overflow用户
提问于 2019-04-06 02:30:40
回答 1查看 61关注 0票数 0

当我按下我的Arduino防护罩上的按钮时,我正在尝试检查uint8_t类型的等价性。我知道类型是一个无符号整数,但是即使我得到了print语句"Button pressed: 0",代码也从不进入if语句。谁能告诉我为什么?

代码语言:javascript
复制
#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();
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-06 03:33:18

正如在评论中提到的

button == 0button == 0x00是一回事。所以可以省略一个。button == '0'没有任何意义,因为'0'48。这在你的程序中永远不会是真的。

从我在MFShield库的source code的源代码中看到的情况来看,所描述的行为应该是不可能的。

代码语言:javascript
复制
// 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语句的原因是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55541445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档