一切进展顺利。我实现了想要的结果。当我去修改代码时,我收到编译错误,告诉我对用户定义函数的调用未声明为“在此范围内”。请协助。可能是语法错误。
本质上,开关盒可通过按钮切换。在有效大小写情况下,输出在大小写代码块处切换为高电平,在大小写无效时,输出以这种方式切换回低电平并增加大小写,直到整个周期翻转为止。
我有该切换功能的代码,该功能将随着按钮的按下而增加。但是,当我开始修改代码块以尝试集成触发器片段时,如果在切换情况下按下按钮来初始化输出切换,则会出错。
说“ 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时熄灭。情况有效==输出@情况为高,情况无效==输出@情况为低。没有例外。输出切换跟随增量/模切换。
这就是我所希望的。
最终出现范围定义错误。