在原有代码基础上去除抖动bool play = false; // 初始播放状态为false void loop() { if (digitalRead(A2)) { if (!play) { // 没有正在播放时,按下按钮开始播放 play = true; for (int i = (0); i <= (yinfushu); i = i + (1)) { tone(2,yinfu[i]); delay((1200 * jiepai[i])); noTone(2); if (!digitalRead(A2)) { // 当播放过程中再次按下按钮,停止播放 play = false; break; } } play = false; // 播放完毕后将播放状态设置为false } } }
时间: 2024-01-02 19:02:15 浏览: 30
好的,那么根据你的需求,我给你修改后的代码如下:
bool play = false; // 初始播放状态为false
void loop() {
if (digitalRead(A2)) {
if (!play) { // 没有正在播放时,按下按钮开始播放
play = true;
for (int i = 0; i <= yinfushu; i++) {
tone(2, yinfu[i]);
delay(1200 * jiepai[i]);
noTone(2);
if (digitalRead(A2)) { // 当播放过程中再次按下按钮,停止播放
play = false;
break;
}
}
play = false; // 播放完毕后将播放状态设置为false
}
}
}
这里我们去掉了抖动,也就是在播放过程中不再频繁判断按键状态,只有在播放开始时才进行判断,当播放过程中按下按钮时,停止播放,否则等待播放完毕后再将播放状态设置为false。
相关问题
在原有代码基础上去除抖动,通过增加延时的方式bool play = false; // 初始播放状态为false void loop() { if (digitalRead(A2)) { if (!play) { // 没有正在播放时,按下按钮开始播放 play = true; for (int i = (0); i <= (yinfushu); i = i + (1)) { tone(2,yinfu[i]); delay((1200 * jiepai[i])); noTone(2); if (!digitalRead(A2)) { // 当播放过程中再次按下按钮,停止播放 play = false; break; } } play = false; // 播放完毕后将播放状态设置为false } } }
这个代码看起来已经去除了抖动,并且通过增加延时的方式实现了播放音乐的功能。当按下按钮时,程序会检测当前是否正在播放,如果没有,就开始播放音乐。在播放过程中,程序会根据音符和节拍的信息,使用tone函数播放音符,并通过delay函数控制每个音符的持续时间。如果在播放过程中再次按下按钮,程序会停止播放。最后,程序会将播放状态设置为false,等待下一次播放。
C#中 这代码的作用域private static bool isPaused = false;
在C#中,`private static bool isPaused = false;` 这行代码定义了一个私有的静态布尔变量 `isPaused`,并将其初始值设置为 `false`。
该变量的作用域为当前类中的所有成员方法和属性。关键字 `private` 表示该变量只能在当前类内部访问,无法被其他类或对象直接访问。
`static` 关键字表示该变量是静态的,即它属于类而不是类的实例。静态变量在类加载时就会被初始化,并且所有类的实例共享相同的静态变量。因此,可以通过类名直接访问该静态变量,而不需要创建类的实例。
在这个例子中,`isPaused` 变量用于表示某个状态,可以在类的不同方法中共享和修改。它的初始值为 `false`,意味着系统初始状态下不是暂停状态。可以通过修改 `isPaused` 的值来控制程序的行为,例如根据其值来控制是否暂停执行某些逻辑或功能。