チーム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