チーム1436
課題名
モスキート音発生装置~あなたの耳年齢は何歳?~
研究者名
2年15組11番 大石 達寛
2年15組12番 大関 宏
概要
この装置から流れるモスキート音が聞けるか聞けないかであなたの耳年齢が分かっちゃいます!!
対応したキーボードを押すことで以下の周波数のモスキート音が流れます。
LEVEL1 13KHz 41~50歳くらい
LEVEL2 15KHz 31~40歳くらい
LEVEL3 16KHz 25~30歳くらい
LEVEL4 18KHz 18~24歳くらい
LEVEL5 20KHz 13~17歳くらい
LEVELMAX 21KHz 聞こえたら人間ではない
聞き取れたら"g"を押してドラクエのレベルアップ音を聞きましょう!!
聞き取れなかったら"0"を押しましょう…マリオブラザーズのゲームオーバー音が流れます…
[対応キーボード一覧]
キーボード"1":Level1のモスキート音が流れ、LCDに"LEVEL1"と表示される。
キーボード"2":Level2のモスキート音が流れ、LCDに"LEVEL2"と表示される。
キーボード"3":Level3のモスキート音が流れ、LCDに"LEVEL3"と表示される。
キーボード"4":Level4のモスキート音が流れ、LCDに"LEVEL4"と表示される。
キーボード"5":Level5のモスキート音が流れ、LCDに"LEVEL5"と表示される。
キーボード"6":Level6のモスキート音が流れ、LCDに"LEVELMAX"と表示される。
キーボード"g":聞きとれた場合に押すとレベルアップ音が流れ、LCDに"LEVLUP"と表示される。
キーボード"0":聞き取れなかった場合に押すとゲームオーバー音が流れ、LCDに"GAMEOVER"と表示される。
配線
ソースコード
#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, MM=91, LL=102 ,DDD=58, DDDD=29,FF=86,DDH=108,MH=193;
double level1=4.6030769230 ,level2=3.98933333 ,level3=3.74 ,level4=3.32444444,level5=2.992,levelmax=2.84952380;
int TC=0; int n = 0; void myISR(void){ if(n == 1){ TC += 1; PWM16_1_WritePulseWidth(PW); PWM16_1_Start(); if(TC == 1) PWM16_1_WritePeriod(F); if(TC == 2) PWM16_1_WritePeriod(SILENT); if(TC == 3) PWM16_1_WritePeriod(F); if(TC == 4) PWM16_1_WritePeriod(SILENT); if(TC == 5) PWM16_1_WritePeriod(F); if(TC == 6) PWM16_1_WritePeriod(SILENT); if(TC == 7) PWM16_1_WritePeriod(MH); if(TC == 9) PWM16_1_WritePeriod(SILENT); if(TC == 11) PWM16_1_WritePeriod(S); if(TC == 13) PWM16_1_WritePeriod(F); if(TC == 18) PWM16_1_WritePeriod(SILENT); } if(n == 2){ TC += 1; PWM16_1_WritePulseWidth(PW); PWM16_1_Start(); if(TC == 1) PWM16_1_WritePeriod(DD); if(TC == 2) PWM16_1_WritePeriod(D); if(TC == 3) PWM16_1_WritePeriod(LL); if(TC == 4) PWM16_1_WritePeriod(C); if(TC == 5) PWM16_1_WritePeriod(FF); if(TC == 6) PWM16_1_WritePeriod(SILENT); if(TC == 7) PWM16_1_WritePeriod(FF); if(TC == 8) PWM16_1_WritePeriod(SILENT); if(TC == 9) PWM16_1_WritePeriod(MM); if(TC == 10) PWM16_1_WritePeriod(SILENT); if(TC == 11) PWM16_1_WritePeriod(LL); if(TC == 12) PWM16_1_WritePeriod(SILENT); if(TC == 13) PWM16_1_WritePeriod(DD); if(TC == 14) PWM16_1_WritePeriod(M); if(TC == 15) PWM16_1_WritePeriod(SILENT); if(TC == 16) PWM16_1_WritePeriod(M); if(TC == 17) PWM16_1_WritePeriod(D); if(TC == 18) PWM16_1_WritePeriod(SILENT); }
}
void main(void)
{
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; UART_CPutString("\r\nWelcom 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"); PWM16_1_Start(); if(*strPtr=='1'){ LCD_1_Start(); LCD_1_PrCString("LEVEL1"); PWM16_1_WritePeriod(level1); } else if(*strPtr=='2'){ LCD_1_Start(); LCD_1_PrCString("LEVEL2"); PWM16_1_WritePeriod(level2); } else if(*strPtr=='3'){ LCD_1_Start(); LCD_1_PrCString("LEVEL3"); PWM16_1_WritePeriod(level3); } else if(*strPtr=='4'){ LCD_1_Start(); LCD_1_PrCString("LEVEL4"); PWM16_1_WritePeriod(level4); } else if(*strPtr=='5'){ LCD_1_Start(); LCD_1_PrCString("LEVEL5"); PWM16_1_WritePeriod(level5); } else if(*strPtr=='6'){ LCD_1_Start(); LCD_1_PrCString("LEVELMAX"); PWM16_1_WritePeriod(levelmax); } else if(*strPtr=='0'){ n=2; M8C_EnableGInt; LCD_1_Start(); LCD_1_PrCString("GAMEOVER"); PWM16_1_Start(); Timer16_1_EnableInt(); Timer16_1_Start(); while(1) {}; } if(*strPtr=='g') { n=1 M8C_EnableGInt; PWM16_1_Start(); LCD_1_Start(); LCD_1_PrCString("LEVELUP"); Timer16_1_EnableInt(); Timer16_1_Start(); while(1) {}; }
}
UART_CmdReset();
}
}
}
考察
参考としたラボはhello_world,timer_pwm2,pwm_uart_2である。
工夫した点として
モスキート音を聞けた場合レベルアップの効果音を、モスキート音を聞こえなかった場合ゲームオーバーの効果音を用意した。またモスキート音が鳴っているとき、レベルがわかるようにLCDディスプレーに今聞いているモスキート音のレベルを表示させた。
nという変数を使うことでどの効果音が流れるかの場合分けをした。
出力される周波数とVC3の周波数との関係を調べ、特定の周波数を流すのには苦労した。
自分たちの耳でも聞こえない周波数はウェーブスペクトラを使用し、本当にスピーカーから音が出ているか確認した。
効果音を鳴らした後、リセットボタンを押さずににモスキート音を鳴らすということが実装できなかった。
- 最終更新:2014-07-15 16:35:50