チーム1229
課題名
メロディーボックス
研究者名
2年15組9番 川村優花
2年15組18番 佐藤紘之
概要
シリアルポート通信を使ってPCキーボードからの入力で
PSoCに接続してあるスピーカーから音楽を演奏したり
曲のスピードを操作できる装置である。
授業でやったpwm_uart_2とtimer_pwm2を参考にして作った。
リセットを押すと曲名リストが表示される。
曲の選択、曲の停止、スピードアップ、スピードダウン、スピードを元に戻す
これらの操作をキーボードからの入力によって行えるようにした。
操作方法
1:マルマルモリモリ
2:ヘビーローテーション
3:小さな世界
s:ストップ
u:スピードアップ
d:スピードダウン
m:スピードを戻す
ソース(main.c)
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125; // Pulse Width
int SILENT=0, D=229, L=204, M=182, F=172, S=153, R=136, C=121, OD=115, OL=102, OM=91, OF=86, OS=77, OR=68, OC=61, OOD=57; //音階
int Ds=217,Ls=193,Fs=162,Ss=145,Rs=129,ODs=108,OLs=96,OFs=81,OSs=72,ORs=64,OODs=54;//シャープ
int TC = 0;
int sel = 0;
void myISR(void)
{
if(sel==0){
TC=0; PWM16_1_WritePeriod(SILENT); }
else if(sel==1){ //マルマルモリモリ
TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(OSs); else if(TC==2) PWM16_1_WritePeriod(SILENT); else if(TC==3) PWM16_1_WritePeriod(OSs); else if(TC==5) PWM16_1_WritePeriod(OM); else if(TC==7) PWM16_1_WritePeriod(C); else if(TC==9) PWM16_1_WritePeriod(ODs); else if(TC==11) PWM16_1_WritePeriod(C); else if(TC==13) PWM16_1_WritePeriod(ODs); else if(TC==15) PWM16_1_WritePeriod(OM); else if(TC==17) PWM16_1_WritePeriod(OFs); else if(TC==19) PWM16_1_WritePeriod(OM); else if(TC==21) PWM16_1_WritePeriod(OFs); else if(TC==23) PWM16_1_WritePeriod(OSs); else if(TC==25) PWM16_1_WritePeriod(OFs); else if(TC==27) PWM16_1_WritePeriod(OM); else if(TC==28) PWM16_1_WritePeriod(OSs); else if(TC==30) PWM16_1_WritePeriod(SILENT); else if(TC==34) PWM16_1_WritePeriod(OSs); else if(TC==35) PWM16_1_WritePeriod(SILENT); else if(TC==36) PWM16_1_WritePeriod(OSs); else if(TC==38) PWM16_1_WritePeriod(OM); else if(TC==40) PWM16_1_WritePeriod(C); else if(TC==42) PWM16_1_WritePeriod(ODs); else if(TC==44) PWM16_1_WritePeriod(C); else if(TC==46) PWM16_1_WritePeriod(ODs); else if(TC==48) PWM16_1_WritePeriod(OM); else if(TC==50) PWM16_1_WritePeriod(OFs); else if(TC==52) PWM16_1_WritePeriod(OM); else if(TC==54) PWM16_1_WritePeriod(OFs); else if(TC==56) PWM16_1_WritePeriod(OSs); else if(TC==58) PWM16_1_WritePeriod(SILENT); else if(TC==62) PWM16_1_WritePeriod(OFs); else if(TC==63) PWM16_1_WritePeriod(OSs); else if(TC==64) PWM16_1_WritePeriod(OFs); else if(TC==65) PWM16_1_WritePeriod(OM); else if(TC==66) PWM16_1_WritePeriod(OM); else if(TC==68) PWM16_1_WritePeriod(SILENT); else if(TC==72) PWM16_1_WritePeriod(OSs); else if(TC==74) PWM16_1_WritePeriod(C); else if(TC==76) PWM16_1_WritePeriod(ODs); else if(TC==78) PWM16_1_WritePeriod(OM); else if(TC==80) PWM16_1_WritePeriod(SILENT); else if(TC==84) PWM16_1_WritePeriod(OFs); else if(TC==86) PWM16_1_WritePeriod(OM); else if(TC==88) PWM16_1_WritePeriod(OFs); else if(TC==90) PWM16_1_WritePeriod(OSs); else if(TC==92) PWM16_1_WritePeriod(SILENT); else if(TC==98) PWM16_1_WritePeriod(OSs); else if(TC==100) PWM16_1_WritePeriod(C); else if(TC==102) PWM16_1_WritePeriod(ODs); else if(TC==104) PWM16_1_WritePeriod(OM); else if(TC==106) PWM16_1_WritePeriod(SILENT); else if(TC==110) PWM16_1_WritePeriod(OFs); else if(TC==112) PWM16_1_WritePeriod(OM); else if(TC==114) PWM16_1_WritePeriod(OFs); else if(TC==116) PWM16_1_WritePeriod(OSs); else if(TC==118) PWM16_1_WritePeriod(SILENT); else if(TC==119) PWM16_1_WritePeriod(OM); else if(TC==120) PWM16_1_WritePeriod(SILENT); else if(TC==121) PWM16_1_WritePeriod(OM); else if(TC==123) PWM16_1_WritePeriod(SILENT); else if(TC==125) TC=1; } else if(sel==2){ //ヘビーローテーション TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(OM); else if(TC==3) PWM16_1_WritePeriod(OFs); else if(TC==5) PWM16_1_WritePeriod(OSs); else if(TC==10) PWM16_1_WritePeriod(SILENT); else if(TC==14) PWM16_1_WritePeriod(OM); else if(TC==16) PWM16_1_WritePeriod(OFs); else if(TC==18) PWM16_1_WritePeriod(OSs); else if(TC==23) PWM16_1_WritePeriod(SILENT); else if(TC==27) PWM16_1_WritePeriod(OM); else if(TC==29) PWM16_1_WritePeriod(OFs); else if(TC==31) PWM16_1_WritePeriod(OSs); else if(TC==36) PWM16_1_WritePeriod(SILENT); else if(TC==39) PWM16_1_WritePeriod(OSs); else if(TC==41) PWM16_1_WritePeriod(OR); else if(TC==43) PWM16_1_WritePeriod(OC); else if(TC==47) PWM16_1_WritePeriod(OSs); else if(TC==51) PWM16_1_WritePeriod(OFs); else if(TC==55) PWM16_1_WritePeriod(OM); else if(TC==57) PWM16_1_WritePeriod(SILENT); else if(TC==59) PWM16_1_WritePeriod(OODs); else if(TC==61) PWM16_1_WritePeriod(OODs); else if(TC==63) PWM16_1_WritePeriod(OODs); else if(TC==65) PWM16_1_WritePeriod(OR); else if(TC==67) PWM16_1_WritePeriod(OFs); else if(TC==69) PWM16_1_WritePeriod(OFs); else if(TC==71) PWM16_1_WritePeriod(OSs); else if(TC==73) PWM16_1_WritePeriod(OR); else if(TC==75) PWM16_1_WritePeriod(OC); else if(TC==77) PWM16_1_WritePeriod(OC); else if(TC==79) PWM16_1_WritePeriod(OC); else if(TC==81) PWM16_1_WritePeriod(OSs); else if(TC==83) PWM16_1_WritePeriod(OM); else if(TC==86) PWM16_1_WritePeriod(SILENT); else if(TC==89) PWM16_1_WritePeriod(OSs); else if(TC==91) PWM16_1_WritePeriod(OR); else if(TC==95) PWM16_1_WritePeriod(ODs); else if(TC==99) PWM16_1_WritePeriod(OM); else if(TC==101) PWM16_1_WritePeriod(OLs); else if(TC==103) PWM16_1_WritePeriod(ODs); else if(TC==105) PWM16_1_WritePeriod(OLs); else if(TC==107) PWM16_1_WritePeriod(OM); else if(TC==112) PWM16_1_WritePeriod(SILENT); } else if(sel==3){ //小さな世界 TC+=1; PWM16_1_WritePulseWidth(PW); if(TC==1) PWM16_1_WritePeriod(M); else if(TC==3) PWM16_1_WritePeriod(F); else if(TC==5) PWM16_1_WritePeriod(S); else if(TC==9) PWM16_1_WritePeriod(OM); else if(TC==13) PWM16_1_WritePeriod(OD); else if(TC==17) PWM16_1_WritePeriod(OL); else if(TC==19) PWM16_1_WritePeriod(OD); else if(TC==21) PWM16_1_WritePeriod(OD); else if(TC==25) PWM16_1_WritePeriod(C); else if(TC==29) PWM16_1_WritePeriod(C); else if(TC==32) PWM16_1_WritePeriod(SILENT); else if(TC==33) PWM16_1_WritePeriod(L); else if(TC==35) PWM16_1_WritePeriod(M); else if(TC==37) PWM16_1_WritePeriod(F); else if(TC==41) PWM16_1_WritePeriod(OL); else if(TC==45) PWM16_1_WritePeriod(C); else if(TC==49) PWM16_1_WritePeriod(OD); else if(TC==51) PWM16_1_WritePeriod(C); else if(TC==53) PWM16_1_WritePeriod(R); else if(TC==57) PWM16_1_WritePeriod(S); else if(TC==61) PWM16_1_WritePeriod(S); else if(TC==64) PWM16_1_WritePeriod(SILENT); else if(TC==66) PWM16_1_WritePeriod(M); else if(TC==68) PWM16_1_WritePeriod(F); else if(TC==70) PWM16_1_WritePeriod(S); else if(TC==72) PWM16_1_WritePeriod(SILENT); else if(TC==74) PWM16_1_WritePeriod(OD); else if(TC==76) PWM16_1_WritePeriod(OL); else if(TC==78) PWM16_1_WritePeriod(OM); else if(TC==80) PWM16_1_WritePeriod(SILENT); else if(TC==82) PWM16_1_WritePeriod(OL); else if(TC==84) PWM16_1_WritePeriod(OD); else if(TC==86) PWM16_1_WritePeriod(R); else if(TC==88) PWM16_1_WritePeriod(SILENT); else if(TC==90) PWM16_1_WritePeriod(OL); else if(TC==92) PWM16_1_WritePeriod(OM); else if(TC==94) PWM16_1_WritePeriod(OF); else if(TC==96) PWM16_1_WritePeriod(SILENT); else if(TC==98) PWM16_1_WritePeriod(OM); else if(TC==100) PWM16_1_WritePeriod(OL); else if(TC==102) PWM16_1_WritePeriod(S); else if(TC==106) PWM16_1_WritePeriod(OF); else if(TC==110) PWM16_1_WritePeriod(OM); else if(TC==114) PWM16_1_WritePeriod(OL); else if(TC==118) PWM16_1_WritePeriod(OD); else if(TC==124) PWM16_1_WritePeriod(SILENT); } }
void main()
{
{
char * strPtr; // Parameter pointer <=Char型変数の宣言 int temp = 9999; UART_CmdReset(); // Initialize receiver/cmd buffer <=コマンドバッファのリセット UART_IntCntl(UART_ENABLE_RX_INT); // Enable RX interrupts <=RX割込のイネーブル Counter8_WritePeriod(155); // Set up baud rate generat Counter8_WriteCompareValue(77); Counter8_Start(); // Turn on baud rate generator UART_Start(UART_PARITY_NONE); // Enable UART <=UARTのモード設定 M8C_EnableGInt ; // Turn on interrupts PWM16_1_Start(); Timer16_1_EnableInt(); Timer16_1_Start(); UART_CPutString("*曲名リスト*"); UART_CPutString("\n\r"); UART_CPutString("1:マルマルモリモリ"); UART_CPutString("\n\r"); UART_CPutString("2:ヘビーローテーション"); UART_CPutString("\n\r"); UART_CPutString("3:小さな世界"); UART_CPutString("\n\r"); UART_CPutString("s:ストップ"); UART_CPutString("\n\r"); UART_CPutString("u:スピードアップ"); UART_CPutString("\n\r"); UART_CPutString("d:スピードダウン"); UART_CPutString("\n\r"); UART_CPutString("m:スピードを戻す"); UART_CPutString("\n\r"); UART_CPutString("キーを押して曲を演奏してください♪");
while(1) {
if(UART_bCmdCheck()) { // Wait for command if(strPtr = UART_szGetParam()) { // More than delimiter? UART_CPutString("Found valid commandCommand =>"); UART_PutString(strPtr); // Print out command UART_CPutString("<Paramaters:"); if (*strPtr=='1'){ TC=0; sel=1; } else if (*strPtr=='s'){ TC=0; sel=0; } else if (*strPtr=='2'){ TC=0; sel=2; } else if (*strPtr=='3'){ TC=0; sel=3; } else if (*strPtr=='d'){ if(temp < 39999) temp +=3000; Timer16_1_WritePeriod(temp); } else if (*strPtr=='u'){ if(temp > 2499) temp -= 3000; Timer16_1_WritePeriod(temp); } else if (*strPtr=='m'){ temp = 9999; Timer16_1_WritePeriod(temp); } /* else if (*strPtr=='j') PWM16_1_WritePeriod(C); else if (*strPtr=='k') PWM16_1_WritePeriod(DD); else if (*strPtr=='l') PWM16_1_WritePeriod(SILENT);*/ } UART_CmdReset(); // Reset command buffer}
}
}
}
}
使用部品
・PSoC
・PSoC MiniProg
・ジャンパ線×4本
・スピーカー
・シリアルポート通信ケーブル
考察
みんなの知っている曲を作ろうと思ったが、
リズムなどが難しい曲は時間がたりずに作ることができなかった。
また、今回の曲は音がつながっても不自然ではなかったが、
難しくまた早いテンポの曲のときに
音がつながってしまうとおかしくなってしまうと考えられる。
- 最終更新:2012-06-12 17:22:25