Arduino 演奏音乐并显示音符

功能说明

按下开关蜂鸣器演奏音乐,并在数码管显示音符。

线路

需要的元件:

  • 蜂鸣器
  • LED数码管
  • 开关
  • 电阻8个
  • 面包板
  • 导线若干

按下图连接

Arduino 演奏音乐并显示音符_第1张图片
连线图

其中,数码管中间的两引脚连接到5V电源,其它引脚连接到2到9号针口。蜂鸣器连到11号针口,开关连到12号针口。

程序

// 开关的针口
#define SWITCH_PIN 12
// 蜂鸣器的针口
#define BEEP_PIN 11

void setup() {
  for (byte pin = 2; pin <= 9; pin++) {
    pinMode(pin, OUTPUT);
  }
  pinMode(SWITCH_PIN, INPUT);
  digitalWrite(SWITCH_PIN, HIGH);
}

void loop() {
  // 音调,1-7号元素对应音符 1 2 3 4 5 6 7 的音调,0元素不使用
  int tones[] = {0, 2093, 2349, 2637, 2794, 3136, 3520, 3951};
  // 小星星前两句的音符,0表示停顿
  byte music[] = {1, 1, 5, 5, 6, 6, 5, 0, 4, 4, 3, 3, 2, 2, 1, 0};
  if (digitalRead(SWITCH_PIN) == LOW) {
    byte len = (sizeof(music) / sizeof(byte));
    for (byte i = 0; i < len; i++) {
      byte theNote = music[i];
      int theTone = tones[theNote];
      displayN(theNote);
      if (theNote != 0 ) {
        tone(BEEP_PIN, theTone);
      }
      delay(400);
      noTone(BEEP_PIN);
    }
  }
}

// 用数码显示数字
void displayN(int n) {
  // 数字0到9,8个数码管亮灭情况,`0`表示亮,`1`不亮
  byte num[10][8] = {0, 0, 0, 1, 0, 0, 0, 1, //0
                     0, 1, 1, 1, 1, 1, 0, 1, //1
                     0, 0, 1, 0, 0, 0, 1, 1, //2
                     0, 0, 1, 0, 1, 0, 0, 1, //3
                     0, 1, 0, 0, 1, 1, 0, 1, //4
                     1, 0, 0, 0, 1, 0, 0, 1, //5
                     1, 0, 0, 0, 0, 0, 0, 1, //6
                     0, 0, 1, 1, 1, 1, 0, 1, //7
                     0, 0, 0, 0, 0, 0, 0, 1, //8
                     0, 0, 0, 0, 1, 0, 0, 1  //9
                    };
  // 清空字符,否者两个相同的字符显示看不到切换效果
  for (byte i = 0; i < 8; i++) {
    digitalWrite(i + 2, 1);
  }
  delay(50);

  // 显示数字
  for (byte i = 0; i < 8; i++) {
    // 因为要对应到2到9号口,需要把索引值加2
    digitalWrite(i + 2, num[n][i]);
  }
}

你可能感兴趣的:(Arduino 演奏音乐并显示音符)