Как остановить ошибку компиляции "- не определено в этой области"?Конгруэнтный переключатель (корпус) переключается с помощью мгновенной кнопки - PullRequest
0 голосов
/ 03 января 2019

Все шло хорошо. Я добивался результатов, которые хотел. Когда я пошел изменить код, я получаю сообщение об ошибке компиляции, сообщающее, что вызов пользовательской функции не был объявлен «в этой области». Пожалуйста помогите. Возможно синтаксическая ошибка.

По сути, переключение корпуса переключается кнопкой. При действительном случае выход переключается на высокий уровень в кодовом блоке регистра, когда регистр NOT VALID, выход переключается обратно на низкий уровень и увеличивается регистр таким образом, пока не будет выполнен полный цикл.

У меня был код для этой функции переключения, который увеличивался при нажатии кнопки. Однако, когда я начал модифицировать кодовый блок, чтобы попытаться интегрировать фрагмент триггера, заставить нажатие кнопки инициализировать выходной переключатель при переключении случаев, я получаю ошибку.

Сказать, что 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");
              }
}

Я думал, что добавление некоторого кода для переключения вывода в каждом случае принесет мне пользу, так как он «отключит» вывод при переключении регистра и «включит» вывод при включении регистра. похоже, это имеет смысл. Почему я получил ошибку, я не знаю. Я ожидал, что светодиод загорится, когда случай 0 был действителен, и выключился, когда случай 0 перешел на случай 1. случай действительный == output @ case HIGH, case not valid == output @ case LOW. Без исключений. Переключение выхода следует за переключением инкремента / по модулю.

Это то, на что я надеялся.

Завершено ошибкой определения области действия.

...