Как приостановить цикл только один раз?
Я пытаюсь сделать паузу в цикле, но только в первый раз. В следующих циклах я хотел бы, чтобы программа НЕ делала паузу. Только один раз, каждый раз, когда кнопка нажата. Кто-нибудь знает, как это сделать? Спасибо! Это код, который я хочу приостановить только один раз:
void loop() {
if(digitalRead(switch_pin) == LOW){
digitalWrite(led_green_pin,LOW);
digitalWrite(led_red_pin,HIGH);
lastMotionState = currentMotionState;
currentMotionState = digitalRead(MOTION_SENSOR_PIN); //
if (currentMotionState == LOW && lastMotionState == HIGH) {
servo.write(90);
}
else
if (currentMotionState == HIGH && lastMotionState == LOW) { // изменение состояния pin: HIGH -> LOW
servo.write(0);
}
}
@Juan Antonio, 👍1
Обсуждение2 ответа
Следующий код будет делать паузу (давать некоторую задержку) при первом запуске, а также при нажатии кнопки.
void loop() {
static int status = true;
if(status){
//Pause
delay(15);
status=false;
return;
}
if(digitalRead(switch_pin) == LOW){
digitalWrite(led_green_pin,LOW);
digitalWrite(led_red_pin,HIGH);
lastMotionState = currentMotionState;
currentMotionState = digitalRead(MOTION_SENSOR_PIN); //
if (currentMotionState == LOW && lastMotionState == HIGH) {
servo.write(90);
}
else if (currentMotionState == HIGH && lastMotionState == LOW) { // pin state change: HIGH -> LOW
servo.write(0);
}
}
else{
status = true;
}
}
Дайте отсрочку в соответствии с вашими потребностями.
Я не знаю, что делает эта строка "продолжить", когда нет цикла "вперед/назад/сделать"., @Gerben
Лучше было бы иметь " void loop() { статический int статус = true; ... } сохраняя область
статус внутри " цикла()
вместо глобального., @lurker
@Гербен и луркер спасибо, что указали на это. Я внес соответствующие изменения. Вместо продолжения я добавил возврат, который будет работать по желанию., @HARSH MITTAL
Это довольно просто, хотя вы не должны видеть никакой разницы, потому что loop()
работает много раз за одну секунду. Но:
bool firstrun = true;
void loop() {
if(firstrun == true){};
else{
if(digitalRead(switch_pin) == LOW){
digitalWrite(led_green_pin,LOW);
digitalWrite(led_red_pin,HIGH);
lastMotionState = currentMotionState;
currentMotionState = digitalRead(MOTION_SENSOR_PIN); //
if (currentMotionState == LOW && lastMotionState == HIGH) {
servo.write(90);
}
else if (currentMotionState == HIGH && lastMotionState == LOW) { // pin state change: HIGH -> LOW
servo.write(0);
}
}
}
firstrun = false;
}
- Вращающийся серводвигатель с использованием Arduino
- Справка по классу. Похоже, что одни и те же типы объектов смешивают значения друг с другом.
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Мигните светодиодом 5 раз с помощью цикла for
"Кто-нибудь знает, как это сделать?"это не вопрос, который спрашивает, как это сделать ... это не вопрос об arduino, @jsotola
что вы подразумеваете под "паузой"? ... это означает, что код каким-то образом запустится снова, но вы ничего не сказали о том, что остановит его, что начнет его снова и где он должен "приостановиться", @jsotola
Хуан, https://stackoverflow.com/help/merging-accounts, @Juraj