チーム1833
課題名
風と音楽
研究者名
Koichi Ichimiya
Haruki Kasai
Ryohei Goto
使用器具
ジャンパ線 2本
ストレート通信ケーブル
スピーカー
プロペラ
モーター
PSoCMiniProg
PSoC基板
概要
音楽を流しながら扇風機により涼むことができるこの季節に持って来いの製品となっております。
タイマー割り込みを使い音階の設定を行った。
TeraTermの画面にコマンドの動きと演奏中の曲を表示させた。
入力はすべてキーボードで行い、シリアルポート通信コードを通じてコマンド送信できる。
[コマンド]
Onkai:音階
Disney:ディズニー
Christmas:クリスマス
k:一時停止/再生
l:強制終了
next:次曲
back:前曲
[ソースコード]
#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;
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;//scale
int TC = 0,n = 0,tmpTC = 1,tmpn = 0,PlayBack = 1,Repeat = 0,count = 1,x = 189;
void myISR(void)
{
if(n == 1){
Timer16_1_WritePeriod(9999);
TC += 1;
PWM16_1_WritePulseWidth(PW);
if(TC == 1){
UART_CPutString("\r\nNow playing : 音階\r\n");
PWM16_1_WritePeriod(D);
}
else if(TC == 4)
PWM16_1_WritePeriod(L);
else if(TC == 8)
PWM16_1_WritePeriod(M);
else if(TC == 13)
PWM16_1_WritePeriod(F);
else if(TC == 19)
PWM16_1_WritePeriod(S);
else if(TC == 26)
PWM16_1_WritePeriod(R);
else if(TC == 34)
PWM16_1_WritePeriod(C);
else if(TC == 43)
PWM16_1_WritePeriod(DD);
else if(TC == 53)
PWM16_1_WritePeriod(SILENT);
}
else if(n == 2){
Timer16_1_WritePeriod(5000);
TC += 1;
PWM16_1_WritePulseWidth(PW);
if(TC==1){
UART_CPutString("\r\nNow playing : ディズニー\r\n");
PWM16_1_WritePeriod(F);
}
else if(TC==3)
PWM16_1_WritePeriod(SILENT);
else if(TC==5)
PWM16_1_WritePeriod(F);
else if(TC==6)
PWM16_1_WritePeriod(SILENT);
else if(TC==7)
PWM16_1_WritePeriod(F);
else if(TC==9)
PWM16_1_WritePeriod(SILENT);
else if(TC==11)
PWM16_1_WritePeriod(F);
else if(TC==12)
PWM16_1_WritePeriod(SILENT);
else if(TC==13)
PWM16_1_WritePeriod(F);
else if(TC==15)
PWM16_1_WritePeriod(SILENT);
else if(TC==17)
PWM16_1_WritePeriod(F);
else if(TC==18)
PWM16_1_WritePeriod(SILENT);
else if(TC==19)
PWM16_1_WritePeriod(F);
else if(TC==21)
PWM16_1_WritePeriod(SILENT);
else if(TC==23)
PWM16_1_WritePeriod(F);
else if(TC==24)
PWM16_1_WritePeriod(SILENT);
else if(TC==25)
PWM16_1_WritePeriod(S);
else if(TC==28)
PWM16_1_WritePeriod(F);
else if(TC==31)
PWM16_1_WritePeriod(M);
else if(TC==34)
PWM16_1_WritePeriod(L);
else if(TC==37)
PWM16_1_WritePeriod(D);
else if(TC==42)
PWM16_1_WritePeriod(SILENT);
else if(TC==43)
PWM16_1_WritePeriod(F);
else if(TC==45)
PWM16_1_WritePeriod(SILENT);
else if(TC==47)
PWM16_1_WritePeriod(F);
else if(TC==48)
PWM16_1_WritePeriod(SILENT);
else if(TC==49)
PWM16_1_WritePeriod(F);
else if(TC==54)
PWM16_1_WritePeriod(SILENT);
else if(TC==55)
PWM16_1_WritePeriod(F);
else if(TC==57)
PWM16_1_WritePeriod(SILENT);
else if(TC==59)
PWM16_1_WritePeriod(F);
else if(TC==60)
PWM16_1_WritePeriod(SILENT);
else if(TC==61)
PWM16_1_WritePeriod(F);
else if(TC==66)
PWM16_1_WritePeriod(SILENT);
else if(TC==67)
PWM16_1_WritePeriod(R);
else if(TC==70)
PWM16_1_WritePeriod(F);
else if(TC==73)
PWM16_1_WritePeriod(S);
else if(TC==76)
PWM16_1_WritePeriod(M);
else if(TC==79)
PWM16_1_WritePeriod(F);
else if(TC==84)
PWM16_1_WritePeriod(SILENT);
else if(TC==85)
PWM16_1_WritePeriod(F);
else if(TC==87)
PWM16_1_WritePeriod(SILENT);
else if(TC==89)
PWM16_1_WritePeriod(F);
else if(TC==90)
PWM16_1_WritePeriod(SILENT);
else if(TC==91)
PWM16_1_WritePeriod(L);
else if(TC==111)
PWM16_1_WritePeriod(SILENT);
else if(TC==112)
PWM16_1_WritePeriod(F);
else if(TC==114)
PWM16_1_WritePeriod(SILENT);
else if(TC==116)
PWM16_1_WritePeriod(F);
else if(TC==117)
PWM16_1_WritePeriod(SILENT);
else if(TC==118)
PWM16_1_WritePeriod(D);
else if(TC==138)
PWM16_1_WritePeriod(SILENT);
else if(TC==139)
PWM16_1_WritePeriod(D);
else if(TC==140)
PWM16_1_WritePeriod(SILENT);
else if(TC==141)
PWM16_1_WritePeriod(L);
else if(TC==143)
PWM16_1_WritePeriod(SILENT);
else if(TC==145)
PWM16_1_WritePeriod(L);
else if(TC==146)
PWM16_1_WritePeriod(SILENT);
else if(TC==147)
PWM16_1_WritePeriod(L);
else if(TC==149)
PWM16_1_WritePeriod(SILENT);
else if(TC==151)
PWM16_1_WritePeriod(L);
else if(TC==152)
PWM16_1_WritePeriod(SILENT);
else if(TC==153)
PWM16_1_WritePeriod(L);
else if(TC==155)
PWM16_1_WritePeriod(SILENT);
else if(TC==157)
PWM16_1_WritePeriod(L);
else if(TC==158)
PWM16_1_WritePeriod(SILENT);
else if(TC==159)
PWM16_1_WritePeriod(M);
else if(TC==161)
PWM16_1_WritePeriod(SILENT);
else if(TC==162)
PWM16_1_WritePeriod(F);
else if(TC==163)
PWM16_1_WritePeriod(SILENT);
else if(TC==165)
PWM16_1_WritePeriod(S);
else if(TC==167)
PWM16_1_WritePeriod(SILENT);
else if(TC==170)
PWM16_1_WritePeriod(DD);
else if(TC==175)
PWM16_1_WritePeriod(SILENT);
else if(TC==176)
PWM16_1_WritePeriod(DD);
else if(TC==181)
PWM16_1_WritePeriod(SILENT);
else if(TC==182)
PWM16_1_WritePeriod(DD);
else if(TC==187)
PWM16_1_WritePeriod(SILENT);
else if(TC==1+x)
PWM16_1_WritePeriod(F);
else if(TC==3+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==5+x)
PWM16_1_WritePeriod(F);
else if(TC==6+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==7+x)
PWM16_1_WritePeriod(F);
else if(TC==9+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==11+x)
PWM16_1_WritePeriod(F);
else if(TC==12+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==13+x)
PWM16_1_WritePeriod(F);
else if(TC==15+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==17+x)
PWM16_1_WritePeriod(F);
else if(TC==18+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==19+x)
PWM16_1_WritePeriod(F);
else if(TC==21+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==23+x)
PWM16_1_WritePeriod(F);
else if(TC==24+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==25+x)
PWM16_1_WritePeriod(S);
else if(TC==28+x)
PWM16_1_WritePeriod(F);
else if(TC==31+x)
PWM16_1_WritePeriod(M);
else if(TC==34+x)
PWM16_1_WritePeriod(L);
else if(TC==37+x)
PWM16_1_WritePeriod(D);
else if(TC==42+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==43+x)
PWM16_1_WritePeriod(F);
else if(TC==45+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==47+x)
PWM16_1_WritePeriod(F);
else if(TC==48+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==49+x)
PWM16_1_WritePeriod(F);
else if(TC==54+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==55+x)
PWM16_1_WritePeriod(F);
else if(TC==57+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==59+x)
PWM16_1_WritePeriod(F);
else if(TC==60+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==61+x)
PWM16_1_WritePeriod(F);
else if(TC==66+x)
PWM16_1_WritePeriod(SILENT);
else if(TC==67+x)
PWM16_1_WritePeriod(R);
else if(TC==70+x)
PWM16_1_WritePeriod(F);
else if(TC==73+x)
PWM16_1_WritePeriod(S);
else if(TC==76+x)
PWM16_1_WritePeriod(M);
else if(TC==79+x)
PWM16_1_WritePeriod(F);
else if(TC==84+x)
PWM16_1_WritePeriod(SILENT);
}
else if(n == 3){
Timer16_1_WritePeriod(4000);
TC += 1;
PWM16_1_WritePulseWidth(PW);
if(TC==1){
UART_CPutString("\r\nNow playing : クリスマス\r\n");
PWM16_1_WritePeriod(S);
}
else if(TC == 5)
PWM16_1_WritePeriod(R);
else if (TC == 7)
PWM16_1_WritePeriod(S);
else if(TC == 9)
PWM16_1_WritePeriod(M);
else if(TC == 13)
PWM16_1_WritePeriod(D);
else if (TC == 17)
PWM16_1_WritePeriod(R);
else if(TC == 21)
PWM16_1_WritePeriod(S);
else if(TC == 29)
PWM16_1_WritePeriod(SILENT);
else if(TC == 33)
PWM16_1_WritePeriod(S);
else if (TC == 35)
PWM16_1_WritePeriod(R);
else if(TC == 37)
PWM16_1_WritePeriod(S);
else if(TC == 39)
PWM16_1_WritePeriod(R);
else if (TC == 41)
PWM16_1_WritePeriod(S);
else if(TC == 45)
PWM16_1_WritePeriod(D);
else if(TC == 49)
PWM16_1_WritePeriod(C);
else if(TC == 61)
PWM16_1_WritePeriod(SILENT);
else if(TC == 65)
PWM16_1_WritePeriod(F);
else if (TC == 67)
PWM16_1_WritePeriod(S);
else if(TC == 69)
PWM16_1_WritePeriod(F);
else if(TC == 73)
PWM16_1_WritePeriod(L);
else if(TC == 77)
PWM16_1_WritePeriod(C);
else if (TC == 81)
PWM16_1_WritePeriod(R);
else if(TC == 85)
PWM16_1_WritePeriod(S);
else if(TC == 93)
PWM16_1_WritePeriod(SILENT);
else if(TC == 97)
PWM16_1_WritePeriod(S);
else if(TC == 99)
PWM16_1_WritePeriod(R);
else if(TC == 101)
PWM16_1_WritePeriod(S);
else if (TC == 103)
PWM16_1_WritePeriod(R);
else if(TC == 105)
PWM16_1_WritePeriod(S);
else if(TC == 109)
PWM16_1_WritePeriod(R);
else if (TC == 113)
PWM16_1_WritePeriod(M);
else if(TC == 125)
PWM16_1_WritePeriod(SILENT);
else if(TC == 129)
PWM16_1_WritePeriod(S);
else if (TC == 131)
PWM16_1_WritePeriod(R);
else if(TC == 133)
PWM16_1_WritePeriod(S);
else if(TC == 137)
PWM16_1_WritePeriod(M);
else if(TC == 141)
PWM16_1_WritePeriod(D);
else if (TC == 145)
PWM16_1_WritePeriod(R);
else if(TC == 149)
PWM16_1_WritePeriod(S);
else if(TC == 157)
PWM16_1_WritePeriod(SILENT);
else if(TC == 161)
PWM16_1_WritePeriod(S);
else if(TC == 163)
PWM16_1_WritePeriod(R);
else if(TC == 165)
PWM16_1_WritePeriod(S);
else if (TC == 167)
PWM16_1_WritePeriod(R);
else if(TC == 169)
PWM16_1_WritePeriod(S);
else if(TC == 173)
PWM16_1_WritePeriod(D);
else if (TC == 177)
PWM16_1_WritePeriod(C);
else if(TC == 189)
PWM16_1_WritePeriod(SILENT);
else if(TC == 193)
PWM16_1_WritePeriod(F);
else if(TC == 197)
PWM16_1_WritePeriod(S);
else if (TC == 199)
PWM16_1_WritePeriod(F);
else if(TC == 201)
PWM16_1_WritePeriod(L);
else if(TC == 205)
PWM16_1_WritePeriod(C);
else if (TC == 209)
PWM16_1_WritePeriod(R);
else if(TC == 213)
PWM16_1_WritePeriod(S);
else if(TC == 221)
PWM16_1_WritePeriod(SILENT);
else if(TC == 225)
PWM16_1_WritePeriod(S);
else if (TC == 227)
PWM16_1_WritePeriod(R);
else if(TC == 229)
PWM16_1_WritePeriod(S);
else if(TC == 231)
PWM16_1_WritePeriod(R);
else if (TC == 233)
PWM16_1_WritePeriod(S);
else if(TC == 237)
PWM16_1_WritePeriod(L);
else if(TC == 241)
PWM16_1_WritePeriod(D);
else if(TC == 253)
PWM16_1_WritePeriod(SILENT);
else if (TC == 257)
PWM16_1_WritePeriod(R);
else if (TC == 261) PWM16_1_WritePeriod(R); else if (TC == 265) PWM16_1_WritePeriod(D); else if (TC == 269) PWM16_1_WritePeriod(R);
else if (TC == 273)
PWM16_1_WritePeriod(S); else if (TC == 277) PWM16_1_WritePeriod(M); else if (TC == 281) PWM16_1_WritePeriod(S); else if (TC == 289) PWM16_1_WritePeriod(F); else if (TC == 293) PWM16_1_WritePeriod(R); else if (TC == 297) PWM16_1_WritePeriod(S); else if (TC == 301) PWM16_1_WritePeriod(F); else if (TC == 305) PWM16_1_WritePeriod(M); else if (TC == 317) PWM16_1_WritePeriod(SILENT);
else if (TC == 321)
PWM16_1_WritePeriod(L); else if (TC == 325) PWM16_1_WritePeriod(M); else if (TC == 329) PWM16_1_WritePeriod(S); else if (TC == 333) PWM16_1_WritePeriod(R);
else if (TC == 337)
PWM16_1_WritePeriod(C); else if (TC == 341) PWM16_1_WritePeriod(C); else if (TC == 345) PWM16_1_WritePeriod(C); else if (TC == 353) PWM16_1_WritePeriod(D); else if (TC == 357) PWM16_1_WritePeriod(D); else if (TC == 361) PWM16_1_WritePeriod(C); else if (TC == 365) PWM16_1_WritePeriod(R); else if (TC == 369) PWM16_1_WritePeriod(S); else if (TC == 373) PWM16_1_WritePeriod(F); else if (TC == 375) PWM16_1_WritePeriod(L); else if (TC == 377) PWM16_1_WritePeriod(L); else if (TC == 385) PWM16_1_WritePeriod(SILENT); //7
else if(TC == 389)
PWM16_1_WritePeriod(S);
else if (TC == 391)
PWM16_1_WritePeriod(R);
else if(TC == 393)
PWM16_1_WritePeriod(S);
else if(TC == 397)
PWM16_1_WritePeriod(M);
else if(TC == 401)
PWM16_1_WritePeriod(D);
else if (TC == 405)
PWM16_1_WritePeriod(R);
else if(TC == 409)
PWM16_1_WritePeriod(S);
else if(TC == 417)
PWM16_1_WritePeriod(SILENT);
else if(TC == 421)
PWM16_1_WritePeriod(S);
else if(TC == 423)
PWM16_1_WritePeriod(R);
else if(TC == 425)
PWM16_1_WritePeriod(S);
else if (TC == 427)
PWM16_1_WritePeriod(R);
else if(TC == 429)
PWM16_1_WritePeriod(S);
else if(TC == 433)
PWM16_1_WritePeriod(D);
else if (TC == 437)
PWM16_1_WritePeriod(C);
else if(TC == 449)
PWM16_1_WritePeriod(SILENT);
else if(TC == 453)
PWM16_1_WritePeriod(F);
else if(TC == 455)
PWM16_1_WritePeriod(S);
else if (TC == 457)
PWM16_1_WritePeriod(F);
else if(TC == 461)
PWM16_1_WritePeriod(L);
else if(TC == 465)
PWM16_1_WritePeriod(C);
else if (TC == 469)
PWM16_1_WritePeriod(R);
else if(TC == 473)
PWM16_1_WritePeriod(S);
else if(TC == 481)
PWM16_1_WritePeriod(SILENT);
else if(TC == 485)
PWM16_1_WritePeriod(S);
else if (TC == 487)
PWM16_1_WritePeriod(R);
else if(TC == 489)
PWM16_1_WritePeriod(S);
else if(TC == 491)
PWM16_1_WritePeriod(R);
else if (TC == 493)
PWM16_1_WritePeriod(S);
else if(TC == 497)
PWM16_1_WritePeriod(L);
else if(TC == 501)
PWM16_1_WritePeriod(D);
else if(TC == 513)
PWM16_1_WritePeriod(SILENT);
else if(n == 100){
PWM16_1_WritePeriod(SILENT);
}
}
}
void main(void)
{
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; UART_CPutString("\r\n[[ M u s i c P l a y e r ]]\r\n"); UART_CPutString("\r\nOnkai:音階\r\n"); UART_CPutString("\r\nDisney:ディズニー\r\n"); UART_CPutString("\r\nChristmas:クリスマス\r\n"); UART_CPutString("\r\nk:一時停止/再生\r\n"); UART_CPutString("\r\nl:強制終了\r\n"); UART_CPutString("\r\nnext:次曲\r\n"); UART_CPutString("\r\nback:前曲\r\n"); PWM16_1_Start(); PGA_Start(PGA_HIGHPOWER); while(1){ if(UART_bCmdCheck()){ if(strPtr = UART_szGetParam()){ UART_CPutString("Found valid command\r\nCommand =>"); UART_PutString(strPtr); UART_CPutString("<\r\n\r\n"); if(*strPtr=='Onkai'){ n = 1; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='Disney') { n = 2; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='Christmas') { n = 3; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='f'){ n = 4; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='g'){ n = 5; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='k') { if(PlayBack == 1){ PlayBack = 0; tmpTC = TC; tmpn = n; TC = 0; n = 0; PWM16_1_WritePeriod(SILENT); } else { PlayBack = 1; n = tmpn; TC = tmpTC; PGA_SetGain(PGA_G0_06); } } else if(*strPtr=='l'){ n = 100; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='n'){ if(n >= 3) n = 1; else n = n+1; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } else if(*strPtr=='b'){ if(n <= 1) n = 3; else n = n-1; PlayBack = 1; Timer16_1_EnableInt(); Timer16_1_Start(); TC = 0; } } UART_CmdReset(); } }
考察
pwm_uart_2 とチーム1751を参考にしました。
今回の曲は一時停止と再生が可能だったが、扇風機となるプロペラの一時停止と再生ができなかった。
プロペラの一時停止をさせるために、PGA_SetGainをmain文に追加して強弱によりプロペラの動きを止めようとしたが上手くいかなかった。
電圧を変化させA/D変換で値を読み込み場合分けをしてモーターに送る電圧を操作することでモーターの回転数を変化させようと試みたが実装できなかった。
音楽とプロペラが同時に一時停止と再生ができたら、商品化するのではないかと思った。
- 最終更新:2018-07-10 17:40:41