如何在 C++ Arduino Uno 中暂停空白
How to pause a void in C++ Arduino Uno
我的问题很简单,但我已经坚持了一段时间了。
我需要制作一个脚本,当按下按钮循环 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)
{
}
只要按下按钮,循环就会继续。当您释放按钮时,程序将退出循环并继续执行您的代码。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 无法通过空白将文本文件行分隔为矢量
- 由cin中的字符串中未捕获空白引起的分割错误
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 如何暂停插孔音频客户端
- 代码精简版页面变为空白
- 在 vscode 中运行时无法暂停或设置断点
- C++ 如何暂停控制台输出,以便用户可以在继续之前阅读信息
- 如何将循环暂停几秒钟?
- 在OpenCV C++中创建空白图像
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 如何在 for 循环内暂停
- 对象数组打印空白字符串
- 在 C++ 中暂停 For 循环 1 秒钟
- 使用暂停按钮ARDUINO创建灯光序列时出现问题
- 如何在c++中读取do-while循环中的空白
- C++缓冲区是如何工作的(关于空白)
- 如何在 C++ Arduino Uno 中暂停空白