когда я компилирую свой код, я получаю сообщение об ошибке, указывающее, что «checkbutton» не объявлен в этой области

// По прошествии 2 секунд прекращаем игнорировать кнопку.
  // Если кнопка нажата, вызываем функцию checkbutton.
  if (millis() > ignore && digitalRead(0) == LOW)
  {
    checkbutton();
  }
}
// Эта функция ожидает отпускания кнопки,
// затем ждет, пока она будет нажата, чтобы начать следующий запуск.
void checkbutton(){
  delay (50);  // Кнопка нажата, устранение дребезга.
  while (digitalRead(0) == LOW) // Пока кнопка нажата,
  {}                            // ничего не делать во время ожидания.
  delay (50);                   // Кнопка нажата, устранение дребезга.
  while (digitalRead(0) == HIGH)// Пока кнопка отпущена,
  {}                            // ничего не делать во время ожидания.


  ignore = 2000 + millis();     // Установить время игнорирования,
}                              // и возвращаемся в основной цикл.

, 👍-1

Обсуждение

Пожалуйста, обновите свой скетч, чтобы добавить функции setup() и loop(), а затем добавьте в него свой код с правильным форматированием., @VE7JRO

пожалуйста, не обижайтесь, но я проголосовал за ваш вопрос, потому что вы написали полный беспорядок ... вы не смотрели на то, что вы разместили? ... пожалуйста, отформатируйте свой код ... используйте кнопку {} для форматирования ... также, пожалуйста, задайте вопрос, @jsotola

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

Вы используете Arduino IDE для компиляции? Он автоматически добавит прототипы функций в начало вашего кода. Когда вы используете что-то еще для компиляции, вам нужно объявить каждую функцию выше, где вы ее используете., @chrisl


1 ответ


2

Вы используете checkbutton() до того, как сообщили программе, что такое checkbutton().

Вам необходимо переместить все определение метода void checkbutton(){ ... выше, т. е. перед любым вызовом этого метода (checkbutton();).

Другим вариантом может быть упреждающее объявление, но я сомневаюсь, что он широко используется в проектах Arduino.

,

@jsotola: это правда. Я не думаю, что это широко используется в проектах Arduino. Во всяком случае, я добавил это к ответу, @Thomas Weller

Единственная причина, по которой он не используется широко, заключается в том, что IDE делает это за вас - незаметно. Хотя это помогает людям, только изучающим C и C++, быстро запустить что-то, они упускают возможность узнать о предварительных объявлениях, что неизбежно кусает их, когда они переходят в другую среду., @JRobert