チーム1268
課題名
ジブリ音楽クイズ
研究者名
2年14組35番 新山 沙也加
2年14組36番 西角 知佳
概要
ランダムに流れるジブリの音楽を当てるクイズ。
TeraTerm上に選択肢が表示されるので、1~3のいずれかをキーボードから入力する。
答えられるのは3回。あなたはどれだけ答えられるか・・・
実行画面
ソースコード
#include <m8c.h>
#include <stdlib.h>
#include "PSoCAPI.h"
#pragma interrupt_handler myISR
int PW=125; // Pulse Width
int SILENT=0, D=229, L=204,M=182, F=172, S=153, R=136, C=121, DD=115, LL=102, MM=91, FF=86, SS=77;//Scale
int R1=129, S1 = 145;
int TC = 0; //Time Count
int n = 0;
void myISR(void){
if(n == 1){ TC += 1; PWM16_1_WritePulseWidth(PW); //千と千尋の神隠し if(TC == 1) PWM16_1_WritePeriod(F); else if(TC == 2) PWM16_1_WritePeriod(S); else if(TC == 3) PWM16_1_WritePeriod(R); else if(TC == 4) PWM16_1_WritePeriod(F); else if(TC == 5) PWM16_1_WritePeriod(DD); else if(TC == 8) PWM16_1_WritePeriod(R); else if(TC == 9) PWM16_1_WritePeriod(S); else if(TC == 11) PWM16_1_WritePeriod(DD); else if(TC == 13) PWM16_1_WritePeriod(S); else if(TC == 15) PWM16_1_WritePeriod(F); else if(TC == 16) PWM16_1_WritePeriod(L); else if(TC == 17) PWM16_1_WritePeriod(R); else if(TC == 20) PWM16_1_WritePeriod(F); else if(TC == 21) PWM16_1_WritePeriod(M); else if(TC == 23) PWM16_1_WritePeriod(SILENT); else if(TC == 24) return; } else if(n == 2){ TC += 1; PWM16_1_WritePulseWidth(PW); //となりのトトロ if(TC == 1) PWM16_1_WritePeriod(F); else if(TC == 2) PWM16_1_WritePeriod(S); else if(TC == 3) PWM16_1_WritePeriod(R); else if(TC == 4) PWM16_1_WritePeriod(R1); else if(TC == 5) PWM16_1_WritePeriod(DD); else if(TC == 6) PWM16_1_WritePeriod(SILENT); else if(TC == 7) PWM16_1_WritePeriod(R); else if(TC == 8) PWM16_1_WritePeriod(F); else if(TC == 9) PWM16_1_WritePeriod(SILENT); else if(TC == 10) PWM16_1_WritePeriod(DD); else if(TC == 11) PWM16_1_WritePeriod(SILENT); else if(TC == 12) PWM16_1_WritePeriod(R1); else if(TC == 14) PWM16_1_WritePeriod(S); else if(TC == 15) PWM16_1_WritePeriod(SILENT); else if(TC == 16) PWM16_1_WritePeriod(R1); else if(TC == 17) PWM16_1_WritePeriod(SILENT); else if(TC == 18) PWM16_1_WritePeriod(S); else if(TC == 19) PWM16_1_WritePeriod(M); else if(TC == 20) PWM16_1_WritePeriod(SILENT); else if(TC == 21) PWM16_1_WritePeriod(R1); else if(TC == 22) PWM16_1_WritePeriod(SILENT); else if(TC == 23) PWM16_1_WritePeriod(R); else if(TC == 25) PWM16_1_WritePeriod(F); else if(TC == 26) PWM16_1_WritePeriod(SILENT); else if(TC == 29) return; } else if(n == 3){ TC += 1; PWM16_1_WritePulseWidth(PW); // ラピュタ if(TC == 1) PWM16_1_WritePeriod(F); else if(TC == 2) PWM16_1_WritePeriod(S); else if(TC == 3) PWM16_1_WritePeriod(S1); else if(TC == 5) PWM16_1_WritePeriod(F); else if(TC == 6) PWM16_1_WritePeriod(S); else if(TC == 7) PWM16_1_WritePeriod(DD); else if(TC == 8) PWM16_1_WritePeriod(F); else if(TC == 11) PWM16_1_WritePeriod(SILENT); else if(TC == 12) PWM16_1_WritePeriod(L); else if(TC == 13) PWM16_1_WritePeriod(S); else if(TC == 15) PWM16_1_WritePeriod(F); else if(TC == 16) PWM16_1_WritePeriod(S); else if(TC == 17) PWM16_1_WritePeriod(S1); else if(TC == 18) PWM16_1_WritePeriod(F); else if(TC == 21) PWM16_1_WritePeriod(SILENT); else if(TC == 24) return; } }
void main(void) {
int i; char * strPtr; // Parameter pointer int random; int chihiro; int totoro; int mononoke; int q = 1; M8C_EnableGInt; // 出題順の決定 random = rand(); if(random % 6 == 0){ chihiro = 1; totoro = 2; mononoke = 3; } else if(random % 6 == 1){ chihiro = 1; totoro = 3; mononoke = 2; } else if(random % 6 == 2){ chihiro = 2; totoro = 1; mononoke = 3; } else if(random % 6 == 3){ chihiro = 2; totoro = 3; mononoke = 1; } else if(random % 6 == 4){ chihiro = 3; totoro = 1; mononoke = 2; } else if(random % 6 == 5){ chihiro = 3; totoro = 2; mononoke = 1; } PWM16_1_Start(); Timer16_1_EnableInt(); Timer16_1_Start(); UART_CmdReset(); // Initialize receiver/cmd buffer UART_IntCntl(UART_ENABLE_RX_INT); // Enable RX interrupts Counter8_WritePeriod(155); // Set up baud rate generator Counter8_WriteCompareValue(77); Counter8_Start(); // Turn on baud rate generator while(1){ // 1問目 if((q == 1 && chihiro == 1) | | (q == 2 && chihiro == 2) | | (q == 3 && chihiro == 3)){ n = 1; UART_Start(UART_PARITY_NONE); // Enable UART UART_CPutString("\r\n---------------------------------------------------\r\n"); UART_CPutString("\r\n"); UART_CPutString("何の曲名でしょう?\r\n"); UART_CPutString("1:やさしさに包まれたなら\r\n"); UART_CPutString("2:いつも何度でも\r\n"); UART_CPutString("3:いのちの名前\r\n"); UART_CPutString("\r\n"); while(1){ if(UART_bCmdCheck()) { if(strPtr = UART_szGetParam()) { UART_PutString(strPtr); UART_CPutString("\r\n"); // true if(atoi(strPtr) == 2){ UART_CPutString("正解!\r\n"); UART_CPutString("\r\n"); break; } // false else{ UART_CPutString("残念…\r\n"); UART_CPutString("\r\n"); break; } } UART_CmdReset(); } } q++; if (q == 4){ UART_CPutString("\r\n-----------------------END-------------------------\r\n"); break; } TC = 0; } // 第2問 else if ((q == 1 && totoro == 1) | | (q == 2 && totoro == 2) | | (q == 3 && totoro == 3)){ n = 2; UART_Start(UART_PARITY_NONE); // Enable UART UART_CPutString("\r\n---------------------------------------------------\r\n"); UART_CPutString("\r\n"); UART_CPutString("何の曲名でしょう?\r\n"); UART_CPutString("1:カントリー・ロード\r\n"); UART_CPutString("2:もののけ姫\r\n"); UART_CPutString("3:となりのトトロ\r\n"); UART_CPutString("\r\n"); while(1){ if(UART_bCmdCheck()) { if(strPtr = UART_szGetParam()) { UART_PutString(strPtr); UART_CPutString("\r\n"); // true if(atoi(strPtr) == 3){ UART_CPutString("正解!\r\n"); UART_CPutString("\r\n"); break; } // false else{ UART_CPutString("残念…\r\n"); UART_CPutString("\r\n"); break; } } UART_CmdReset(); } } q++; if (q == 4){ UART_CPutString("\r\n-----------------------END-------------------------\r\n"); break; } TC = 0; } // 第3問 else if((q == 1 && mononoke == 1) | | (q == 2 && mononoke == 2) | | (q == 3 && mononoke == 3)){ n = 3; UART_Start(UART_PARITY_NONE); // Enable UART UART_CPutString("\r\n---------------------------------------------------\r\n"); UART_CPutString("\r\n"); UART_CPutString("何の曲名でしょう?\r\n"); UART_CPutString("1:ラピュタ\r\n"); UART_CPutString("2:もののけ姫\r\n"); UART_CPutString("3:やさしさに包まれたなら\r\n"); UART_CPutString("\r\n"); while(1){ if(UART_bCmdCheck()) { if(strPtr = UART_szGetParam()) { UART_PutString(strPtr); UART_CPutString("\r\n"); // true if(atoi(strPtr) == 1){ UART_CPutString("正解!\r\n"); UART_CPutString("\r\n");
break; } // false else{ UART_CPutString("残念…\r\n"); UART_CPutString("\r\n");
break; } } UART_CmdReset(); } } q++; if (q == 4){ UART_CPutString("\r\n-----------------------END-------------------------\r\n"); break; } TC = 0; } }
}
考察
当初は光センサーを使用して、光の量によって流す音楽をランダムに変えるという仕様だった。
これを実現するには、uartとAD変換を両方実現しなくてはならず、その兼ね合いがうまくいかなかったため完成することはできなかった。
原因としてはユーザーモジュールの設定が挙げられる。
この代替として乱数発生にrand()を用いようとしたが、これもうまく機能せず毎回同じ出題順になってしまった。
光センサーに時間を要したため、音楽も3曲しか作成できなかった。
- 最終更新:2012-12-18 16:49:48