チーム1518

課題名

とにかく連打打打打アタックMUSICgame♪♫

研究者名

Oi Shugo
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

このWIKIを編集するにはパスワード入力が必要です

認証パスワード