如何在 C++ Arduino Uno 中暂停空白

How to pause a void in C++ Arduino Uno

本文关键字:暂停 空白 Uno Arduino C++      更新时间:2023-10-16

我的问题很简单,但我已经坚持了一段时间了。

我需要制作一个脚本,当按下按钮循环 a(( 时会暂停。当你再次按下它时,它应该从它结束的地方开始。但是我想不出办法。

我希望有人能帮助我。

这是我的代码:

int Aan = 1;
int Uit = 0;
int analogPin = A3;
int LED1 = 13;
int LED2 = 12;
int LED3 = 11;
int LED4 = 10;
int val;
bool r = false;
void setup() {
  pinMode(analogPin, INPUT_PULLUP);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  digitalWrite(LED1, Aan);
  digitalWrite(LED2, Aan);
  digitalWrite(LED3, Aan);
  digitalWrite(LED4, Aan);
}
void loop() {
  val = digitalRead(analogPin);
  if (val == LOW)
  {
    if (r == true)
    {
      r = false;
    }
    if (r == false)
    {
      r = true;
    }
  }
  if (r == true)
  {
    a();
  }
}
void a() {
  for (int i = 10; i <= 13; i++)
  {
    pinMode(i, OUTPUT);
    digitalWrite(i, Uit);
    delay(100);
    digitalWrite(i, Aan);
  }
  for (int i = 13; i >= 10; i--)
  {
    pinMode(i, OUTPUT);
    digitalWrite(i, Uit);
    delay(100);
    digitalWrite(i, Aan);
  }
}

只是为了解释发生了什么..空 a(( 使 4 个不同的 LED 亮起并熄灭。使用的模式是Knight Rider(如果你不知道电视节目,只需谷歌搜索他的车(

我假设您希望"Knight Rider"模式不断运行。

我做了一些更改。首先,我添加了一个函数来单向运行 LED 序列。其次,我添加了一个while循环,该循环将始终运行一次,并在按下按钮时继续运行。

bool paused = false;
int buttonState = HIGH;
void loop() {
    a();
}
// This only works if leds ports are consecutive
void runSequence(int ledStart, int ledEnd)
{
    int direction = ledStart < ledEnd ? 1 : -1;
    for (int i = ledStart; i != ledEnd + direction; i += direction) {
        digitalWrite(i, Uit);
        do {
            delay(100);
        } while (LOW == digitalRead(analogPin));  // Check button state
        digitalWrite(i, Aan);
    }
}
void a() {
  runSequence(LED4, LED1);
  runSequence(LED1, LED4);
}

编辑基于注释的更改

bool paused = false;
int buttonState = HIGH;
int currentLED = LED1;
int currentDirection = -1;
void loop() {
    checkButton();
    if (!paused) {
        // Flash the led
        digitalWrite(currentLED, Uit);
        delay(100);
        digitalWrite(currentLED, Aan);
        // Change direction?
        if (LED1 == currentLED || LED4 == currentLED) {
            currentDirection *= -1;
        }
        // Setup for next iteration
        currentLED += currentDirection;
    }
}
void checkButton() {
    int state = digitalRead(analogPin);
    // Check if button state has changed
    if (state != buttonState) {
        buttonState = state;
        // Change paused state when button is released
        if (state == HIGH) {
            paused = !paused;
        }
    }
}

在你是一个((函数里面放另一个while循环,当按钮启动时,它变成假。

喜欢:

while(digitalRead(analogPin) == LOW)
{
}

只要按下按钮,循环就会继续。当您释放按钮时,程序将退出循环并继续执行您的代码。