チーム1319

課題名

大体テルミン

研究者名

2-15-57 三浦 正嗣
2-15-74 松村 勇佑

概要

ロシアの楽器「テルミン」を目標として制作。
赤外線距離センサを用いドレミファソラシドの1オクターブ分の音階をならせるようにした。
赤外線距離センサによって自分の手との距離を判別し、スイッチを押すとその距離が短いほど高い音、長いほど低い音が出力し、LCDにはそのときどの音階がでているかを表示させる。

PSoC内のコード

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW = 125;
int D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;
#define SW 0b00000001 //Port1.0をスイッチとして使用する


void main()
{
 unsigned int adc_data;
  PGA_Start(PGA_HIGHPOWER);
  LCD_Start();
  LCD_InitBG(LCD_SOLID_BG);
  M8C_EnableGInt;
  ADCINC_Start(ADCINC_HIGHPOWER);
  ADCINC_GetSamples(0);
  PWM16_1_Start();
  PRT1DR &= (~SW);
  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(PRT1DR){  //読み込んだSWの値が1なら音を出し、0なら出さない
       PWM16_1_WritePulseWidth(PW);
          PWM16_1_WritePeriod(229-adc_data/24);
      }
      else{
       PWM16_1_WritePulseWidth(0);
          PWM16_1_WritePeriod(0);
      }
      //大まかな音階の表示
      if(adc_data <= 0x02F0){//752 
          LCD_Position(0,6);
          LCD_PrCString("D ");     
         }
         else if(adc_data  > 0x02F0&& adc_data  <= 0x03EA){//752~1002
          LCD_Position(0,6);
          LCD_PrCString("L ");
         }
         else if(adc_data  > 0x03EA && adc_data  <= 0x04E4){//1002~1252
             LCD_Position(0,6);
          LCD_PrCString("M ");
         }
         else if(adc_data  > 0x04E4 && adc_data  <= 0x05DE){//1252~1502
          LCD_Position(0,6);
          LCD_PrCString("F ");
         }
         else if(adc_data  > 0x05DE && adc_data  <= 0x06D8){//1502~1752
          LCD_Position(0,6);
          LCD_PrCString("S ");
         }
         else if(adc_data  > 0x06D8 && adc_data  <= 0x07D2){//1752~2002
          LCD_Position(0,6);
          LCD_PrCString("R ");
         }
         else if(adc_data  > 0x07D2 && adc_data  <= 0x08CC){//2002~2252
          LCD_Position(0,6);
          LCD_PrCString("C ");
         }   
         else if(adc_data  > 0x08CC && adc_data  <= 0x0AC0){//2252~2752
          LCD_Position(0,6);
          LCD_PrCString("DD");
       }    
  }
}

使用部品

・PSoC評価基盤
・MiniProg
・赤外線距離センサ
・スピーカー
・ジャンパ線

考察

スイッチを押したときだけ音が出るように設計したが、スイッチを押していないときにピーという謎の音が発生し、その原因を考えたがわからなかった。

  • 最終更新:2013-05-14 17:41:21

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

認証パスワード