チーム1352
課題名
カエルの歌
研究者名
東 裕樹、 新井 聡一郎
概要
光センサで音程を変え、距離センサでテンポを変えるということを実装した。
また距離センサの値をLCDに表示する。
使用した部品
距離センサ
光センサ
スピーカー
抵抗
ソースコード
#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;
int TC=0;
unsigned int data_kyori,data_hikari;
void myISR(void){
TC+=1; PWM16_1_WritePulseWidth(PW); if(data_kyori<0x200){ if(TC==1) PWM16_1_WritePeriod(D); else if(TC==5) PWM16_1_WritePeriod(L); else if(TC==9) PWM16_1_WritePeriod(M); else if(TC==13) PWM16_1_WritePeriod(F); else if(TC==17) PWM16_1_WritePeriod(M); else if(TC==21) PWM16_1_WritePeriod(L); else if(TC==25) PWM16_1_WritePeriod(D); else if(TC==29) PWM16_1_Stop(); else if(TC==33){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==37) PWM16_1_WritePeriod(F); else if(TC==41) PWM16_1_WritePeriod(S); else if(TC==45) PWM16_1_WritePeriod(R); else if(TC==49) PWM16_1_WritePeriod(S); else if(TC==53) PWM16_1_WritePeriod(F); else if(TC==57) PWM16_1_WritePeriod(M); else if(TC==61) PWM16_1_Stop(); else if(TC==65){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==72) PWM16_1_Stop(); else if(TC==73){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==80) PWM16_1_Stop(); else if(TC==81){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==88) PWM16_1_Stop(); else if(TC==89){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==96) PWM16_1_Stop(); else if(TC==97){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==98) PWM16_1_Stop(); else if(TC==99){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==100) PWM16_1_Stop(); else if(TC==101){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==102) PWM16_1_Stop(); else if(TC==103){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==104) PWM16_1_Stop(); else if(TC==105){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==106) PWM16_1_Stop(); else if(TC==107){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==108) PWM16_1_Stop(); else if(TC==109){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==110) PWM16_1_Stop(); else if(TC==111){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==112) PWM16_1_Stop(); else if(TC==113){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==117) PWM16_1_WritePeriod(L); else if(TC==121) PWM16_1_WritePeriod(D); else if(TC==125) PWM16_1_Stop(); } else if(0x200<=data_kyori && data_kyori<0x300){ if(TC==1) PWM16_1_WritePeriod(D); else if(TC==7) PWM16_1_WritePeriod(L); else if(TC==13) PWM16_1_WritePeriod(M); else if(TC==19) PWM16_1_WritePeriod(F); else if(TC==25) PWM16_1_WritePeriod(M); else if(TC==31) PWM16_1_WritePeriod(L); else if(TC==37) PWM16_1_WritePeriod(D); else if(TC==43) PWM16_1_Stop(); else if(TC==49){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==55) PWM16_1_WritePeriod(F); else if(TC==61) PWM16_1_WritePeriod(S); else if(TC==67) PWM16_1_WritePeriod(R); else if(TC==73) PWM16_1_WritePeriod(S); else if(TC==79) PWM16_1_WritePeriod(F); else if(TC==85) PWM16_1_WritePeriod(M); else if(TC==91) PWM16_1_Stop(); else if(TC==97){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==108) PWM16_1_Stop(); else if(TC==109){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==120) PWM16_1_Stop(); else if(TC==121){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==132) PWM16_1_Stop(); else if(TC==133){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==144) PWM16_1_Stop(); else if(TC==145){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==147) PWM16_1_Stop(); else if(TC==148){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==150) PWM16_1_Stop(); else if(TC==151){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==153) PWM16_1_Stop(); else if(TC==154){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==156) PWM16_1_Stop(); else if(TC==157){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==159) PWM16_1_Stop(); else if(TC==160){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==162) PWM16_1_Stop(); else if(TC==163){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==165) PWM16_1_Stop(); else if(TC==167){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==169) PWM16_1_Stop(); else if(TC==170){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==176) PWM16_1_WritePeriod(L); else if(TC==182) PWM16_1_WritePeriod(D); else if(TC==188) PWM16_1_Stop(); } else if(0x300<=data_kyori){ if(TC==1) PWM16_1_WritePeriod(D); else if(TC==9) PWM16_1_WritePeriod(L); else if(TC==17) PWM16_1_WritePeriod(M); else if(TC==25) PWM16_1_WritePeriod(F); else if(TC==33) PWM16_1_WritePeriod(M); else if(TC==41) PWM16_1_WritePeriod(L); else if(TC==49) PWM16_1_WritePeriod(D); else if(TC==57) PWM16_1_Stop(); else if(TC==65){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==73) PWM16_1_WritePeriod(F); else if(TC==81) PWM16_1_WritePeriod(S); else if(TC==89) PWM16_1_WritePeriod(R); else if(TC==97) PWM16_1_WritePeriod(S); else if(TC==105) PWM16_1_WritePeriod(F); else if(TC==113) PWM16_1_WritePeriod(M); else if(TC==121) PWM16_1_Stop(); else if(TC==129){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==144) PWM16_1_Stop(); else if(TC==145){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==160) PWM16_1_Stop(); else if(TC==161){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==176) PWM16_1_Stop(); else if(TC==177){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==192) PWM16_1_Stop(); else if(TC==193){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==196) PWM16_1_Stop(); else if(TC==197){ PWM16_1_Start(); PWM16_1_WritePeriod(D);} else if(TC==200) PWM16_1_Stop(); else if(TC==201){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==204) PWM16_1_Stop(); else if(TC==205){ PWM16_1_Start(); PWM16_1_WritePeriod(L);} else if(TC==208) PWM16_1_Stop(); else if(TC==209){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==212) PWM16_1_Stop(); else if(TC==213){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==216) PWM16_1_Stop(); else if(TC==217){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==220) PWM16_1_Stop(); else if(TC==221){ PWM16_1_Start(); PWM16_1_WritePeriod(F);} else if(TC==224) PWM16_1_Stop(); else if(TC==225){ PWM16_1_Start(); PWM16_1_WritePeriod(M);} else if(TC==233) PWM16_1_WritePeriod(L); else if(TC==241) PWM16_1_WritePeriod(D); else if(TC==249) PWM16_1_Stop(); }
}
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. PGA_Start(PGA_HIGHPOWER); PGA_1_Start(PGA_1_HIGHPOWER); M8C_EnableGInt; DUALADC_1_Start(DUALADC_1_HIGHPOWER); DUALADC_1_GetSamples(0); Timer16_1_EnableInt(); while(DUALADC_1_fIsDataAvailable()==0); data_kyori=DUALADC_1_iGetData1(); //DUALADC_1_iGetData1ClearFlag(); data_hikari=DUALADC_1_iGetData2(); DUALADC_1_ClearFlag(); if(1000<=data_hikari){ SILENT=SILENT*2; D=D*2; L=L*2; M=M*2; F=F*2; S=S*2; R=R*2; C=C*2; DD=DD*2;} if(data_hikari<500){ SILENT=SILENT/2; D=D/2; L=L/2; M=M/2; F=F/2; S=S/2; R=R/2; C=C/2; DD=DD/2;} PWM16_1_Start(); Timer16_1_Start(); LCD_1_Start(); LCD_1_InitBG(LCD_1_SOLID_BG); LCD_1_Position(0,0); LCD_1_PrHexInt(data_kyori); LCD_1_DrawBG(1,0,16,(data_kyori/50));
}
考察
今回の課題では曲が流れている途中でテンポや音程を変えるということを実装したかったができなかった。
なので曲ごとに変更する仕様になってしまった。しかし曲の途中で変更すると曲として成り立たなくなるので
よかったのかもしれない。
今回可変抵抗の代わりに抵抗を使った理由は電圧を安定させるためである。
またノイズを消すためにSILENTを使わずにPWM_16_1_Start()とPWM_16_1_Stop()を使用してSILENTを
作り出すことに成功した。
- 最終更新:2013-11-19 15:34:13