チーム1338

課題名

カラオケマシーン

研究者名

長井洋彰 高畑脩平

概要

timer_pwm2とhello-worldを組み合わせたものである。
スピーカーから崖の上のポニョが流れる。
LCDには歌詞を表示させた。

使用器具

・PSoC
・PSoC MiniProg
・ジャンパ線×2本
・スピーカー


ソースコード



#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, DD=115,LL=102,MM=91,FF=86,SS=77,RR=68,CC=61,DDD=57,DS=217,FFS=81,FS=162,RF=129,F1=162,S1=145,C1=119; //Scale
int TC=0; //Time Count


void myISR(void)
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
  PWM16_1_WritePeriod(DD);
   LCD_1_Position(0,2);
LCD_1_PrCString("PO-NYO PO-NYO ");
}
else if(TC == 7){
  PWM16_1_WritePeriod(R);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 11){
  PWM16_1_WritePeriod(F);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if(TC == 16){
  PWM16_1_WritePeriod(D);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
  LCD_1_Position(1,2);
LCD_1_PrCString("PONYO");
}
else if (TC == 17)
  PWM16_1_WritePeriod(SILENT);

else if(TC == 18){
  PWM16_1_WritePeriod(D);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 19){
  PWM16_1_WritePeriod(SILENT);
       LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}

else if (TC == 20){
  PWM16_1_WritePeriod(D);
  LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 21){
  PWM16_1_WritePeriod(SILENT);
LCD_1_Position(0,2);
LCD_1_PrCString("SAKANANOKO");
}

else if(TC == 22){
  PWM16_1_WritePeriod(L);
LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if(TC == 25){
  PWM16_1_WritePeriod(F);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 28){
  PWM16_1_WritePeriod(C);
   //LCD_1_Position(0,2);
LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
  
else if (TC == 31){
  PWM16_1_WritePeriod(LL);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 34){
  PWM16_1_WritePeriod(DD);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
  }
   
else if (TC == 37){
  PWM16_1_WritePeriod(SILENT);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString("AOIUMIKARA");
}
  
else if(TC == 38){
  PWM16_1_WritePeriod(R);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if(TC == 41){
  PWM16_1_WritePeriod(C1);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}

else if (TC == 44){
  PWM16_1_WritePeriod(S);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 48){
  PWM16_1_WritePeriod(S1);
   //LCD_1_Position(0,2);
LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 52){
  PWM16_1_WritePeriod(C);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 56){
  PWM16_1_WritePeriod(R);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 60){
  PWM16_1_WritePeriod(F);
   //LCD_1_Position(0,2);
LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}

else if (TC == 64){
  PWM16_1_WritePeriod(SILENT);
   //LCD_1_Position(0,2);
LCD_1_Position(1,2);
LCD_1_PrCString("YA-TEKITA");
}
  

else if(TC == 67)
  PWM16_1_WritePeriod(R);

else if(TC == 71){
  PWM16_1_WritePeriod(S);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 75){
  PWM16_1_WritePeriod(R);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 79){
  PWM16_1_WritePeriod(M);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 83){
  PWM16_1_WritePeriod(F);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 87){
  PWM16_1_WritePeriod(S);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 91)
  PWM16_1_WritePeriod(SILENT);
   
   
else if(TC == 93){
  PWM16_1_WritePeriod(DD);
   LCD_1_Position(0,2);
LCD_1_PrCString("PO-NYO PO-NYO ");
}
else if(TC == 99){
  PWM16_1_WritePeriod(R);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 103){
  PWM16_1_WritePeriod(F);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if(TC == 108){
  PWM16_1_WritePeriod(D);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
  LCD_1_Position(1,2);
LCD_1_PrCString("PONYO");
}
else if (TC == 109)
  PWM16_1_WritePeriod(SILENT);

else if(TC == 110){
  PWM16_1_WritePeriod(D);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 111)
  PWM16_1_WritePeriod(SILENT);

else if (TC == 112){
  PWM16_1_WritePeriod(D);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 113){
  PWM16_1_WritePeriod(SILENT);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
LCD_1_Position(0,2);
LCD_1_PrCString("HUKURANDA");
}

else if(TC == 114){
  PWM16_1_WritePeriod(L);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if(TC == 117){
  PWM16_1_WritePeriod(F);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 120){
  PWM16_1_WritePeriod(C);
   //LCD_1_Position(0,2);
  LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
  
else if (TC == 123){
  PWM16_1_WritePeriod(LL);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 126){
  PWM16_1_WritePeriod(DD);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
  }
else if (TC == 129){
  PWM16_1_WritePeriod(SILENT);

}


else if(TC == 132){
  PWM16_1_WritePeriod(R);
   LCD_1_Position(0,2);
LCD_1_PrCString("MANMARU");
  LCD_1_Position(1,4);
LCD_1_PrCString("ONAKANO");
}
else if(TC == 135){
  PWM16_1_WritePeriod(C1);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}

else if (TC == 138){
  PWM16_1_WritePeriod(S);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
}
else if (TC == 141){
  PWM16_1_WritePeriod(S1);
   LCD_1_Position(1,4);
LCD_1_PrCString(" ");
}
else if (TC == 144){
  PWM16_1_WritePeriod(C);
   LCD_1_Position(1,4);
LCD_1_PrCString(" ");
}
else if (TC == 147){
  PWM16_1_WritePeriod(R);
   LCD_1_Position(1,4);
LCD_1_PrCString(" ");
}
else if (TC == 150){
  PWM16_1_WritePeriod(F);
   LCD_1_Position(1,4);
LCD_1_PrCString(" ");
}

else if (TC == 153){
  PWM16_1_WritePeriod(SILENT);
   LCD_1_Position(0,2);
LCD_1_PrCString(" ");
LCD_1_Position(1,2);
LCD_1_PrCString("ONNANOKO");
}
  

else if(TC == 156){
  PWM16_1_WritePeriod(R);
       LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if(TC == 160){
  PWM16_1_WritePeriod(S);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 164){
  PWM16_1_WritePeriod(M);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}
else if (TC == 168){
  PWM16_1_WritePeriod(F);
   LCD_1_Position(1,2);
LCD_1_PrCString(" ");
}

else if (TC == 175){
  PWM16_1_WritePeriod(SILENT);    
   LCD_1_Position(0,2);
LCD_1_PrCString("YOUR SCORE IS");
}
else if (TC == 180){
  LCD_1_Position(1,4);
LCD_1_PrCString("92");
}
}  
void main(void)
{
  // Insert your main routine code here.
   LCD_1_Start();
   M8C_EnableGInt;
   PWM16_1_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();
   while(1)
   {};
}

考察

同じ音が重なったときにその2つの音の間にSILENTをいれて音を1回消してうまくいった。
曲のテンポに合わせて、TCの数値を変え、曲の速さを工夫した。
歌詞は曲に合わせてどんどん消えるようにした。
最後に点数が出るが、ランダムにできず、同じ点数しかでなかった。
しかし、高い音階と低い音階の周波数がわからなかったので、使えるようにしたかった。
もう少し時間があればもう1曲くらい作って選べるようにしたかった。

  • 最終更新:2013-07-09 16:57:42

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

認証パスワード