チーム1831
課題名
電子ピアノ
研究者名
Hikaru Ohmuro
Aizawa Kazuhiro
Koki Tomita
Ryuto Kitamura
使用器具
ジャンパ線 2本
ストレート通信ケーブル
スピーカー
PSoCMiniProg
PSoC基盤
操作説明
キーボードのキーを押すと、それに対応した音がスピーカーから出力される。
a : ド w : ド# s : レ e : レ# d : ミ f : ファ t : ファ# g : ソ y : ソ# h : ラ u : ラ# j : シ k : ド l : 無音
< : 1オクターブ下げる > : 1オクターブ上げる ? : 最初に戻す
配線図
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW = 125;
double SILENT = 0, D = 229.34, L = 204.31, M = 182.02, F = 171.81, S = 153.06;
double R = 136.36, C = 121.49, DD = 114.67;
double Ds = 216.47, Ls = 192.85, Fs = 162.16, Ss = 144.47, Rs = 128.71;
void reset()
{
D = 229.34, L = 204.31, M = 182.02, F = 171.81, S = 153.06; R = 136.36, C = 121.49, DD = 114.67; Ds = 216.47, Ls = 192.85, Fs = 162.16, Ss = 144.47, Rs = 128.71;
}
void high()
{
D = DD; L = L/2; M = M/2; F = F/2; S = S/2; R = R/2; C = C/2; DD = DD/2; Ds = Ds/2; Ls = Ls/2; Fs = Fs/2; Ss = Ss/2; Rs = Rs/2;
}
void low()
{
DD = D; D = D*2; L = L*2; M = M*2; F = F*2; S = S*2; R = R*2; C = C*2; Ds = Ds*2; Ls = Ls*2; Fs = Fs*2; Ss = Ss*2; Rs = Rs*2;
}
void main(void)
{
// 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(strPtr = UART_szGetParam()){ UART_CPutString("Found valid command\r\nCommand =>"); UART_PutString(strPtr); UART_CPutString("<\r\nParamaters:\r\n"); if(*strPtr == 'a') PWM16_1_WritePeriod(D); else if(*strPtr == 's') PWM16_1_WritePeriod(L); else if(*strPtr == 'd') PWM16_1_WritePeriod(M); else if(*strPtr == 'f') PWM16_1_WritePeriod(F); else if(*strPtr == 'g') PWM16_1_WritePeriod(S); else if(*strPtr == 'h') PWM16_1_WritePeriod(R); else if(*strPtr == 'j') PWM16_1_WritePeriod(C); else if(*strPtr == 'k') PWM16_1_WritePeriod(DD); else if(*strPtr == 'l') PWM16_1_WritePeriod(SILENT); else if(*strPtr == 'w') PWM16_1_WritePeriod(Ds); else if(*strPtr == 'e') PWM16_1_WritePeriod(Ls); else if(*strPtr == 't') PWM16_1_WritePeriod(Fs); else if(*strPtr == 'y') PWM16_1_WritePeriod(Ss); else if(*strPtr == 'u') PWM16_1_WritePeriod(Rs); else if(*strPtr == '.') high(); else if(*strPtr == ',') low(); else if(*strPtr == '/') reset(); } UART_CmdReset(); } }
考察
課題pwm_uart_2の内容を、回路図をそのままにしてメイン文を改良した。
キーボード入力をしたときに、入力判定がされず、音がスムーズに切り替わらない時が多く見られた。これは原因が不明で、理由が多く考えられた。一つにパソコン自体の不良。二つ目にキーボードがチャタリングを起こしている可能性がある。三つ目に通信速度が38400と高く設定されていたため、うまくキー入力の結果を受信できなかったこと。原因が特定できなかったことにより、改善できなかった。
また、本当は追加コードとしてキーを押している間のみ音を出すようにするコードを実装したかったのだが、難易度が高く、断念した。
- 最終更新:2018-07-10 16:30:44