我正试着用我的arduino mega 25600在2个蜂鸣器上播放一首歌,但我的C++很烂。我已经弄清楚如何在一个蜂鸣器上演奏,但我想在两个不同的蜂鸣器上同时演奏两个不同的旋律。下面是我的代码:
#include "piezo-music.h"
void setup() {
// put your setup code here, to run once:
}
void loop() {
int melody1[] = {
NOTE_FS4, NOTE_CS5, NOTE_AS4, NOTE_AS4,
NOTE_GS4, NOTE_FS4, NOTE_FS4, NOTE_B4,
NOTE_AS4, NOTE_AS4, NOTE_GS4, NOTE_GS4,
NOTE_FS4, NOTE_FS4, NOTE_CS5, NOTE_AS4,
NOTE_AS4, NOTE_GS4, NOTE_GS4, NOTE_FS4,
NOTE_FS4, NOTE_DS4, NOTE_CS4, PAUSE
};
int rythm1[] = {
4, 8, 8, 4, 8, 8, 8, 4, 8, 8, 8, 8, 4,
8, 8, 8, 8, 8, 8, 8, 8, 4, 3, 2
};
int size = sizeof(melody1) / sizeof(int); // Get the length of your array/melody
playSong(11, melody1, rythm1, size, 45);
}对于playSong(11, melody1, rythm1, size, 45);,11是arduino上的阳极引脚,发出特定的频率,melody1是频率的整数数组,rythm1是音符持续时间的整数数组,45是每分钟节拍的节奏。
该库仅将音符定义为频率,但您可以在以下位置找到它:https://github.com/PeCeSe/Arduino-piezo-music
我猜我想要做的是同时运行两个"playSong()“行,但我只能想到有两个方法具有代码,并且它们在void loop()中被同时调用。我已经尝试将playSong()放在第一首播放歌曲()之后,它只是在第一首播放歌曲播放之后播放它。
我研究了一下,但找不到答案。虽然我找到了任务和线程,但我似乎不能理解它们到底是做什么的。
发布于 2020-01-05 07:34:13
简短的答案是:你不能用piezo-music.h一次播放两个音调。您甚至不能使用Arduino的tone()和noTone()函数同时播放两个音调。...but似乎确实有一个Arduino库,可以让你同时播放多个音调。
详细信息:
Arduino使用tone()、noTone()和https://github.com/PeCeSe/Arduino-piezo-music/blob/master/piezo-music.h ()Arduino函数创建音乐。https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/的tone()函数引用说“一次只能生成一个音调”。
详情在https://github.com/bhagman/Tone#ugly-details上有简要介绍。该页面说明tone()和noTone()函数使用一个Arduino计时器来生成音调,如果您使用的Arduino有多个可用的计时器,那么您应该能够编写低级计时器代码来在不同的引脚上产生多个同时的音调。
在网上翻找,我发现了一个库,它允许你使用多个音调对象-和多个硬件计时器-来同时播放多个音调。有关使用它的2011年说明,请访问https://forum.arduino.cc/index.php?topic=77447.msg586674#msg586674
同时播放多个音调的音调库在https://github.com/bhagman/Tone -注意:我还没有试过。
祝你好运,并发布你找到的东西!
https://stackoverflow.com/questions/59594290
复制相似问题