Arduino Uno 压电扬声器循环而不是播放一次(编程新手)
Posted
技术标签:
【中文标题】Arduino Uno 压电扬声器循环而不是播放一次(编程新手)【英文标题】:Arduino Uno Piezo Speaker loops instead of playing once (New to programming) 【发布时间】:2017-06-11 05:08:14 【问题描述】:我有一个项目要在一天内完成,我不希望这个问题得到回答,尽管它是一个非常简单的问题。我有一个从以下站点使用的代码: http://dominikzeman.blogspot.co.nz/2016/12/we-are-number-one-but-its-arduino.html 这是一个简单的代码,它通过压电扬声器播放歌曲“We are number one”,但是它循环播放我需要的歌曲而没有循环。我尝试了各种策略(请记住,这对我来说是新的)来停止循环,但每次都会出错。
代码如下:
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】:首先,最好将播放歌曲的代码隔离在一个单独的函数中:
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();
要在按下按钮或输入更改时播放歌曲,您可以在loop()
中进行测试,如果按下则从那里调用一次函数。
【讨论】:
以上是关于Arduino Uno 压电扬声器循环而不是播放一次(编程新手)的主要内容,如果未能解决你的问题,请参考以下文章
arduino uno 是不是可以防止烧毁计算机的 USB 端口?