Pi:Co Classic2 製作記(移行中)

2015年新人研修 マイクロマウス編(20)

こんにちは。
お久しぶりです。

本日はスイッチで音階を鳴らせるようにしました。
ただROBOMECHに持って行っていた私のPi:Co Classic2が午前中帰ってきていなかったため、青木のPi:Co Classic2で行いました。

音はそれぞれ周波数が違います。
以下例になります。

440 ラ
466 ラ♯
493 シ
523 ド
554 ド♯
587 レ
622 レ♯
659 ミ
698 ファ
739 ファ♯
783 ソ
830 ソ♯
880 ラ
923 ラ♯
987 シ

まずStep 4のサンプルプログラムをコンパイル、インストールしドレミの音がでることを確認しました。
次に音階を増やすようにプログラムを書き換えます。
完成したのが以下のものです↓

#define FREQ_C	523	//ドの周波数
#define FREQ_D	587	//レの周波数
#define FREQ_E	659	//ミの周波数
#define FREQ_F	698	//ファの周波数
#define FREQ_G	783	//ソの周波数
#define FREQ_H	880	//ラの周波数
#define FREQ_I	987	//シの周波数
#define FREQ_J	1046	//ドの周波数
#define FREQ_K	1174	//レの周波数
#define FREQ_L	1318	//ミの周波数
#define FREQ_M	1396	//ファの周波数
#define FREQ_N	1566	//ソの周波数
#define FREQ_O	1760	//ラの周波数
#define FREQ_P	1974	//シの周波数
#define FREQ_Q	2092	//ドの周波数

void exec_by_mode(int mode)	//モード番号に従って実行する
{
	switch(mode)
	{
		case 1:
			SET_BUZZER_FREQ(FREQ_C);	//ブザーの周波数をドに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ドの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			
			
		case 2:
			SET_BUZZER_FREQ(FREQ_D);	//ブザーの周波数をレに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 レの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
		
		case 3:
			SET_BUZZER_FREQ(FREQ_E);	//ブザーの周波数をミに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ミの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 4:
			SET_BUZZER_FREQ(FREQ_F);	//ブザーの周波数をファに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ファの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 5:
			SET_BUZZER_FREQ(FREQ_G);	//ブザーの周波数をソに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ソの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 6:
			SET_BUZZER_FREQ(FREQ_H);	//ブザーの周波数をラに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ラの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 7:
			SET_BUZZER_FREQ(FREQ_I);	//ブザーの周波数をシに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 シの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 8:
			SET_BUZZER_FREQ(FREQ_J);	//ブザーの周波数をドに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ドの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 9:
			SET_BUZZER_FREQ(FREQ_K);	//ブザーの周波数をレに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 レの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 10:
			SET_BUZZER_FREQ(FREQ_L);	//ブザーの周波数をミに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ミの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 11:
			SET_BUZZER_FREQ(FREQ_M);	//ブザーの周波数をファに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ファの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 12:
			SET_BUZZER_FREQ(FREQ_N);	//ブザーの周波数をソに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ソの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 13:
			SET_BUZZER_FREQ(FREQ_O);	//ブザーの周波数をラに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ラの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 14:
			SET_BUZZER_FREQ(FREQ_P);	//ブザーの周波数をシに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 シの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;
			
		case 15:
			SET_BUZZER_FREQ(FREQ_Q);	//ブザーの周波数をドに設定
			ENABLE_BUZZER;				//ブザーを発振させる
			wait_ms(1000);				//1秒間 ドの音を鳴らす
			DISABLE_BUZZER;				//ブザーの発振を停止させる
			break;

青色のスイッチを押して二進数が増えると音階も上がり
赤色のスイッチを押して二進数が減ると音階が下がるようになりました。

上記のbreakはcaseと対になっているように見えますがそうではなく切りたい場所にいれるだけなので、breakがないならその次にあるブログラムとつながって動くだけです。

最後に本日のオフショットです。

IMG_0435_R

IMG_0436_R

IMG_0441_R

2番目の写真はドレミファが鳴らせて喜んでるところです。

タイトルとURLをコピーしました