【プログラム】主婦に教えるマイコンプログラミング 15限目 電子オルゴール

int buzzerPin = 8; // ブザーを接続するピン番号

int buttonPin = 2; // ボタンを接続するピン番号

int bpm = 60; //スピード


//音階を周波数に変換

int noteToHz(char note) {

  switch (note) {

    case 'C': return 131;

    case 'D': return 147;

    case 'E': return 165;

    case 'F': return 175;

    case 'G': return 196;

    case 'A': return 220;

    case 'B': return 247;

    default: return 0;

  }

}


//note:音階 oct:オクターブ len:音符長 4分音符→4

void sound(char note,int oct,int len){

 

  int ms = 60000 / bpm *4 / len;

  int hz = noteToHz(note);

  int mul = 1;


  //オクターブの倍率を計算

  for(int i=0;i<oct;i++){

    mul = mul*2;

  }

 //実際に音を出す部分

  if(hz != 0){

    tone(buzzerPin, hz*mul,ms);

  }

  delay(ms+5);

}


//ラヴェルのボレロ

void music2(){

  int base = 2;

 

  bpm = 60; //スピード

 

    sound('C',base+1,4);

    sound('C',base+1,8);

    sound('B',base  ,16);

    sound('C',base+1,16);

    sound('D',base+1,16);

    sound('C',base+1,16);

    sound('B',base  ,16);

    sound('A',base  ,16);

   

    sound('C',base+1,8);

    sound('C',base+1,16);

    sound('A',base  ,16);

    sound('C',base+1,4);

    sound('C',base+1,8);

    sound('B',base+0,16);

    sound('C',base+1,16);


    sound('A',base+0,16);

    sound('G',base+0,16);

    sound('E',base+0,16);

    sound('F',base+0,16);

    sound('G',base+0,2);


    sound('G',base+0,16);

    sound('F',base+0,16);

    sound('E',base+0,16);

    sound('D',base+0,16);

    sound('E',base+0,16);

    sound('F',base+0,16);

    sound('G',base+0,16);

    sound('A',base+0,16);

    sound('G',base+0,4);


    sound('G',base+0,4);

    sound('G',base+0,16);

    sound('A',base+0,16);

    sound('B',base+0,16);

    sound('A',base+0,16);

    sound('G',base+0,16);

    sound('F',base+0,16);

    sound('E',base+0,16);

    sound('D',base+0,16);


    sound('E',base+0,16);

    sound('D',base+0,16);

    sound('C',base+0,8);

   

    sound('C',base+0,8);

    sound('C',base+0,16);

    sound('D',base+0,16);

    sound('E',base+0,8);

    sound('F',base+0,8);


    sound('D',base+0,4);

    sound('G',base+0,1);

}


//プリキュア?

void music1(){

  int base = 2;

  bpm = 240; //スピード

    sound('C',base+1,4);

    sound('B',base  ,4);

    sound('A',base  ,4);

    sound('G',base  ,4);

    sound('F',base  ,4);

    sound('E',base  ,4);

    sound('D',base  ,4);

    sound('C',base  ,4);

    sound('S',base  ,4);

    sound('C',base+1,4);

    sound('S',base+1,4);

    sound('C',base+1,2);

}


//音階テスト

void music0(){

    bpm = 240; //スピード

    sound('C',0,4);

    sound('D',0,4);

    sound('E',0,4);

    sound('F',0,4);

    sound('G',0,4);

    sound('A',0,4);

    sound('B',0,4);

    sound('C',1,4);

    sound('D',1,4);

    sound('E',1,4);

    sound('F',1,4);

    sound('G',1,4);    

    sound('A',1,4);

    sound('B',1,4);

    sound('C',2,4);

    sound('D',2,4);

    sound('E',2,4);

    sound('F',2,4);

    sound('G',2,4);

    sound('A',2,4);

    sound('B',2,4);

    sound('C',3,4);

}


// メイン関数

void setup() {

// ブザーピンをアウトプットモード

  pinMode(buzzerPin, OUTPUT);

// ボタンピンをインプットモード

  pinMode(buttonPin, INPUT_PULLUP);

}


void loop() {

  int buttonState = digitalRead(buttonPin);


  if(buttonState == LOW){

    music0();

  }

  delay(100);

}


コメント