Arduino按键控制蜂鸣器音乐(按一下,音乐停,再按,放)

室友非说不会,我能怎么办,肝它

此次实现的功能是(音乐是我们当时在禹州的时候扒的乐谱,歌唱祖国),按一下音乐播放,再按一下暂停,再按一下从刚才暂停的位置播放,

需要一个按键,一个蜂鸣器

按键接开发板2口,蜂鸣器接开发板1口

程序还是简单的

//音乐歌唱祖国

#define NTF0 -1
#define NTF1 350
#define NTF2 393
#define NTF3 441
#define NTF4 495
#define NTF5 556
#define NTF6 624
#define NTF7 661

#define NTFL1 175
#define NTFL2 196
#define NTFL3 221
#define NTFL4 234
#define NTFL5 262
#define NTFL6 294
#define NTFL7 330

#define NTFH1 700
#define NTFH2 786
#define NTFH3 882
#define NTFH4 935
#define NTFH5 1049
#define NTFH6 1178
#define NTFH7 1322

//列出全部D调的频率
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625
//列出所有节拍
int tune1[] =
{
  NTF1, NTF1, NTF1, NTFL5,
  NTF3, NTF1, NTF5, NTF6,
  NTF5, NTF5, NTF5, NTF6, NTF6,
  NTF6, NTF5, NTF4, NTF6, NTF5,
  NTF5, NTF5, NTF5, NTF6, NTF6,
  NTF2, NTF2, NTF2, NTF5, NTF4,
  NTF3, NTFL5, NTFL5, NTF5, NTF5, NTF6,
  NTF5, NTF4, NTF3, NTF2, NTF1,
  NTF1, NTF5, NTF5, NTFH1, NTFH1,
  NTF6, NTF6, NTF5, NTF4, NTF5,
  NTF6, NTF2, NTF2, NTF5, NTF5, NTF6,
  NTF5, NTF4, NTF3, NTF2, NTF1,
  NTF1, NTF0,
  NTF1, NTFL5, NTF3, NTF3, NTF0,
  NTF3, NTF1, NTF6, NTF6, NTF0,
  NTFL6, NTFL6, NTF2, NTF2, NTF3,
  NTF2, NTF1, NTFL7, NTFL6, NTFL5,
  NTF1, NTFL5, NTFL6, NTFL6, NTFL5,
  NTF1, NTF2, NTF3, NTF0,
  NTF2, NTF6, NTF6, NTF5, NTF5, NTF3,
  NTF2, NTF6, NTF5, NTF0, NTFH1,
  NTFH1, NTFH1, NTFH1, NTF5, NTF6, NTF1,
  NTF6, NTF5, NTF4, NTF6, NTF5, NTF0,
  NTFH1, NTFH1, NTFH1, NTFH1, NTF5, NTF5, NTF6,
  NTF5, NTF4, NTF3, NTF2, NTF1, NTFL5, NTFL5,
};
float durt1[] =
{
  0.5 + 0.25, 0.25, 1, 1,
  1, 1, 1 + 0.5, 0.5,
  1, 0.5 + 0.25, 0.25, 1, 1,
  0.5 + 0.25, 0.25, 0.5, 0.5, 1 + 1,
  1, 0.5 + 0.25, 0.25, 1, 1,
  1, 0.5 + 0.25, 0.25, 1 + 0.5, 0.5,
  1, 0.5 + 0.25, 0.25, 1, 0.5, 0.5,
  0.5, 0.5, 0.5, 0.5, 1 + 1,
  1, 0.5 + 0.25, 0.25, 1, 1,
  1, 0.5 + 0.25, 0.25, 1 + 0.5, 0.5,
  1, 0.5 + 0.25, 0.25, 1, 0.5, 0.5,
  0.5, 0.5, 0.5, 0.5, 1 + 1,
  1 + 0.5, 0.5,
  0.5 + 0.25, 0.25, 1, 1 + 0.5, 0.5,
  0.5 + 0.25, 0.25, 1, 1 + 0.5, 0.5,
  1 + 0.5, 0.5, 1, 0.5 + 0.25, 0.25,
  0.5, 0.5, 0.5, 0.5, 1 + 1,
  1, 1, 0.5, 1, 0.5,
  1, 1, 1, 1,
  1, 0.5, 0.5, 0.5, 1, 0.5,
  1, 1, 1, 0.5, 0.5,
  0.5 + 0.25, 0.25, 0.5, 0.5, 1 + 0.5, 0.5,
  0.5 + 0.25, 0.25, 0.5, 0.5, 1, 1,
  0.5 + 0.25, 0.25, 0.5, 0.5, 1, 0.5, 0.5,
  0.5, 0.5, 0.5, 0.5, 1, 0.5 + 0.25, 0.25,
};
int length;
int buttonPin = 2;//按键
boolean ledState = false;
int tonepin = 1; //蜂鸣器
void setup()
{
  pinMode(tonepin, OUTPUT);
  length = sizeof(tune1) / sizeof(tune1[0]); //计算长度
  pinMode(buttonPin, INPUT_PULLUP);
}
 int p;
void loop()
{
  for (int x = 0; x < length; x++)
  {
    if (digitalRead(buttonPin) == LOW) {//如果读取到按键被按压改变ledStart
      ledState = !ledState;
      delay(500);//这个延迟是你按压按键的大概时间
      p = x;//记录当前播放的音乐的位置
    }
    if (ledState == true) {//如果ledState是这个状态就播放
      tone(tonepin, tune1[x]); //音调
      delay(400 * durt1[x]); //节拍进行延时
      delay(100 * durt1[x]); //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
      noTone(tonepin);
    }else{
      x = p;//如果是暂停状态记录此时音乐的位置
    }
  }
}

  • 20
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
### 回答1: 这个问题是关于如何用Arduino控制蜂鸣器和LED灯的。 需要使用Arduino板、蜂鸣器和LED等器件进行连接和编程控制。具体的步骤包括连接电路、编写代码、上传程序等等。 关于具体操作细节,可以参考相关的Arduino教程和资料。 ### 回答2: arduino是一种高性能控制板,经常用于嵌入式开发。它可以通过编程实现各种功能。本文将介绍如何使用arduino控制蜂鸣器和led灯。 首先,我们需要将蜂鸣器和led灯连接到arduino板上。连接蜂鸣器不难,只需要将蜂鸣器的正极连接到数字引脚2,将负极连接到arduino板的GND。连接led灯也很简单,将正极连接到数字引脚9,将负极连接到GND。 在编程前,我们需要知道怎样控制输入和输出。在本例中,我们将使用digitalRead()输入读取和digitalWrite()输出信号。输入信号指的是按键按下的信号,输出信号指的是输出到蜂鸣器或led灯的信号。 在arduino中,数字输入和输出信号可以通过digitalRead()和digitalWrite()函数读取和写入。在连接了按键的电路中,按键被当做一个数字输入,读取它的状态之后控制蜂鸣器和led灯。 以下是示例代码: int LED = 9; // 设置LED的数字引脚为9 int buzzer = 2; // 设置蜂鸣器的数字引脚为2 int button = 7; // 设置按键的数字引脚为7 void setup() { pinMode(buzzer, OUTPUT); // 将蜂鸣器引脚设置为输出 pinMode(LED, OUTPUT); // 将LED引脚设置为输出 pinMode(button, INPUT); // 将按键引脚设置为输入 } void loop() { int buttonVal = digitalRead(button); // 读取按键状态 if (buttonVal == HIGH) { // 如果按键按下 digitalWrite(LED, HIGH); // 点亮LED tone(buzzer, 1000); // 产生1000Hz的声音 } else { // 如果按键未按下 digitalWrite(LED, LOW); // 熄灭LED noTone(buzzer); // 不发声 } } 以上代码会在按键按下时点亮LED并发出声音。当按键未按下时,LED熄灭且蜂鸣器不发声。这是一个基本的arduino控制按键的例子,您可以根据需求进行变更,例如更改按键连线和数字引脚。 总之,使用arduino进行蜂鸣器和LED灯的控制是一种非常实用的技能。如果您需要了解更多详细的借口实现,可以查看arduino官方文档。希望本文能对你的制作有所帮助! ### 回答3: Arduino按键控制蜂鸣器LED灯是一个非常简单而有趣的项目。首先,我们需要连接硬件,这包括连接一个蜂鸣器和一个LED灯,之后我们需要连接一个按钮。一旦我们将它们连接到Arduino板上,我们就可以开始编程。 我们需要使用Arduino IDE来开发代码,然后使用USB将代码上传到Arduino板中。下面是一些示例代码和解释: 首先,我们需要定义引脚来控制蜂鸣器和LED灯,这可以通过以下代码完成: const int buzzerPin = 8; // 蜂鸣器引脚 const int ledPin = 13; // LED灯引脚 const int buttonPin = 2; // 按钮引脚 接下来,我们需要设置引脚模式,以便Arduino知道各个引脚的作用: void setup() { pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式 pinMode(ledPin, OUTPUT); // 设置LED灯引脚为输出模式 pinMode(buttonPin, INPUT); // 设置按钮引脚为输入模式 } 现在,我们可以编写一个函数来控制蜂鸣器: void beep(int onTime, int offTime) { digitalWrite(buzzerPin, HIGH); // 设置蜂鸣器引脚为高电平,发出声音 delay(onTime); // 开启持续时间 digitalWrite(buzzerPin, LOW); // 关闭蜂鸣器引脚 delay(offTime); // 止持续时间 } 接下来,我们可以编写一个函数来控制LED灯: void blink(int onTime, int offTime) { digitalWrite(ledPin, HIGH); // 设置LED灯引脚为高电平,发出亮光 delay(onTime); // 开启持续时间 digitalWrite(ledPin, LOW); // 关闭LED灯引脚 delay(offTime); // 止持续时间 } 现在我们可以编写主程序了,通过按下按钮来控制蜂鸣器和LED灯。当我们按下按钮时,蜂鸣器和LED灯都会发出信号。以下是完整的代码: const int buzzerPin = 8; // 蜂鸣器引脚 const int ledPin = 13; // LED灯引脚 const int buttonPin = 2; // 按钮引脚 void setup() { pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式 pinMode(ledPin, OUTPUT); // 设置LED灯引脚为输出模式 pinMode(buttonPin, INPUT); // 设置按钮引脚为输入模式 } void beep(int onTime, int offTime) { digitalWrite(buzzerPin, HIGH); // 设置蜂鸣器引脚为高电平,发出声音 delay(onTime); // 开启持续时间 digitalWrite(buzzerPin, LOW); // 关闭蜂鸣器引脚 delay(offTime); // 止持续时间 } void blink(int onTime, int offTime) { digitalWrite(ledPin, HIGH); // 设置LED灯引脚为高电平,发出亮光 delay(onTime); // 开启持续时间 digitalWrite(ledPin, LOW); // 关闭LED灯引脚 delay(offTime); // 止持续时间 } void loop() { int buttonStatus = digitalRead(buttonPin); // 读取按钮状态 if (buttonStatus == HIGH) { // 如果按钮被按下 beep(100, 100); // 发出蜂鸣器信号 blink(100, 100); // 发出LED灯信号 } } 简而言之,在该项目中,我们使用按钮控制了蜂鸣器和LED灯。当按下按钮时,Arduino会通过控制蜂鸣器发出声音,同时通过LED灯发出亮光,这个项目可以作为初学者了解Arduino编程的基础。如果你想进一步拓展这个项目,可以调整蜂鸣器和LED灯的频率和持续时间,或者编写更高级的代码控制多个LED和蜂鸣器,并且可以将其与其他传感器集成起来来控制更多的设备。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值