Arduino音乐键盘程序

程序功能

该程序实现了一个基于Arduino的8键音乐键盘:

  1. 使用8个按钮(连接引脚12,11,10,9,7,6,5,4)
  2. 每个按钮对应特定音调(中音C到高音C):
    NOTE_C4→NOTE_C5 \text{NOTE\_C4} \rightarrow \text{NOTE\_C5} NOTE_C4→NOTE_C5
  3. 按钮按下时,通过8号引脚连接的扬声器播放对应音符
  4. 按钮释放时停止发声
核心机制
  • 引脚配置 :按钮引脚启用内部上拉电阻(INPUT_PULLUP)

    c 复制代码
    pinMode(buttonPins[i], INPUT_PULLUP);
  • 音调映射 :按钮索引与音符频率对应

    c 复制代码
    buttonTones[] = {NOTE_C4, NOTE_D4, ... NOTE_C5};
  • 扫描检测 :循环检测按钮状态(LOW表示按下)

    c 复制代码
    if (digitalRead(buttonPins[i]) == LOW)
  • 声音控制 :使用tone()播放/noTone()停止

    c 复制代码
    tone(SPEAKER_PIN, pitch);  // 播放
    noTone(SPEAKER_PIN);       // 停止

制作教程(步骤详解)

所需材料
组件 数量 说明
Arduino开发板 1 Uno/Nano等
按钮开关 8 常开型
扬声器 1 8Ω 0.5W
面包板 1 用于电路连接
杜邦线 若干 公对公/公对母
电路连接
  1. 按钮连接

    • 每个按钮一脚接指定数字引脚(4,5,6,7,9,10,11,12)
    • 另一脚全部接地(GND)
    plaintext 复制代码
    [按钮]----[Arduino引脚]
       |        |
      GND     (代码定义)
  2. 扬声器连接

    • 正极 → 引脚8
    • 负极 → GND
    plaintext 复制代码
    [扬声器+]---[Pin8]
    [扬声器-]---[GND]
代码准备
  1. 创建pitches.h头文件(包含音符频率定义):
c 复制代码
#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978
  1. 主程序结构:
c 复制代码
#include "pitches.h"

#define SPEAKER_PIN 8

const uint8_t buttonPins[] = { 12, 11, 10, 9, 7, 6, 5, 4 };
const int buttonTones[] = {
  NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
  NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5
};
const int numTones = sizeof(buttonPins) / sizeof(buttonPins[0]);

void setup() {
  for (uint8_t i = 0; i < numTones; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
  pinMode(SPEAKER_PIN, OUTPUT);
}

void loop() {
  int pitch = 0;
  for (uint8_t i = 0; i < numTones; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      pitch = buttonTones[i];
    }
  }
  if (pitch) {
    tone(SPEAKER_PIN, pitch);
  } else {
    noTone(SPEAKER_PIN);
  }
}
使用说明
  1. 上传程序到Arduino
  2. 按下不同按钮时:
    • 按钮1(引脚12) → 中音C(262Hz)
    • 按钮8(引脚4) → 高音C(523Hz)
  3. 同时按多个按钮时,优先级由扫描顺序决定(高索引按钮优先)

注意事项:确保扬声器功率不超过引脚负载能力(推荐使用外接放大器驱动大功率扬声器)

相关推荐
Echo_cy_3 小时前
STM32 SPI通信协议
stm32·单片机·嵌入式硬件
JiaWen技术圈3 小时前
关于 MCU 芯片外围电路的快速入门介绍
单片机·嵌入式硬件
武文斌774 小时前
arm启动代码总结
arm开发·嵌入式硬件·学习
我怕是好5 小时前
学习stm32 蓝牙
stm32·嵌入式硬件·学习
药9555 小时前
STM32开发(USART总线:UART总线)
stm32·单片机·嵌入式硬件
索迪迈科技5 小时前
STM32F103C8T6开发板入门学习——点亮LED灯2
stm32·嵌入式硬件·学习
David WangYang5 小时前
技巧:调试 SCPI 和 VISA 自动化(包括 NI I/O 跟踪)
stm32·单片机·自动化
清风6666666 小时前
基于51单片机手机无线蓝牙APP控制风扇调速设计
单片机·mongodb·智能手机·毕业设计·51单片机·课程设计
JXNL@6 小时前
什么是PFC控制器
单片机·嵌入式硬件