チーム1635

課題名

口パク厳禁!卒業式持参必須アイテム

研究者名

Hiromu Iwai
Yuma Oyama

概要

目的:
卒業式では多くの歌を歌わされる。その時に恥ずかしくて口パクになってしまうそこのキミ!このデバイスを持参すれば代わりに歌ってくれるぞ!(教職員も持参可)

システム:
スピーカーを2つ使い、1オクターブ違う音で「仰げば尊し」を演奏した。また演奏に合わせて歌詞を表示した。

使用器具

PSoC ×1
PSoC MiniProg ×1
スピーカー ×2
ジャンパ線 ×4

ソースコード、配線

ソースコード

#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, T=1; //Pulse Width
int SILENT=0,d=458,l=408,r=272,c=242,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115,LL=102,MM=91,FF=86,SS=76,RR=68,CC=60/*RR=68*/;


int TC=0;//Time Count


void myISR(void)
{
TC+=1;  //TC = TC + 1
  
  PWM16_1_WritePulseWidth(PW);
  PWM16_2_WritePulseWidth(PW);
  
  if(TC==1){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  LCD_1_Init();
  LCD_1_PrCString("AO GE BA TOTO SI");
  }
  else if(TC==5){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  }
  else if(TC==10){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==11){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F);
  }
  else if(TC==16){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==23){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==24){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==28){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==34){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==35){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==40){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==47){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  else if(TC==48){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  LCD_1_Init();
  LCD_1_PrCString("WA GA SI NO ONN");
  }
  else if(TC==52){
  PWM16_1_WritePeriod(L);
  PWM16_2_WritePeriod(L);
  }
  else if(TC==58){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==59){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  }
  else if(TC==63){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F);
  }
  else if(TC==69){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==70){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==74){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==85){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  
  else if(TC==87){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  LCD_1_Init();
  LCD_1_PrCString("OSHI ENO NIWA NIMO");
  }
  else if(TC==93){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  }
  else if(TC==98){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==99){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F);
  }
  else if(TC==104){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==111){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==112){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==116){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==122){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==123){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==128){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);         //oshieno niwaniomo
  }
  else if(TC==135){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }

 
  else if(TC==136){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M);
  LCD_1_Init();
  LCD_1_PrCString("HA YA IKU TO SE");
  }
  else if(TC==140){
  PWM16_1_WritePeriod(L);
  PWM16_2_WritePeriod(L);
  }
  else if(TC==146){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==147){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R);
  }
  else if(TC==151){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S);
  }
  else if(TC==157){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==158){
  PWM16_1_WritePeriod(c);
  PWM16_2_WritePeriod(c);
  }
  else if(TC==162){
  PWM16_1_WritePeriod(D);//check
  PWM16_2_WritePeriod(D);//haya iku tose
  }
  else if(TC==170){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  else if(TC==179){
  PWM16_1_WritePeriod(D);
  PWM16_2_WritePeriod(D);
  LCD_1_Init();
  LCD_1_PrCString("OMO EBA ITO TOSHI");
  }
  else if(TC==183){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==188){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==189){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==194){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F);
  }
  else if(TC==201){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==202){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==206){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S/2);
  }
  else if(TC==212){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==213){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M/2);
  }
  else if(TC==218){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S/2);
  }
  else if(TC==225){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  else if(TC==226){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S/2);
  LCD_1_Init();
  LCD_1_PrCString("KONO TOSHI TUKI");
  }
  else if(TC==230){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==236){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==237){
  PWM16_1_WritePeriod(D/2);
  PWM16_2_WritePeriod(D/4);
  }
  else if(TC==241){
  PWM16_1_WritePeriod(C);
  PWM16_2_WritePeriod(C/2);
  }
  else if(TC==247){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==248){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==252){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S/2);
  }
  else if(TC==260){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  
  else if(TC==269){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F/2);
  LCD_1_Init();
  LCD_1_PrCString("IMA KOSO WAKA REME");
  }
  else if(TC==273){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M/2);
  }
  else if(TC==278){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==279){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F/2);
  }
  else if(TC==284){
  PWM16_1_WritePeriod(S);
  PWM16_2_WritePeriod(S/2);
  }
  else if(TC==291){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==292){
  PWM16_1_WritePeriod(D/2);
  PWM16_2_WritePeriod(D/4);
  }
  else if(TC==298){
  PWM16_1_WritePeriod(D/2);
  PWM16_2_WritePeriod(D/4);
  }
  else if(TC==304){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==305){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);
  }
  else if(TC==310){
  PWM16_1_WritePeriod(R);
  PWM16_2_WritePeriod(R/2);//imakoso wakareme
  }
  else if(TC==317){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  
  
  
  else if(TC==318){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F/2);
  LCD_1_Init();
  LCD_1_PrCString("IZA SARA BA");
  }
  else if(TC==322){
  PWM16_1_WritePeriod(L);
  PWM16_2_WritePeriod(L/2);
  }
  else if(TC==328){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==329){
  PWM16_1_WritePeriod(F);
  PWM16_2_WritePeriod(F/2);
  }
  else if(TC==333){
  PWM16_1_WritePeriod(M);
  PWM16_2_WritePeriod(M/2);
  }
  else if(TC==339){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==340){
  PWM16_1_WritePeriod(L);
  PWM16_2_WritePeriod(L/2);
  }
  else if(TC==344){
  PWM16_1_WritePeriod(D);
  PWM16_2_WritePeriod(D/2);//iza saraba
  }
  else if(TC==353){
  PWM16_1_WritePeriod(0);
  PWM16_2_WritePeriod(0);
  }
  else if(TC==363) {
  PWM16_1_WritePeriod(SILENT);
  PWM16_2_WritePeriod(SILENT);
  LCD_1_Init();
  LCD_1_PrCString("HA KU SYU");
  }
  }

void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
  // Insert your main routine code here.
  M8C_EnableGInt;
  PWM16_1_Start();
  PWM16_2_Start();
  
  Timer16_1_EnableInt();
  LCD_1_Start();
  Timer16_1_Start();
  while(1){
 };
 }

配線
1635h.JPG

写真
1635.JPG

考察

参考にしたラボ …… hello_world、timer_pwm2

hello_worldラボのLCDに文字列を出力するという処理をtimer_pwm2ラボの割り込み後の処理に追加することによって音声と歌詞を同時に出力できるようにした。周波数を1/2倍にすることで元の音の1オクターブ高い音を出すことができ、if文の中のTCの数値を変えることで音の長さを調整することができる。またこの課題を作るにあたって、楽譜を見ることが多かったため音楽の知識があまりなかったことが非常に悔やまれた。

今回は電源の供給によって再生しているが、他の外部の入力の割り込み(例えばスイッチやキーボードなど)によって再生を開始できるようにしたり、またLCDに表示する歌詞がローマ字でしか出力できなかったので、これが日本語でも出力できるようになれば、より実用的になると考えられる。
さらに楽譜や歌詞などを外部のディスプレイなどに出力させれば、簡易的なカラオケが作れると考えられる。

  • 最終更新:2016-07-18 16:26:58

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

認証パスワード