SPEAKER練習問題
[SPEARKER練習問題1]
3オクターブ分のドレミファソラシドを演奏する.For文を使うこと.
[解答例]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs }; void main( void ) { int i; initNolibM(); //初期化 while (1) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ for (i=1;i<4;i++) { beep(DO/i,D1,250); wait(250); beep(RE/i,D1,250); wait(250); beep(MI/i,D1,250); wait(250); beep(FA/i,D1,250); wait(250); beep(SO/i,D1,125); wait(62); beep(RA/i,D1,125); wait(250); beep(SHI/i,D1,125); wait(250); beep(DO/2/i,D1,125); wait(250); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |
[SPEARKER練習問題2]
SW1のON/OFFによってONの時に音楽の速度が二倍速に変わる
[解答例]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs }; void main( void ) { int i,sp; initNolibM(); //初期化 while (1) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ for (i=1;i<4;i++) { if (sw1(ON)) { sp=2; } else { sp=1; } beep(DO/i,D1,250/sp); wait(250/sp); beep(RE/i,D1,250/sp); wait(250/sp); beep(MI/i,D1,250/sp); wait(250/sp); beep(FA/i,D1,250/sp); wait(250/sp); beep(SO/i,D1,125/sp); wait(62/sp); beep(RA/i,D1,125/sp); wait(250/sp); beep(SHI/i,D1,125/sp); wait(250/sp); beep(DO/2/i,D1,125/sp); wait(250/sp); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |
[SPEARKER練習問題3]
SW1のON/OFFによって音楽が1オクターブ上がる
[SPEARKER練習問題4]
周波数を連続変化させる、 台形則↓の音を聞いてみる。
beep2(28000,D1)→5s→beep2(15000,D1) →5s→beep2(15000,D1) →5s→beep2(28000,D1)
beep2(28000,D1)→5s→beep2(15000,D1) →5s→beep2(15000,D1) →5s→beep2(28000,D1)
[解答例]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs }; void main( void ) { int i,tn; initNolibM(); //初期化 while (1) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ for (tn=28000;tn>15000;tn-=28) { beep2(tn,D1); wait(10); } wait(5000); for (tn=15000;tn<28000;tn+=28) { beep2(tn,D1); wait(10); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |
[SPEARKER練習問題5]
配列変数を使って音楽を奏でる
宣言 int playcode[]={DO,RE,MI,FA,SO,RA,SHI}
For文を使ってbeep()を回す
宣言 int playcode[]={DO,RE,MI,FA,SO,RA,SHI}
For文を使ってbeep()を回す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs, #if (DSP2804x_DEVICE_H) &EPwm8Regs #endif }; void main( void ) { int i; int playcode[]={DO,RE,MI,FA,SO,RA,SHI,DO/2}; initNolibM(); //初期化 while (1) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ for (i=0;i<8;i++) { beep(playcode[i],D1,125); wait(250); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |
[SPEARKER練習問題6]
[ハイレベル]二次元配列を使って音と長さの情報を配列に入れて演奏する。
宣言 int playcode[][]={{DO,250},{RE,250},{MI,125}}
ヒントBeep2()を使う
宣言 int playcode[][]={{DO,250},{RE,250},{MI,125}}
ヒントBeep2()を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "NolibM.h" volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs }; void main( void ) { int i; int playcode[][2]={{DO,125},{RE,125},{MI,250},{FA,65},{SO,65},{RA,125},{SHI,100},{DO/2,250}}; initNolibM(); //初期化 while (1) // 無限ループ { /*------------------↓↓↓ここから書き換える↓↓↓--------------------*/ for (i=0;i<8;i++) { beep(playcode[i][0],D1,playcode[i][1]); wait(250); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ } |