チーム152A

課題名

いらっしゃいませぇ~

研究者名

Keigo Kitafuku
Takashi kawasima

概要

このラボは入店する際に音が鳴るコンビニを想定して作りました。
光センサーを使い、人が近づいてきたら音が流れます。
今回は人の代わりに指を使います。
指が近づいてセンサーの値が一定値以下になれば、
画面に「hello」と表示させ音を流します。
音が鳴り終えて人(指)が近づいてきたら再び上記と同じ動作をします。
それ以外の時は「welcome」と表示します。
みんなが今まで生きてきて絶対聞いたことがあるメロディーです。
きっとお買い物がしたくなるでしょう。


ブロック図

無.png

使用機材

  • 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

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

認証パスワード