チーム1867
課題名
楽曲再生機
研究者名
Eiki Ikeda
Sakuya Amano
Hiroaki Kadokura
使用した機器
PSoCMiniProg
PSoC評価基板
ジャンパ線3本
距離センサー
スピーカー
概要
距離センサーを使用し物体が一定距離まで近づくとUSAという曲を流すものである。
同時にLCDディスプレイにUSAという曲名の文字列と距離センサーまでの距離を表示する。
ソースコード
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125;
int SILENT=20000,L=204,F=172,SU=153,D=229 ,C=258;
int TC=0;
void myISR(void)
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 10)
PWM16_1_WritePeriod(SU);
else if(TC == 30)
PWM16_1_WritePeriod(SU);
else if (TC == 50)
PWM16_1_WritePeriod(F);
else if(TC == 70)
PWM16_1_WritePeriod(F);
else if (TC == 80)
PWM16_1_WritePeriod(SU);
else if(TC == 90)
PWM16_1_WritePeriod(F);
else if(TC == 100) PWM16_1_WritePeriod(F); else if (TC == 110) PWM16_1_WritePeriod(L); else if (TC == 150)// PWM16_1_WritePeriod(D); else if (TC == 170) PWM16_1_WritePeriod(C); else if (TC == 180) PWM16_1_WritePeriod(D); else if (TC == 190) PWM16_1_WritePeriod(C); else if (TC == 200) PWM16_1_WritePeriod(D); else if (TC == 210) PWM16_1_WritePeriod(C); else if (TC == 220) PWM16_1_WritePeriod(D); else if (TC == 230) PWM16_1_WritePeriod(C); else if (TC == 240) PWM16_1_WritePeriod(L); else if (TC == 250) PWM16_1_WritePeriod(F); else if (TC == 300)
PWM16_1_WritePeriod(SILENT);
}
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. unsigned int adc_data; int state = 0; /*int cnt = 0; int bar = 0; int dif = -1;*/ PGA_Start(PGA_HIGHPOWER); LCD_Start(); LCD_InitBG(LCD_SOLID_BG); M8C_EnableGInt; ADCINC_Start(ADCINC_HIGHPOWER); ADCINC_GetSamples(0); PWM16_1_Start(); PWM16_1_WritePulseWidth(PW); PWM16_1_WritePeriod(SILENT); while(1){ while(ADCINC_fIsDataAvailable() == 0); adc_data = ADCINC_wClearFlagGetData(); LCD_Position(0, 0); LCD_PrHexInt(adc_data); if(state == 0 && adc_data <= 0x0900){ state = 1; //cnt = 0; LCD_PrCString("U.S.A."); } else if((state == 1 | | state == 2)&& adc_data > 0x1000){ state = 0;
LCD_PrCString(" "); PWM16_1_WritePeriod(SILENT); } //LCD_Position(1, 0); //LCD_PrHexInt(adc_data); if(state == 1){ M8C_EnableGInt;
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
while(1)
{ };
state=2; }
/* LCD_DrawBG(1,0,16-bar,bar*5);
LCD_DrawBG(1,16-bar,8,bar*5); if(cnt%50==0) bar = bar + dif;
cnt += 2;*/ } }
考察
lab3_adc、timer_pwm2,motor,チーム1842,1727を参考にし、作成した。
結論から言うとこれはうまく動かない。
曲を流すのはうまくいったが、adc系とpwm系のモジュールを使っているのでクロック関係が調節できなかった。
これが原因で距離センサーが反応しなかったと考えられる。
今回は時間がなかったためできなかったが、■を増やすことにより
クロックを調節が可能になり、距離センサーも正常に作動すると思う。
- 最終更新:2019-01-12 16:58:04