SPEAKER練習問題
[SPEARKER練習問題1]
3オクターブ分のドレミファソラシドを演奏する.For文を使うこと.
[解答例]
#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の時に音楽の速度が二倍速に変わる
[解答例]
#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)
[解答例]
#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()を回す
#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()を使う
#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); } } /*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/ }