繁体   English   中英

验证码在 Arduino 中不起作用

[英]Verification code doesn't work in Arduino

我是 Arduino 的新手,我正在尝试制作一个从电视遥控器接收 IR 代码的程序,将它们用作 4 个数字密码,在您按下每个按钮时点亮 LED。 然后将代码与硬编码的代码进行比较。 在本例中为 1234。我做了一个函数来验证输入的值是否等于通过。 如果是这样,点亮绿色 LED,否则点亮红色 LED。 但是,即使我输入正确的代码,也只有红色 LED 亮起。 这是我的整个代码,因为我不确定它的哪一部分是导致问题的部分:

const int pass[4] = {1, 2, 3, 4};
int value[4] = {};
int digitNum = 0;
int input;


void loop() 
{
  value[digitNum] = input; //where input is a number between 0 and 9
  digitNum++;
  if(digitNum == 1){
    lightFirstLed(); 
  }
  else if(digitNum == 2){
    lightSecondLed();
  }
  else if(digitNum == 3){
    lightThirdLed();
  }
  else if(digitNum == 4){
    lightFourthLed();
    verify();
  }
}

void verify()
{
  bool falseCharacter = false;
  for(int i = 0; i <= 4; i++){
    if(value[i] != pass[i]){
      falseCharacter = true;
    }
  }
  if(!falseCharacter){
    lightGreenLed();
  }
  else{
    lightRedLed();
  }
}

light*Led形式出现的功能实际上做了它们应该做的事情。 我尝试更改验证功能,最终使绿色 LED 始终发光。 我已经这样做了几个小时,我开始感到与众不同。

我真的很感激任何帮助。 并且请告诉我我正在做的任何事情是否不符合最佳实践,即使它超出了这个问题的范围。

对于完整的代码和设计,这里有一个 autodesk 模拟器的链接: https ://www.tinkercad.com/things/0keqmlhVqNp-mighty-leelo/editel?tenant = circuits?sharecode = vVUD2_4774Lj4PYXh6doFcOqWUMY2URIfW8VXEDITxut=现在不工作了

您的for循环verify正在访问数组外:

const int pass[4] = {1, 2, 3, 4};
int value[4] = {};

for(int i = 0; i <= 4; i++){
    if(value[i] != pass[i]){
        falseCharacter = true;
    }
}

i <= 4更改为i < 4 此外,当falseCharacter设置为truebreak循环:

for(int i = 0; i < 4; i++)
{
    if(value[i] != pass[i])
    {
        falseCharacter = true;
        break;
    }
}

更新

您需要在loop使用else语句:

void loop(void)
{
    if(irrecv.decode(&results))
    {
        if (results.value == powBtn)
        {
            reset();
        }
        else if (results.value == zeroBtn)
        {
            input = 0;
        }
        else if (results.value == oneBtn)
        {
            input = 1;
        }
        else if (results.value == twoBtn)
        {
            input = 2;
        }
        else if (results.value == threeBtn)
        {
            input = 3;
        }
        else if (results.value == fourBtn)
        {
            input = 4;
        }
        else if (results.value == fiveBtn)
        {
            input = 5;
        }
        else if (results.value == sixBtn)
        {
            input = 6;
        }
        else if (results.value == sevenBtn)
        {
            input = 7;
        }
        else if (results.value == eightBtn)
        {
            input = 8;
        }
        else if (results.value == nineBtn)
        {
            input = 9;
        }
        else
        {
            return; /*** !!! Unrecognized Value !!! ***/
        }

        value[digitNum] = input;
        digitNum++;
        if(digitNum == 1)
        {
            digitalWrite(LED1, HIGH);
        }
        else if(digitNum == 2)
        {
            digitalWrite(LED2, HIGH);
        }
        else if(digitNum == 3)
        {
            digitalWrite(LED3, HIGH);
        }
        else if(digitNum == 4)
        {
            digitalWrite(LED4, HIGH);
            verify();
        }
        else
        {
            if (results.value == powBtn)
            {
                reset();
            }
        }

        // Receive the next value
        irrecv.resume();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM