#include //引用彩灯库
#include
#include
#define PIN 6 //彩灯引脚
#define NUMPIXELS 2 //级联彩灯数量
ColorLED strip = ColorLED(NUMPIXELS, PIN); //将ColorLED类命名为strip,并定义彩灯数量和彩灯引脚号
#define PIN_KEY 4 //触摸接在4引脚
#define buzzer_pin 2 //定义蜂鸣器引脚
/*------------音符对应蜂鸣器频率------------*/
#define NTD0 -1
#define NTD1 261
#define NTD2 294
#define NTD3 329
#define NTD4 349
#define NTD5 392
#define NTD6 440
#define NTD7 493
#define NTDL1 131
#define NTDL2 147
#define NTDL3 165
#define NTDL4 175
#define NTDL5 196
#define NTDL6 221
#define NTDL7 248
#define NTDH1 525
#define NTDH2 589
#define NTDH3 661
#define NTDH4 700
#define NTDH5 786
#define NTDH6 882
#define NTDH7 990
/*------------定义歌曲音调的数组------------*/
int notes[] = {
NTD1, NTD1, NTD5, NTD5,
NTD6, NTD6, NTD5, NTD0,
NTD4, NTD4, NTD3, NTD3,
NTD2, NTD2, NTD1, NTD0,
NTD5, NTD5, NTD4, NTD4,
NTD3, NTD3, NTD2, NTD0,
NTD5, NTD5, NTD4, NTD4,
NTD3, NTD3, NTD2, NTD0,
NTD1, NTD1, NTD5, NTD5,
NTD6, NTD6, NTD5, NTD0,
NTD4, NTD4, NTD3, NTD3,
NTD2, NTD2, NTD1, NTD0,
};
void setup() {
strip.begin();
Serial.begin(9600); //设置串口通讯波特率
pinMode(PIN_KEY, INPUT);//设置触摸输入状态
pinMode(buzzer_pin, OUTPUT); //定义蜂鸣器引脚为输出状态
}
int songLength = sizeof(notes) / sizeof(int); //定义歌曲长度
void loop() {
if (digitalRead(PIN_KEY)) //检测按键状态
{
for (int i = 0; i<=255; i++){
strip.setPixelColor(0, i, 0, 0);
strip.show();
delay(1);
} //串口打印没有触摸
}
else
{
int beats[songLength];
for ( int c=0; c
{
beats[c]=100;
}
for ( int i = 0; i < songLength; i++) {
/*------------设置i在歌曲长度内递增,这样就能逐一执行数组中的数据------------*/
tone(buzzer_pin, notes[i]); //播放音乐
for (int a = 0; a<=255; a++){
strip.setPixelColor(1, a, 255, 0);
strip.show();
delay(1);
strip.setAllLED(COLOR_NONE);
strip.show();
}
delay(beats[i]);
noTone(buzzer_pin);
delay (100); //播放间隔
}
}
strip.setAllLED(COLOR_NONE);
strip.show();
}
立即注册