Arduino Uno Piezo Speaker循环而不是播放一次(编程新手)

时间:2017-06-11 05:08:14

标签: arduino arduino-uno speaker

我有一天到期的项目,我不希望这个问题得到解答,尽管这是一个非常简单的问题。我有一个代码,我从以下网站使用: http://dominikzeman.blogspot.co.nz/2016/12/we-are-number-one-but-its-arduino.html 这是一个简单的代码,通过压电扬声器播放歌曲“我们是第一”,但是它循环播放我需要的歌曲而没有循环。我已经尝试了各种策略(请记住这对我来说是新的)来阻止循环,但每次都会出错。

以下是代码:

const int fn = 400;
const int hn = 200;
const int qn = 100;
const int f5 = 698;
const int c6 = 1047;
const int b5 = 988;
const int gh5 = 831;
const int ch6 = 1109;
const int dh6 = 1245;

int song[] = {
f5,fn + hn,
c6,hn,
b5,qn,
c6,qn,
b5,qn,
c6,qn,
b5,hn,
c6,hn,
gh5,fn,
f5,fn + hn,
f5,hn,
gh5,hn,
c6,hn,
ch6,fn,
gh5,fn,
ch6,fn,
dh6,fn,
c6,hn,
ch6,hn,
c6,hn,
ch6,hn,
c6,fn
};

void setup() {
Serial.begin(9600);
}

void loop() {

for (int i = 0; i < (sizeof(song)/sizeof(int)); i = i + 2){
tone(8, song[i]);
delay(song[i + 1]);
}

noTone(8);
delay(1000);

}

我知道问题是如果我希望它停止在void循环中应该没有代码,但是如果没有经常令人沮丧的错误我就无法修复它。

任何快速帮助都将成为救星。

1 个答案:

答案 0 :(得分:2)

首先,最好在单独的函数中隔离播放歌曲的代码:

"e"

要在启动时只播放一次歌曲,请从void PlaySong() { for (int i = 0; i < (sizeof(song)/sizeof(int)); i = i + 2){ tone(8, song[i]); delay(song[i + 1]); } }

进行调用
setup()

要在按下按钮或输入发生变化时播放歌曲,您可以在void setup() { Serial.begin(9600); // not sure if you need this PlaySong(); } 中测试该歌曲,如果按下则从那里调用该功能一次。