Код паузы до нажатия кнопки

Мне нужен какой-то код, чтобы приостановить код Arduino, пока не будет нажата кнопка. У меня есть длинная программа, и в какой-то момент мне нужно условие, что если кнопка на выводе A2 нажата, то идите вперед, иначе ждите.

Я попытался использовать if с условием, но это не удалось для моей цели. Я думаю, это потому, что, когда(...) обнаруживает, что кнопка не нажата, она переходит к следующим строкам (как обычно). Но у меня есть длинная программа, и я хочу ждать вечно, пока кнопка не будет нажата.

, 👍1

Обсуждение

Является ли он активным высоким или активным низким (вы используете подтягивающие или оттягивающие резисторы)?, @Majenko

См.мою правку, пожалуйста. Я просто использую кнопку с резистором. Я тестировал кнопку с разными программами. Все это прекрасно работает., @Kumar rajit

Но вы не ответили на мой вопрос. Резистор подключен к +5 вольт или к GND? Это имеет большое значение для фрагмента кода, который я буду кормить вас с ложечки., @Majenko

Резистор подключен к земле. Помоги мне, @Kumar rajit


5 ответов


3

Конструкция, которую вы ищете, называется while.

Вместо того, чтобы делать "Если кнопка нажата, то продолжайте", вам нужно сделать "пока кнопка не нажата, ничего не делать".

Предполагая, что у вас есть кнопка "active low" (то есть резистор тянет ее до +5 В, когда он не нажат, поэтому digitalRead(A2) == LOW "нажат"), вы можете сделать:

while (digitalRead(A2) == HIGH) {
  // Ничего не делать
}

Поэтому, пока он не нажат (digitalRead(A2) == HIGH), ничего не делайте. Как только digitalRead(A2) вернет НИЗКИЙ УРОВЕНЬ (поэтому он больше не == ВЫСОКИЙ), цикл while завершится, и ваш скетч может продолжить.

Я пишу все о цикле while в статье здесь.

,

будет ли он продолжаться прямо с того места, где он остановился?.. Скажем, если мой двигатель находится на 67 градусах, он должен возобновиться с того же самого. Делает ли он то же самое?.., @Sonali_B


1

Вот два способа, которыми вы могли бы подключить кнопку. Если вы подключили его с помощью подтяжки, вам нужно будет проверить на низкий уровень (кнопка заземлит свой выход при нажатии). Если вынуть, кнопка увеличит свой выход при нажатии, и вы протестируетесь на ВЫСОКИЙ уровень.

Если вы будете снова тестировать кнопку менее чем через секунду, не забудьте ее отменить. Переключатели посылают пучок (технический термин :) импульсов в течение значительной доли секунды во время выпечки или хлеба. Подробное обсуждение см. на странице "Переключатели" Ника Гэммона.

Pullup vs. Pulldown Schematic

,

2

Мне нужен код, чтобы приостановить код arduino, пока не будет нажата кнопка.

Для этого я написал простую функцию.

Использование:

buttonWait(<pin_number>);

Код:

/* the function */
void buttonWait(int buttonPin){
  int buttonState = 0;
  while(1){
    buttonState = digitalRead(buttonPin);
    if (buttonState == HIGH) {
      return;
    }
  }
}


void loop() {
  buttonWait(2); // wait for button press on pin 2
  // do something
  // ...
}

В этом коде предполагается, что у вас есть съемный резистор, но вы можете легко изменить его для работы с съемным резистором, если почувствуете необходимость:

schematic

Смотрите пример кода здесь!

,

Спасибо, раулдоттех!! Я возился со своим кодом в течение нескольких месяцев, включался и выключался, и сегодня вечером...Я попал в золото!!, @Osprey

@Osprey Это приятно слышать! :), @undo

Батарея не имеет смысла в этой схеме. вы подключили его для использования +5 В от VCC, что правильно, но зачем подключать батарею к +5 В? (Если только вы не планируете обойти внутренний регулятор, а батарея действительно является регулируемым источником питания 5 В?), @Duncan C


1

Я также поместил параллельно выключателю резистор высокого значения (например. 1 мом). В этом случае у вас есть делитель напряжения, и контактный вход не плавает.

,

-1

Приостановить программу можно с помощью режима легкого сна, как показано на следующем URL: https://www.youtube.com. /watch?v=GIbSt5mJ5VY

,

Добро пожаловать в Ардуино! Хотя теоретически это может ответить на вопрос, [было бы предпочтительнее](//meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки., @Juraj