チーム1319
課題名
大体テルミン
研究者名
2-15-57 三浦 正嗣
2-15-74 松村 勇佑
概要
ロシアの楽器「テルミン」を目標として制作。
赤外線距離センサを用いドレミファソラシドの1オクターブ分の音階をならせるようにした。
赤外線距離センサによって自分の手との距離を判別し、スイッチを押すとその距離が短いほど高い音、長いほど低い音が出力し、LCDにはそのときどの音階がでているかを表示させる。
PSoC内のコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW = 125;
int D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;
#define SW 0b00000001 //Port1.0をスイッチとして使用する
void main()
{
unsigned int adc_data; PGA_Start(PGA_HIGHPOWER); LCD_Start(); LCD_InitBG(LCD_SOLID_BG); M8C_EnableGInt; ADCINC_Start(ADCINC_HIGHPOWER); ADCINC_GetSamples(0); PWM16_1_Start(); PRT1DR &= (~SW); while(1){ while(ADCINC_fIsDataAvailable()==0){}; adc_data=ADCINC_wClearFlagGetData(); LCD_Position(0,0); LCD_PrHexInt(adc_data); LCD_DrawBG(1,0,16,(adc_data/50)); if(PRT1DR){ //読み込んだSWの値が1なら音を出し、0なら出さない PWM16_1_WritePulseWidth(PW); PWM16_1_WritePeriod(229-adc_data/24); } else{ PWM16_1_WritePulseWidth(0); PWM16_1_WritePeriod(0); } //大まかな音階の表示 if(adc_data <= 0x02F0){//752 LCD_Position(0,6); LCD_PrCString("D "); } else if(adc_data > 0x02F0&& adc_data <= 0x03EA){//752~1002 LCD_Position(0,6); LCD_PrCString("L "); } else if(adc_data > 0x03EA && adc_data <= 0x04E4){//1002~1252 LCD_Position(0,6); LCD_PrCString("M "); } else if(adc_data > 0x04E4 && adc_data <= 0x05DE){//1252~1502 LCD_Position(0,6); LCD_PrCString("F "); } else if(adc_data > 0x05DE && adc_data <= 0x06D8){//1502~1752 LCD_Position(0,6); LCD_PrCString("S "); } else if(adc_data > 0x06D8 && adc_data <= 0x07D2){//1752~2002 LCD_Position(0,6); LCD_PrCString("R "); } else if(adc_data > 0x07D2 && adc_data <= 0x08CC){//2002~2252 LCD_Position(0,6); LCD_PrCString("C "); } else if(adc_data > 0x08CC && adc_data <= 0x0AC0){//2252~2752 LCD_Position(0,6); LCD_PrCString("DD"); } }
}
使用部品
・PSoC評価基盤
・MiniProg
・赤外線距離センサ
・スピーカー
・ジャンパ線
考察
スイッチを押したときだけ音が出るように設計したが、スイッチを押していないときにピーという謎の音が発生し、その原因を考えたがわからなかった。
- 最終更新:2013-05-14 17:41:21