Arduino проверяет равенство uint8_int - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь проверить правильность типа uint8_t, когда нажимаю кнопку на своем щите Arduino. Я понимаю, что тип представляет собой целое число без знака, но код никогда не входит в оператор if, даже если я получаю оператор print "Button pressed: 0" Может кто-нибудь сказать мне, почему?

#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();
} 

1 Ответ

1 голос
/ 05 апреля 2019

Как уже упоминалось в комментариях

button == 0 и button == 0x00 - это одно и то же. Так что можно опустить. button == '0' не имеет смысла, поскольку '0' равно 48. Это никогда не будет правдой в вашей программе.

Из того, что я вижу в исходном коде исходного кода библиотеки MFShield описанное поведение не должно быть возможным.

// 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 и когда состояние ключа изменилось с момента последней проверки.

Таким образом, используя этот код, вы никогда не должны получать печать «Нажата кнопка: 0», как вы заявляете. Ваш button не может стать 0. Это либо По той же причине вы никогда не будете вводить свое заявление if.

...