チーム152A
課題名
いらっしゃいませぇ~
研究者名
Keigo Kitafuku
Takashi kawasima
概要
このラボは入店する際に音が鳴るコンビニを想定して作りました。
光センサーを使い、人が近づいてきたら音が流れます。
今回は人の代わりに指を使います。
指が近づいてセンサーの値が一定値以下になれば、
画面に「hello」と表示させ音を流します。
音が鳴り終えて人(指)が近づいてきたら再び上記と同じ動作をします。
それ以外の時は「welcome」と表示します。
みんなが今まで生きてきて絶対聞いたことがあるメロディーです。
きっとお買い物がしたくなるでしょう。
ブロック図
使用機材
- Psoc Mini Prog
- スピーカー
- 光センサー
- ジャンパ線
ソースコード
#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, A=273, L=204, M=182, SF=162, C=121;
int TC=0;
void myISR(){
LCD_Start();
TC+=1;
PWM16_1_WritePulseWidth(PW);
if(TC>=1&&TC<=3){
PWM16_1_WritePeriod(SF);
LCD_PrCString("hello");}
else if(TC>=4&&TC<=6){
PWM16_1_WritePeriod(L);
LCD_PrCString("hello");}
else if(TC>=7&&TC<=9){
PWM16_1_WritePeriod(A);
LCD_PrCString("hello");}
else if(TC>=10&&TC<=12){
PWM16_1_WritePeriod(L);
LCD_PrCString("hello");}
else if(TC>=13&&TC<=15){
PWM16_1_WritePeriod(M);
LCD_PrCString("hello");}
else if(TC>=16&&TC<=18){
PWM16_1_WritePeriod(C);
LCD_PrCString("hello");}
else if(TC>=19&&TC<=21){
PWM16_1_WritePeriod(C);
LCD_PrCString("hello");}
else if(TC>=22&&TC<=24){
PWM16_1_WritePeriod(C);
LCD_PrCString("hello");}
else if(TC>=25&&TC<=27){
PWM16_1_WritePeriod(M);
LCD_PrCString("hello");}
else if(TC>=28&&TC<=30){
PWM16_1_WritePeriod(SF);
LCD_PrCString("hello");}
else if(TC>=31&&TC<=33){
PWM16_1_WritePeriod(M);
LCD_PrCString("hello");}
else if(TC>=34&&TC<=36){
PWM16_1_WritePeriod(A);
LCD_PrCString("hello");}
else if(TC>=37&&TC<=39){
PWM16_1_WritePeriod(L);
LCD_PrCString("hello");}
else if(TC>40) {
LCD_PrCString("welcome");
Timer16_1_DisableInt();
TC=0;
}
else
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; PGA_Start(PGA_HIGHPOWER); ADCINC_Start(ADCINC_HIGHPOWER); ADCINC_GetSamples(0); M8C_EnableGInt; PWM16_1_Start(); LCD_Start(); LCD_PrCString("welcome"); //LCD_InitBG(LCD_SOLID_BG); Timer16_1_Start(); while(1) { while(ADCINC_fIsDataAvailable()==0); adc_data=ADCINC_wClearFlagGetData(); //LCD_Position(0,0); //LCD_PrHexInt(adc_data); //LCD_DrawBG(1,0,16,(adc_data/50)); if(adc_data<=0x0A00){
Timer16_1_EnableInt(); } }
}
考察
- timer
- pwm周波数
- AD変換
- LCD表示
の4つを用いた。
音の発生はpwm_2とtimerのラボを参考にした。
ただ割り込みをしただけだと一度音がなってセンサーを近づけても音はならない。
しかし、「DisableInt」を用いたことで割り込みの中止をした。
それによってセンサーを近づけるたびに音がなるように工夫した。
これを応用すると店で使用できると考えた。
- 最終更新:2015-06-16 14:26:25