チーム1563

課題名

ブザーを止めろ!!

研究者名

Shingo Hayano
Anna Hoshino

使用機器

PSoC基盤  1個
PSoC MiniProg 1個
スピーカー  2個
光センサー  1個
ジャンプ線  5本

概要

スイッチを入れると片方のスピーカーからブザーが鳴る。
光センサーで明るさを計測し、その値を16進数でLCDに表示する。
ブザーを止められる値を乱数で決め、その値±10の値をブザーを止められる範囲とする。
表示されている値がブザーを止められる範囲内の値になったらブザーを止めることができる。
ブザーを止められないまま20秒経つと、もう片方のスピーカーからゲームオーバーの音楽が鳴り続ける。

ソースコード


#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR1
#pragma interrupt_handler myISR2
int PW = 125;
int SILENT=0, D=229, DS=217, L=204, M=182, F=173, S=153, R=136, C=121, DD=115, LL = 102;
int TC = 0;
void myISR1(void){
TC +=1;
PWM16_1_WritePulseWidth(PW);
if(TC ==1)
PWM16_1_WritePeriod(F);
else if(TC==5)
PWM16_1_WritePeriod(D);
else if(TC==6)
PWM16_1_WritePeriod(SILENT);
else if(TC==7)
PWM16_1_WritePeriod(D);
else if(TC==9)
PWM16_1_WritePeriod(DS);
else if(TC==13)
PWM16_1_WritePeriod(D);
else if(TC==21)
PWM16_1_WritePeriod(M);
else if(TC==25)
PWM16_1_WritePeriod(F);
else if(TC==29)
PWM16_1_WritePeriod(SILENT);
else if(TC==33)
TC = 0;
}


void main(void){
int x,y,z;
 unsigned int adc_data;
 unsigned int time = 512  ;
 PGA_Start(PGA_HIGHPOWER);
 LCD_Start();
   LCD_InitBG(LCD_SOLID_BG);
 M8C_EnableGInt;
 ADCINC_Start(ADCINC_HIGHPOWER);
 ADCINC_GetSamples(0);
 PWM8_1_Start();
 PWM8_1_WritePulseWidth(PW);    
 while(1){
           while(ADCINC_fIsDataAvailable()==0){};
         adc_data=ADCINC_wClearFlagGetData();
         time--;
         
         LCD_Position(0,0);
         LCD_PrHexInt(adc_data);
         LCD_Position(0,10);
         LCD_PrHexInt(time);
         LCD_DrawBG(1,0,16,(adc_data/50));

        x=rand(4095);
        y=x+10;
        if(y>4095)
        y=4095;
        z=x-10;
        if(z<0)
        z=0;
       //x=4095;確認用
         

if(adc_data>=z && adc_data <=y){
PWM8_1_Stop();
ADCINC_Stop();
}
if(time >= 0xFFF0 ){
   PWM8_1_Stop();
   ADCINC_Stop();
   M8C_EnableGInt;
   PWM16_1_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();
   while(1)
   {};
}
else
PWM8_1_WritePeriod(L);
}
}

考察

今回の装置を作成するにあたり、lab3_adc,lab1_pwm,timer_pwm2を用いた。
クロックの値が1hzではなかったので、約20秒に音楽が流れだす仕様を実現するために変数timeの値を調節した。
ブザーを止めるための値を毎回変えるために、乱数を用いた。はじめブザーを止めるのが難しすぎたので、ひとつの値ではなく範囲内の値になったらブザーを止めるように工夫したのだが、光センサーの表示の幅が非常に広く、それでも明るさを調節しきれず20秒のうちにとめられないこともある。
今回は外部入力として光センサーを用いたが、温度センサーなどほかのセンサーに付け替えることも可能で、また乱数を設定せずキーパットを用いれば暗証番号の入力を求めるセキュリティのような使い方ができると思った。

  • 最終更新:2015-12-22 16:21:15

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

認証パスワード