2022年2月18日 星期五

Arduino 蜂嗚器程式控制

蜂鳴器分為電磁式及壓電式兩種, 電磁式:由電流驅動,聲音較大但較為耗電。 壓電式:半導體電壓轉換陶磁片振動,由電壓驅動(陶磁片),較省電但聲音較小。  無論電磁式或壓電式依其驅動方式又分為兩種,自激式與他激式。 自激式:內藏驅動電路,只需直流電即可動作。 他激式:內無驅動電路,需加入交流電源及動作訊號才可動作。



基本發聲控制

const int buzzer = 4; // 蜂鳴器位於 pin 4

// 開發板啟動時,此區塊的程式碼運行1次
void setup(){
 
  pinMode(buzzer, OUTPUT); // 設定蜂鳴器為OUTPU為輸出模式
  
}

// 開發板啟動後,重複執行此區塊程式碼
void loop(){
 
  tone(buzzer, 1000); // 1000Hz 音頻
  delay(1000);        // 間隔1秒
  noTone(buzzer);     // 停止
  delay(1000);        // 間隔1秒
  
}



基本發聲控制

//列出所有音符頻率
#define NT0 -1
#define NT1 262
#define NT2 294
#define NT3 330
#define NT4 350
#define NT5 393
#define NT6 441
#define NT7 495
#define NTL1 131
#define NTL2 147
#define NTL3 165
#define NTL4 175
#define NTL5 196
#define NTL6 221
#define NTL7 248
#define NTH1 525
#define NTH2 589
#define NTH3 661
#define NTH4 700
#define NTH5 786
#define NTH6 882
#define NTH7 990

//列出所有節拍
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625

//音符排列
int tune[]=                 
{
  NT3,NT3,NT4,NT5,
  NT5,NT4,NT3,NT2,
  NT1,NT1,NT2,NT3,
  NT3,NT2,NT2,
  NT3,NT3,NT4,NT5,
  NT5,NT4,NT3,NT2,
  NT1,NT1,NT2,NT3,
  NT2,NT1,NT1,
  NT2,NT2,NT3,NT1,
  NT2,NT3,NT4,NT3,NT1,
  NT2,NT3,NT4,NT3,NT2,
  NT1,NT2,NTL5,NT0,
  NT3,NT3,NT4,NT5,
  NT5,NT4,NT3,NT4,NT2,
  NT1,NT1,NT2,NT3,
  NT2,NT1,NT1
};


//節拍排列
float durt[]=                   
{
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,0.5,0.5,1,1,
  1,0.5,0.5,1,1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,0.5,0.5,
  1,1,1,1,
  1+0.5,0.5,1+1,
};


int length;
int tonepin=5;   //檢查自己板子上的pin接口
void setup()
{
  pinMode(tonepin,OUTPUT);
  length=sizeof(tune)/sizeof(tune[0]);   
}
void loop()
{
  for(int x=0;x<length;x++)
  {
    tone(tonepin,tune[x]);
    delay(500*durt[x]);   //延時
    noTone(tonepin);
  }
  delay(2000);//重複間隔
}


變換歌的曲調只要將音符頻率更換就可以了

#define NT0 -1
#define NT1 294
#define NT2 330
#define NT3 350
#define NT4 393
#define NT5 441
#define NT6 495
#define NT7 556

#define NTL1 147
#define NTL2 165
#define NTL3 175
#define NTL4 196
#define NTL5 221
#define NTL6 248
#define NTL7 278

#define NTH1 589
#define NTH2 661
#define NTH3 700
#define NTH4 786
#define NTH5 882
#define NTH6 990
#define NTH7 112

如果是換歌,就要更換節拍跟音符
int tune[]={
  NT5,NT5,NT6,NTH1,NT6,NT5,NT6,NTH1,
  NT6,NT5,  NT3,NT3,NT3,NT5,NT6,NT6,
  NT5,NTH3,NTH3,NTH2,NTH1,NTH2,NTH1,
  NTH2,  NTH3,NTH3,NTH2,NTH3,NTH2,NTH1,
  NTH2,NTH1,NT6,NTH2,NTH2,NTH2,NTH1,NT6,
  NT5,NT6,NT5,NT5,NTH1,NT6,NT5,NT1,NT3,
  NT2,NT1,NT2,NT3,NT5,NT5,NT3,NTH1,NT7,
  NT6,NT5,NT6,NTH1,NTH2,NTH3,NTH3,NTH2,
  NTH1,NT5,NTH1,NTH2,NTH3,NTH2,NT0,NTH3,
  NTH2,NTH1,NT0,NTH2,NTH1,NT6,NT0,NTH2,
  NT6,NTH1,NTH1,NTH1,NT6,NT5,NT3,NT5,NT5,
  NT6,NTH1,NT7,NT6,NTH3,NTH3,NTH3,NTH3,
  NTH2,NTH2,NTH1,NT6,NTH3,NTH2,NTH1,NTH2,
  NTH1,NT6,NTH1
};

float durt[]={0.5,0.25,0.25,
1.5,0.5,0.5,0.25,0.25,0.5,0.5,
1+1+1,0.5,0.25,0.25,
1.5,0.5,0.5,0.5,0.25,0.25,0.5,
1+1+1,0.5,0.5,
0.5,0.5,0.5,0.25,0.25,0.5,0.25,0.25,0.5,
0.5,0.5,0.5,0.25,0.25,1+1,
0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
1+1+1,0.5,0.5,
1.5,0.5,0.5,0.5,0.5,0.5,
1.5,0.5,1,0.5,0.25,0.25,
1.5,0.5,0.5,0.5,0.5,0.25,0.25,
1+1+1,0.5,0.25,0.25,
1,0.5,0.25,0.25,1,1,
0.5,0.5,0.5,0.5,1,0.25,0.25,0.5,
1+1+1+1,
0.5,0.5,0.5,0.5,1+1,
0.5,0.5,0.5,0.5,1.5,0.25,0.25,
1.5,0.5,1,0.25,0.25,0.25,0.25,1+1+1+1};

沒有留言:

張貼留言