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

このWIKIを編集するにはパスワード入力が必要です

認証パスワード