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