如何停止编译错误“-在此范围内未定义”?使用瞬时按钮切换一致开关(外壳)

时间:2019-01-03 02:55:30

标签: switch-statement toggle gpio

一切进展顺利。我实现了想要的结果。当我去修改代码时,我收到编译错误,告诉我对用户定义函数的调用未声明为“在此范围内”。请协助。可能是语法错误。

本质上,开关盒可通过按钮切换。在有效大小写情况下,输出在大小写代码块处切换为高电平,在大小写无效时,输出以这种方式切换回低电平并增加大小写,直到整个周期翻转为止。

我有该切换功能的代码,该功能将随着按钮的按下而增加。但是,当我开始修改代码块以尝试集成触发器片段时,如果在切换情况下按下按钮来初始化输出切换,则会出错。

说“ doSwitchStatement”未在此范围内定义。就像我说的那样,听起来像语法错误或格式问题。想一些指导。这段代码感觉不错。接下来将推入模函数,以便可以通过按按钮的次数来调用情况。通过单击按钮一次切换,将使呼叫案例值成为可选过程,而不是递增过程。

我已经包含了代码。谢谢。

//this is a congruent switch case toggler that is incremented by a single momentary pushbutton

const int btn = 23;
const int led = 3;
int selector = 0;
boolean isPressed = false;

void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(13, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}

void loop ()
{
if (digitalRead(btn) == LOW && isPressed == false ) //button is pressed 
AND this is the first digitalRead() that the button is pressed
{
isPressed = true;  //set to true, so this code will not run again until 
button released
doSwitchStatement(); // a call to a separate function that performs the 
switch statement and subsequent evoked code
delay(300);

selector++; // this is done after the doSwitchStatement(), so case 0 will 
be executed on the first button press
if (selector > 3) {
  selector = 0;
}
// selector = (selector+1) % 4;  // does the same, without if-statement
} else if (digitalRead(btn) == HIGH)
{
isPressed = false; //button is released, variable reset
}
}



              void doSwitchStatement() {
                switch (selector) {
                  case 0:
                    if (selector == 0 && isPressed == true)
                    {
                      digitalWrite(led, HIGH);
                      Serial.println("Case 0");
                    }
                    else if (selector != 0)
                    {
                      digitalWrite(led, LOW);
                    }

                // add a call to doExtraStuff() if you like
                break;
              case 1:
                digitalWrite(13, HIGH);
                Serial.println("Case 1");
                break;
              case 2:
                digitalWrite(4, HIGH);
                Serial.println("Case 2");
                break;
              case 3:
                digitalWrite(5, HIGH);
                Serial.println("You've reached the last selection.");
                Serial.println("Case 3");
              }
}

我认为在每种情况下添加一些代码来切换输出将使我受益,以便在切换案例时“关闭”输出,在切换案例时“打开”输出。看起来很有意义。为什么我出错了,我不知道。我希望LED在情况0有效的情况下亮起,并在情况0转换为情况1时熄灭。情况有效==输出@情况为高,情况无效==输出@情况为低。没有例外。输出切换跟随增量/模切换。

这就是我所希望的。

最终出现范围定义错误。

0 个答案:

没有答案