欢迎光临
我们一直在努力

数字部分-发音键盘

本例向你展示如何使用tone()函数在不同的传感器被按下时发出不同的音调。

硬件需求

Arduino板

8Ω扬声器

3个光敏电阻

3个10kΩ电阻

100Ω电阻

跳线/面包板连接线

面包板

电路

将扬声器用一个100Ω电阻连接到数字引脚8,扬声器另一个引脚连到GND。并联连接你的三个压敏电阻(或者其他类似传感器)并将他们连接到5V。分别将三个压敏电阻的引脚连接到A0-A2引脚,并且在A0-A2上分别用三个10kΩ电阻连接到GND,作为低电压参照。

image

原理图

image

代码

下面的代码会读取3个传感器的模拟值。每个传感器与音调数组中一个音调相对。如果任何传感器的值超过临界,那么就播放对应的音调。

下面是代码:

  /*
   音乐键盘-tone函数的运用
  
    在不同传感器被按下时发出不同的音调
  
   电路连接:
    * 3个压敏电阻分别连接到5V和A0-A2
     (原文错误,原文说的是A0-A5但实际没那么多键)
   * 3个10kΩ电阻分别连接到GND和A0-A2
    (原文错误,原文说的是A0-A5但实际没那么多键)
   * 8Ω扬声器连接到8号引脚
   * 代码是公开的
  
  */ 
   
  #include "pitches.h" 
  
  const int threshold = 10;    // 播放声音的传感器临界值 
 
  // 要播放的音符,与三个传感器匹配: 
  int notes[] = { 
    NOTE_A4, NOTE_B4, NOTE_C3 
  }; 
   
  void setup() { 
  

   
void loop() { 
    for (int thisSensor = 0; thisSensor < 3; thisSensor++) { 
      // 获取传感器的值: 
      int sensorReading = analogRead(thisSensor); 
  
      // 如果传感器的读数大于临界值(压力足够): 
     if (sensorReading > threshold) { 
        // 播放与这个传感器对应的音符: 
       tone(8, notes[thisSensor], 20); 
      } 
   } 
  } 

这个工程用到了另一个头文件:pitches.h。这个文件包含了所有常见的音符对应的音调值。比如NOTE_C4代表中央C,NOTE_FS4代表**F#**以此类推。这个音符表是Brett Hagman(tone函数原型的作者)写的。当你想要发出播放音符的时候,这个头文件可能会派大用处。

为了包含这个新的pitches.h 文件,你可以点击串口监视器下面的下箭头按钮,选择新代码页(New Tab)选项。或者按快捷键Ctrl+Shift+N。

image

接着,粘贴以下代码到代码编辑区域:

/*************************************************

* 公共常量

*************************************************/

#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

未经允许不得转载:Arduino-Maker » 数字部分-发音键盘

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育