チーム1244

課題名

圧力センサーによる音とLCD表示の変化

研究者名

2-14-47 藤原圭吾
2-14-48 松本一真

概要

第2回の演習で作ったラボlab3_adcに圧力センサーを加えた。圧力センサーに加える力で、LCD表示、音の周波数、LEDの光り方が変化する。


圧力センサーに力を加えていない状態
無題1.png

少し力を加えた状態
無題2.png

さらに力を加えた状態
無題3.png


※力を加えると音が出る。LEDは光り方が微妙に違う。

使用器具

・PSoC評価基板 CY3210 EVAL1
・Miniprog書き込み器
・27443デバイス
・圧力センサー
・スピーカー
・ジャンパ線


ソースコード



#include <m8c.h>
#include "PSoCAPI.h"
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;


void main(void)
{
  unsigned int adc_data;
   PGA_Start(PGA_HIGHPOWER);
   LCD_Start();
   LCD_InitBG(LCD_SOLID_BG);
   PWM16_1_Start();
   PWM8_1_Start();
   M8C_EnableGInt;
   ADCINC_Start(ADCINC_HIGHPOWER);
   ADCINC_GetSamples(0);
   while(1){
       while(ADCINC_fIsDataAvailable() == 0);
       adc_data = ADCINC_wClearFlagGetData();
       LCD_Position(0,0);
       LCD_PrHexInt(adc_data);
       
       if(adc_data > 2000){
         LCD_Position(1, 0);
         LCD_PrCString("(-.-) ");
         PWM16_1_WritePeriod(SILENT);
         PWM8_1_Start();
         PWM8_1_WritePeriod(1);
        }
        
        else if(adc_data > 1500 && adc_data <= 1700){
         LCD_Position(1, 0);
         LCD_PrCString("(^_^) ");
         PWM16_1_WritePeriod(D);
         PWM8_1_Start();
         PWM8_1_WritePeriod(10);
         
        }
        
        else if(adc_data > 1300 && adc_data <= 1500){
         LCD_Position(1, 0);
         LCD_PrCString("(>_<) ");
         PWM16_1_WritePeriod(L);
         PWM8_1_Start();
         PWM8_1_WritePeriod(20);
         }
        
       else if(adc_data > 1100 && adc_data <= 1300){
         LCD_Position(1, 0);
         LCD_PrCString("`w`)/ ");
         PWM16_1_WritePeriod(M);
         PWM8_1_Stop();
        }
        
        else if(adc_data > 900 && adc_data <= 1100){
         LCD_Position(1, 0);
         LCD_PrCString("(!o!) ");
         PWM16_1_WritePeriod(F);
         PWM8_1_Start();
         PWM8_1_WritePeriod(1);
        }
        
         else if(adc_data > 700 && adc_data <= 900){
         LCD_Position(1, 0);
         LCD_PrCString("\(^^)/");
         PWM16_1_WritePeriod(S);
         PWM8_1_Start();
         PWM8_1_WritePeriod(10);
         }
         
         else if(adc_data > 500 && adc_data <= 700){
         LCD_Position(1, 0);
         LCD_PrCString("(T_T) ");
         PWM16_1_WritePeriod(R);
         PWM8_1_Start();
         PWM8_1_WritePeriod(20);
         }
         
         else if(adc_data > 400 && adc_data <= 500){
         LCD_Position(1, 0);
         LCD_PrCString("(-_-#) ");
         PWM16_1_WritePeriod(C);
         PWM8_1_Stop();
        }
        
         else if(adc_data > 100 && adc_data <= 400){
         LCD_Position(1, 0);
         LCD_PrCString("(^w^) ");
         PWM16_1_WritePeriod(DD);
         PWM8_1_Start();
         PWM8_1_WritePeriod(1);
        }

  }
}


考察

圧力センサーに力を加え、LCD表示、音の周波数、LEDの光り方を変化させるものを作った。指で力を加えるため、同じLCD表示や音を維持するのは難しい。if文で値を条件分けしていて、その境目だと、変化が重なってしまうことがある。また、出したい音があっても、力加減が必要なため、すぐには出せない。力を徐々に加え、出したい音が出たら、力を維持する方法しかない。LEDの光り方を変化させるようにしたが、力を加えていくとうまくいったが、弱めると思った通りに光らなかった。だから、LEDを消すif文を除く各if文に、LEDを光らせるためのStart(); を追加した。VRを一定にしておかないといけないのが難点。

  • 最終更新:2012-10-23 16:08:00

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

認証パスワード