チーム1518
課題名
とにかく連打打打打アタックMUSICgame♪♫
研究者名
Oi Shugo
Rokunohe Ryo
Rokunohe Ryo
どんな作品?
キーボードの入力によって、さまざまな音楽を演奏します...。
全部で4曲用意しました。
キーボードから
「a」と入力すると、きらきら星
「s」と入力すると、ちょうちょう
「d」と入力すると、チューリップ
「f」と入力すると、ぶんぶんぶん
がそれぞれ演奏される。
当初は、ある文字列の入力によって、音楽を流す予定だったが、時間と技術不足のため、断念せざるを得なかった。
使った道具
PSoC
ハイパーターミナル
スピーカー
ジャンパ線
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW=125;
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;
int TC=0;
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here.
char* strPtr;
UART_CmdReset(); UART_IntCntl(UART_ENABLE_RX_INT); Counter8_WritePeriod(155); Counter8_WriteCompareValue(77); Counter8_Start(); UART_Start(UART_PARITY_NONE); M8C_EnableGInt; PWM16_1_Start(); UART_CPutString("\r\nWelcome to PSoC UART test program.V1.1\r\n"); while(1){ if(UART_bCmdCheck()){ if(strPtr = UART_szGetParam()){ UART_CPutString("Found valid command\r\nCommand =>"); UART_PutString(strPtr); UART_CPutString("\r\nParamaters:\r\n"); if(*strPtr=='a')//きらきら星 { TC++; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(D); else if(TC==6) PWM16_1_WritePeriod(D); else if(TC==11) PWM16_1_WritePeriod(S); else if(TC==16) PWM16_1_WritePeriod(S); else if(TC==21) PWM16_1_WritePeriod(R); else if(TC==26) PWM16_1_WritePeriod(R); else if(TC==31) PWM16_1_WritePeriod(S); else if(TC==36) PWM16_1_WritePeriod(SILENT); else if(TC==41) PWM16_1_WritePeriod(F); else if(TC==46) PWM16_1_WritePeriod(F); else if(TC==51) PWM16_1_WritePeriod(M); else if(TC==56) PWM16_1_WritePeriod(M); else if(TC==61) PWM16_1_WritePeriod(L); else if(TC==66) PWM16_1_WritePeriod(L); else if(TC==71) PWM16_1_WritePeriod(D); else if(TC==5 | |TC == 10 | |TC == 15 | |TC == 20 | |TC == 25 | |TC == 30 | |TC == 35| |TC == 40| |TC == 45| |TC == 50| |TC == 55| |TC == 60| | TC == 65| |TC == 70| |TC == 75) PWM16_1_WritePeriod(SILENT); if(TC==75) TC=0; } else if(*strPtr=='s')//ちょうちょう { TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(S); else if(TC==6) PWM16_1_WritePeriod(M); else if(TC==11) PWM16_1_WritePeriod(M); else if(TC==16) PWM16_1_WritePeriod(SILENT); else if(TC==21) PWM16_1_WritePeriod(F); else if(TC==26) PWM16_1_WritePeriod(L); else if(TC==31) PWM16_1_WritePeriod(L); else if(TC==36) PWM16_1_WritePeriod(SILENT); else if(TC==41) PWM16_1_WritePeriod(D); else if(TC==46) PWM16_1_WritePeriod(L); else if(TC==51) PWM16_1_WritePeriod(M); else if(TC==56) PWM16_1_WritePeriod(F); elseif(TC==61) PWM16_1_WritePeriod(S); else if(TC==66) PWM16_1_WritePeriod(S); else if(TC==71) PWM16_1_WritePeriod(S); else if(TC==5 | |TC == 10 | |TC == 15 | |TC == 20 | |TC == 25 | |TC == 30 | |TC == 35| |TC == 40| |TC == 45| |TC == 50| |TC == 55| |TC == 60| | TC == 65| |TC == 70| |TC == 75) PWM16_1_WritePeriod(SILENT); if(TC==75) TC=0; } else if(*strPtr=='d')//チューリップ { TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(D); else if(TC==6) PWM16_1_WritePeriod(L); else if(TC==11) PWM16_1_WritePeriod(M); else if(TC==16) PWM16_1_WritePeriod(SILENT); else if(TC==21) PWM16_1_WritePeriod(D); else if(TC==26) PWM16_1_WritePeriod(L); else if(TC==31) PWM16_1_WritePeriod(M); else if(TC==36) PWM16_1_WritePeriod(SILENT); else if(TC==41) PWM16_1_WritePeriod(S); else if(TC==46) PWM16_1_WritePeriod(M); else if(TC==51) PWM16_1_WritePeriod(L); else if(TC==56) PWM16_1_WritePeriod(D); else if(TC==61) PWM16_1_WritePeriod(L); else if(TC==66) PWM16_1_WritePeriod(M); else if(TC==71) PWM16_1_WritePeriod(L); else if(TC==76) PWM16_1_WritePeriod(SILENT); else if(TC==5 | |TC == 10 | |TC == 15 | |TC == 20 | |TC == 25 | |TC == 30 | |TC == 35| |TC == 40| |TC == 45| |TC == 50| |TC == 55| |TC == 60| | TC == 65| |TC == 70| |TC == 75 | |TC == 80) PWM16_1_WritePeriod(SILENT); if(TC==80) TC=0; } else if(*strPtr=='f')//ぶんぶん { TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(S); else if(TC==6) PWM16_1_WritePeriod(F); else if(TC==11) PWM16_1_WritePeriod(M); else if(TC==16) PWM16_1_WritePeriod(SILENT); else if(TC==21) PWM16_1_WritePeriod(L); else if(TC==26) PWM16_1_WritePeriod(M); else if(TC==28) PWM16_1_WritePeriod(F); else if(TC==31) PWM16_1_WritePeriod(L); else if(TC==33) PWM16_1_WritePeriod(D); else if(TC==36) PWM16_1_WritePeriod(SILENT); else if(TC==5 | |TC == 10 | |TC == 15 | |TC == 20| |TC==37) PWM16_1_WritePeriod(SILENT); if(TC==37) TC=0; } else if(*strPtr=='l') PWM16_1_WritePeriod(SILENT);} UART_CmdReset(); } } }
考察
講義内で取り扱った、主に、timer_pwm2とpwm_uart_2を組み合わせた。
当初は、ある文字列の入力によって、特定の音楽を流す予定だったが、最終的には非常に簡略化してしまった。
余裕がなく作成することができなかったが、もし、時間があれば、流れている曲名をLCDに表示させたかった。
また、曲に合わせて、歌詞が表示されてもさらにおもしろくなるだろう。
ほんとは、もう少しクオリティーの高い作品が完成するはずでした....。
- 最終更新:2015-05-19 16:28:13