Arduino制作简易电子琴

用按钮来代替琴键(C4~C5),按下按钮扬声器播放对应音阶。

这里用到了tone函数,可以让扬声器产生指定频率的音阶。

电路连线示意图
电路连线示意图

 首先在头函数“pitches.h”里定义好各音阶的频率(本文只用到了其中8个):

//pitches.h
#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

然后就是程序的主函数:

#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);
  }
}

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
制作一个简单的Arduino电子琴,你需要以下材料: - Arduino板(如Arduino UNO) - 一个蜂鸣器或扬声器 - 一些电阻器(100欧姆和10K欧姆) - 一些按键(至少6个) - 杜邦线 - 面包板 接下来是步骤: 1. 将电阻器和按键连接到面包板上。将每个按键连接到一个数字引脚上,并将另一端连接到地。将每个电阻器连接到一个数字引脚上,并将另一端连接到地。这些电阻器将用于防止按键反弹。 2. 将蜂鸣器或扬声器连接到数字引脚上。将正极连接到一个数字引脚上,将负极连接到地。 3. 用Arduino编写代码。代码的主要部分是一个循环,它将扫描按键并检测是否有按键被按下。如果有按键被按下,代码将发出相应的声音。 下面是一个简单的代码示例: ```c++ int speakerPin = 8; int buttonPin1 = 2; int buttonPin2 = 3; int buttonPin3 = 4; int buttonPin4 = 5; int buttonPin5 = 6; int buttonPin6 = 7; void setup() { pinMode(speakerPin, OUTPUT); pinMode(buttonPin1, INPUT_PULLUP); pinMode(buttonPin2, INPUT_PULLUP); pinMode(buttonPin3, INPUT_PULLUP); pinMode(buttonPin4, INPUT_PULLUP); pinMode(buttonPin5, INPUT_PULLUP); pinMode(buttonPin6, INPUT_PULLUP); } void loop() { if (digitalRead(buttonPin1) == LOW) { tone(speakerPin, 262, 100); } if (digitalRead(buttonPin2) == LOW) { tone(speakerPin, 294, 100); } if (digitalRead(buttonPin3) == LOW) { tone(speakerPin, 330, 100); } if (digitalRead(buttonPin4) == LOW) { tone(speakerPin, 349, 100); } if (digitalRead(buttonPin5) == LOW) { tone(speakerPin, 392, 100); } if (digitalRead(buttonPin6) == LOW) { tone(speakerPin, 440, 100); } delay(10); } ``` 在这个例子中,我们将扬声器连接到数字引脚8上,将6个按键连接到数字引脚2到7上。每个按键都会发出不同的音调。在循环中,我们使用`digitalRead`函数检测每个按键是否被按下,如果是,我们使用`tone`函数发出相应的声音。 上传代码到Arduino板,然后按下按键,你就可以听到简单的电子琴声了!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值