チーム1341

課題名

自宅でカラオケ?!

研究者名

佐藤 悠樹,佐野 友輝

概要[#a6651ac0]

1970年代から普及し始めたカラオケ文化。昨今では時代の高速化に伴いストレスを抱え、その発散の場として一人カラオケなども当たり前のように行われている。
そこで!そんな時代の需要に合わせ我々が今回開発したのは”自宅カラオケマシーン”!
これさえあれば自宅でカラオケを楽しめるという夢のアイテム!

使用した機材

・PSoC
・ジャンパー線×2
・通信用ケーブル
・スピーカー

仕様

キーボードから入力された記号によって流れる曲が決まる。曲の演奏に合わせて歌詞がLCDに表示されるので、それに合わせて歌の練習をすることが可能。
収録曲
A:Amazing Grace
B:未設定
C:未設定
………



ソースコード

#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,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115;
int TC=0;
int n=0;

void myISR(void)
{

if(n==1){
TC+=1;
PWM16_1_WritePulseWidth(PW);
if(TC==1){
LCD_1_Start();
LCD_1_PrCString("Amazing Grace.");
}
if(TC==25){
LCD_1_Start();
LCD_1_PrCString("how sweet");
}
if(TC==37){
LCD_1_Start();
LCD_1_PrCString("the sound");
}
if(TC==50){
LCD_1_Start();
LCD_1_PrCString("that sared");
}
if(TC==63){
LCD_1_Start();
LCD_1_PrCString("a wretch");
}
if(TC==75){
LCD_1_Start();
LCD_1_PrCString("like me");
}
if(TC==99){
LCD_1_Start();
LCD_1_PrCString("I once was lost");
}
if(TC==123){
LCD_1_Start();
LCD_1_PrCString("but now");
}
if(TC==135){
LCD_1_Start();
LCD_1_PrCString("I'm found");
}
if(TC==148){
LCD_1_Start();
LCD_1_PrCString("was blind");
}
if(TC==161){
LCD_1_Start();
LCD_1_PrCString("but now");
}
if(TC==173){
LCD_1_Start();
LCD_1_PrCString("I see");
}
if(TC==197){
LCD_1_Start();
LCD_1_PrCString("");
}


if(TC==1| |TC==41| |TC==50| |TC==139| |TC==148)
PWM16_1_WritePeriod(D);
else if(TC==37| |TC==135)
PWM16_1_WritePeriod(L);
else if(TC==3| |TC==5| |TC==15| |TC==27| |TC==29| |TC==52| |TC==55| |TC==65| |TC==113| |TC==127| |TC==150| |TC==153| |TC==163| |TC==177)
PWM16_1_WritePeriod(F);
else if(TC==14| |TC==25| |TC==64| |TC==75| |TC==112| |TC==123| |TC==162| |TC==173)
PWM16_1_WritePeriod(S);
else if(TC==13| |TC==17| |TC==63| |TC==67| |TC==77| |TC==99| |TC==111| |TC==115| |TC==161| |TC==165)
PWM16_1_WritePeriod(R);
else if(TC==79| |TC==101| |TC==103)
PWM16_1_WritePeriod(DD);
else if(TC==4| |TC==28| |TC==49| |TC==54| |TC==102| |TC==147| |TC==152| |TC==197)
PWM16_1_WritePeriod(SILENT);

if(TC==198)
TC=0;
}
/* ここに新たな曲を設定するときはif(n==2),if(n==3)…などの記述をしたのちに */
/* 曲のメロディや歌詞をタイムカウンタに合わせて入力すればよい。 */

}

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

void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   char*strPtr;
   UART_CmdReset();
   UART_IntCntl(UART_ENABLE_RX_INT);
   Counter8_WritePeriod(155);
   Counter8_WriteCompareValue(77);
   Counter8_Start();
   UART_Start(UART_PARITY_NONE);
   M8C_EnableGInt;
   PWM16_1_Start();
   UART_CPutString("\r\nWelcome to PSoC UART test program.V1.1\r\n");
   while(1){
       if(UART_bCmdCheck()){
           if(strPtr=UART_szGetParam()){
               UART_CPutString("Found valid command\r\nCommand =>");
               UART_PutString(strPtr);
               UART_CPutString("<\r\nParamaters:\r\n");
   
               if(*strPtr=='a'){
                   n=1;
                   main1();
               }
   
               UART_CmdReset();
           }
       }
   }
}

考察

今回使用したのは授業で学んだhello_world,pwm_uart_2,timer_pwm2の三つである。
当初はスピーカーを2つ接続して曲のメロディだけでなく伴奏も演奏させる仕様にする予定だったが、伴奏の楽譜が入手できなかったので断念した。
また、曲数も増やす予定だったが使用できる音が限られており発表に至るまでに曲を入力することが出来なかった。
だがこのPSoCを使うことで入力には時間と労力を奪われるものの、ある程度限られた音の範囲の曲なら演奏が可能であるということがわかった。

  • 最終更新:2013-10-22 15:55:20

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

認証パスワード