在未满足条件时的任何时刻结束一个段循环
Ending a while loop at any point when condition is not met
我目前正在编写一个程序,我需要在任何时候都可以在其中打断一个循环。在这种情况下,一系列的音调一遍又一遍地播放,但是当传感器中的一个值之一恢复时,应该停止。
。目前,我已经知道了:
void loop() {
while(digitalRead(ctsPin) == LOW) {
// Some code here
}
}
但是,只有在其内部指令完成运行时,while循环才会断开。有没有一种方法可以一遍又一遍地运行这些方法,但即使它是部分的?
预先感谢。
我认为您实际上是在询问如何立即打破其中有许多硬编码延迟(音调(的循环,无论当前正在执行的循环中哪种代码。那是不可能的。
在整个循环中添加大量if statments不会有帮助,因为这不会阻止基于延迟的代码在完成当前音调之前播放。
替代方案是创建包含要播放的项目的队列/环缓冲区。播放音调的PWM中断将通过此队列并一次播放它们。
当您想停止时,您将简单地禁用中断,然后将端口引脚拉到无声状态。即使程序在音调信号的两个边缘之间扮演角色,这也会立即停止。
break
语句将中断当前循环。因此,您应该有一个有条件的声明,以便您要监视的条件,如果评估为true,请致电break
。
if (digitalRead(ctsPin) == HIGH){
break
}
问题不清楚。要停止运行循环,您可以使用以下给出的休息时间。检查这是否是您要寻找的。
void loop() {
while(digitalRead(ctsPin) == LOW) {
// Some code here
if (digitalRead(ctsPin) == HIGH){
break;
}
// Some code here
}
}
有两种方法可以立即破裂。一种是使用中断,另一种是更频繁地检查条件 - 如果真正需要,则在每次指令之后,然后突破:
void loop()
{
while(digitalRead(ctsPin) == LOW)
{
// code block (or even a single statement)...
if (digitalRead(ctsPin) == HIGH) break;
// code block (or even a single statement)...
if (digitalRead(ctsPin) == HIGH) break;
// code block (or even a single statement)...
if (digitalRead(ctsPin) == HIGH) break;
// etc.
}
}
如果您得到了太多的,则建议您改用中断。有关如何执行此操作以及目标板可用的各种中断的示例,我建议看看Arduino中断文档。
如果您决定这样做,请尝试一下,然后如果您遇到问题,请提出其他问题,我们会为您提供帮助。
相关文章:
- 有没有办法重复循环循环?
- 我的开关菜单在一段时间循环中出现问题
- 如何在嵌套的 for 循环中使用“继续一段时间”循环
- 虽然第三次循环循环,尽管在我眼中没有满足它的条件,因此打印了一个空字符串
- 避免以不同的迭代剂的循环循环避免几乎相同的代码重复
- 循环循环保存到数组,然后访问;
- 一段时间循环中的奇怪错误(C++)
- 对于循环循环仅 3 次
- 处理媒体循环循环循环通过向量中的对象的各个方面
- 在CIN为真后,使用一段时间循环,然后执行循环
- 将C转换为循环循环循环
- 在一段时间循环中使用std::cout的奇怪行为
- 关于如何正确循环循环并找到最小的价值,需要基本C 的帮助
- 我如何循环循环switch语句检查重新检查char?(C )
- 在一段时间循环比较中实现 getline
- 在一段时间循环中
- 如何在一段时间循环中使用时钟
- 如何在一段时间循环中使用按键切换布尔值
- 结构的C++动态字段(用于循环)
- 卡在一段时间循环C中