チーム1567
課題名
スロットゲーム
研究者名
Yuumi Matsuoka
Kouki Wada
概要・仕様
1から3までの数字がランダムに変化する数字をLCD上に3つ用意し、
スイッチボタンを押せば、一つ数字が止まる。
その3つの数字がそろえば、CONGURATULATION!とその下に表示され、
スピーカーから音楽が流れる。
また、そろった数字ごとに流れる音楽が違う仕様になっており、
1がそろった場合はキラキラ星、
2がそろった場合はカエルの歌、
3がそろった場合はドレミの歌が流れる。
使用機材
・PSoC基盤×1
・ジャンパー線×2
・MiniProg×1
・スピーカー×1
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
#include <stdio.h>
#include <stdlib.h>
#define SW 0b00010000
#define DIVIDE 3
int PW = 125;
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115,LL=102,MM=91;
int TC=0;
int n=0;
void myISR(void){
TC += 1;
きらきら星
if(n == 1){ PWM16_1_WritePulseWidth(PW); if(TC==2) PWM16_1_WritePeriod(D); else if(TC==4) PWM16_1_WritePeriod(SILENT); else if(TC==5) PWM16_1_WritePeriod(D); else if(TC==7) PWM16_1_WritePeriod(SILENT); else if(TC==8) PWM16_1_WritePeriod(S); else if(TC==10) PWM16_1_WritePeriod(SILENT); else if(TC==11) PWM16_1_WritePeriod(S); else if(TC==13) PWM16_1_WritePeriod(SILENT); else if(TC==14) PWM16_1_WritePeriod(R); else if(TC==16) PWM16_1_WritePeriod(SILENT); else if(TC==17) PWM16_1_WritePeriod(R); else if(TC==19) PWM16_1_WritePeriod(SILENT); else if(TC==20) PWM16_1_WritePeriod(S); else if(TC==25) PWM16_1_WritePeriod(SILENT); else if(TC==26) PWM16_1_WritePeriod(F); else if(TC==28) PWM16_1_WritePeriod(SILENT); else if(TC==29) PWM16_1_WritePeriod(F); else if(TC==31) PWM16_1_WritePeriod(SILENT); else if(TC==32) PWM16_1_WritePeriod(M); else if(TC==34) PWM16_1_WritePeriod(SILENT); else if(TC==35) PWM16_1_WritePeriod(M); else if(TC==37) PWM16_1_WritePeriod(SILENT); else if(TC==38) PWM16_1_WritePeriod(L); else if(TC==40) PWM16_1_WritePeriod(SILENT); else if(TC==41) PWM16_1_WritePeriod(L); else if(TC==43) PWM16_1_WritePeriod(SILENT); else if(TC==44) PWM16_1_WritePeriod(D); else if(TC==49) PWM16_1_WritePeriod(SILENT); }
カエルの歌
else if (n == 2){ PWM16_1_WritePulseWidth(PW); if(TC==2) PWM16_1_WritePeriod(D); else if(TC==4) PWM16_1_WritePeriod(SILENT); else if(TC==5) PWM16_1_WritePeriod(L); else if(TC==7) PWM16_1_WritePeriod(SILENT); else if(TC==8) PWM16_1_WritePeriod(M); else if(TC==10) PWM16_1_WritePeriod(SILENT); else if(TC==11) PWM16_1_WritePeriod(F); else if(TC==13) PWM16_1_WritePeriod(SILENT); else if(TC==14) PWM16_1_WritePeriod(M); else if(TC==16) PWM16_1_WritePeriod(SILENT); else if(TC==17) PWM16_1_WritePeriod(L); else if(TC==19) PWM16_1_WritePeriod(SILENT); else if(TC==20) PWM16_1_WritePeriod(D); else if(TC==25) PWM16_1_WritePeriod(SILENT); else if(TC==26) PWM16_1_WritePeriod(M); else if(TC==28) PWM16_1_WritePeriod(SILENT); else if(TC==29) PWM16_1_WritePeriod(F); else if(TC==31) PWM16_1_WritePeriod(SILENT); else if(TC==32) PWM16_1_WritePeriod(S); else if(TC==34) PWM16_1_WritePeriod(SILENT); else if(TC==35) PWM16_1_WritePeriod(R); else if(TC==37) PWM16_1_WritePeriod(SILENT); else if(TC==38) PWM16_1_WritePeriod(S); else if(TC==40) PWM16_1_WritePeriod(SILENT); else if(TC==41) PWM16_1_WritePeriod(F); else if(TC==43) PWM16_1_WritePeriod(SILENT); else if(TC==44) PWM16_1_WritePeriod(M); else if(TC==49) PWM16_1_WritePeriod(SILENT); }
ドレミの歌
else if(n == 3){ PWM16_1_WritePulseWidth(PW); if(TC==2) PWM16_1_WritePeriod(D); else if(TC==5) PWM16_1_WritePeriod(L); else if(TC==6) PWM16_1_WritePeriod(M); else if(TC==8) PWM16_1_WritePeriod(SILENT); else if(TC==9) PWM16_1_WritePeriod(D); else if(TC==10) PWM16_1_WritePeriod(M); else if(TC==12) PWM16_1_WritePeriod(D); else if(TC==14) PWM16_1_WritePeriod(M); else if(TC==17) PWM16_1_WritePeriod(SILENT); else if(TC==18) PWM16_1_WritePeriod(L); else if(TC==21) PWM16_1_WritePeriod(M); else if(TC==22) PWM16_1_WritePeriod(F); else if(TC==23) PWM16_1_WritePeriod(F); else if(TC==24) PWM16_1_WritePeriod(M); else if(TC==25) PWM16_1_WritePeriod(L); else if(TC==26) PWM16_1_WritePeriod(F); else if(TC==31) PWM16_1_WritePeriod(SILENT); }
}
音楽が流れるかの確認用の関数
void slot_test(void){
//int sl[3] = {1,1,1}; //int sl[3] = {2,2,2}; int sl[3]={3,3,3}; char str0[5],str1[5],str2[5]; M8C_EnableGInt; Timer16_1_EnableInt(); LCD_1_Start(); PWM16_1_Start(); PRT1DR &= (~SW); csprintf(str0,"%d",sl[0]); csprintf(str1,"%d",sl[1]); csprintf(str2,"%d",sl[2]); LCD_1_PrString(str0); LCD_1_PrCString(" "); LCD_1_PrString(str1); LCD_1_PrCString(" "); LCD_1_PrString(str2); while(1){ if(PRT1DR && SW) break; } if(sl[0] == 1 && sl[1] == 1 && sl[2] == 1){ //割り込み、音鳴らす,LCD n = 1; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; } if(sl[0] == 2 && sl[1] == 2 && sl[2] == 2){ //割り込み、音鳴らす,LCD n=2; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; } if(sl[0] == 3 && sl[1] == 3 && sl[2] == 3){ //割り込み、音鳴らす,LCD n=3; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; }
}
void slot(void){
int sl[3]; int flag = 0,tcc = 0,flag_2 = 0; char str0[5],str1[5],str2[5]; M8C_EnableGInt; Timer16_1_EnableInt(); LCD_1_Start(); PWM16_1_Start();
PRT1DR &= (~SW); while(1){ LCD_1_Start(); tcc = 0; sl[0] = rand() % DIVIDE +1; sl[1] = rand() % DIVIDE +1; sl[2] = rand() % DIVIDE +1;
csprintf(str0,"%d",sl[0]); csprintf(str1,"%d",sl[1]); csprintf(str2,"%d",sl[2]); LCD_1_PrString(str0); LCD_1_PrCString(" "); LCD_1_PrString(str1); LCD_1_PrCString(" "); LCD_1_PrString(str2); while(tcc < 10000){ tcc ++; if(PRT1DR & SW){ flag = 1; break; } } if(flag == 1) break; }
while(1){ LCD_1_Start(); tcc = 0; sl[1] = rand() % DIVIDE +1; sl[2] = rand() % DIVIDE +1; csprintf(str1,"%d",sl[1]); csprintf(str2,"%d",sl[2]); LCD_1_PrString(str0); LCD_1_PrCString(" "); LCD_1_PrString(str1); LCD_1_PrCString(" "); LCD_1_PrString(str2); if(PRT1DR == 0b00000000) flag = 0; while(tcc < 10000){ tcc ++; if(PRT1DR && SW && flag == 0){ flag_2 = 1; break; } } if(flag_2 == 1) break; } while(1){ LCD_1_Start(); tcc = 0; sl[2] = rand() % DIVIDE +1; csprintf(str2,"%d",sl[2]); LCD_1_PrString(str0); LCD_1_PrCString(" "); LCD_1_PrString(str1); LCD_1_PrCString(" "); LCD_1_PrString(str2); if(PRT1DR == 0b00000000) flag_2 = 0; while(tcc < 10000){ tcc ++; if(PRT1DR && SW && flag_2 == 0){ flag = 1; break; } } if(flag == 1) break; } if(sl[0] == 1 && sl[1] == 1 && sl[2] == 1){ //割り込み、音鳴らす,LCD n = 1; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; } if(sl[0] == 2 && sl[1] == 2 && sl[2] == 2){ //割り込み、音鳴らす,LCD n = 2; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; } if(sl[0] == 3 && sl[1] == 3 && sl[2] == 3){ //割り込み、音鳴らす,LCD n = 3; Timer16_1_Start(); LCD_1_Position(1,0); LCD_1_PrCString("CONGURATULATION!"); while(1){}; }
}
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. slot(); //slot_test(); while(1){};
}
考察
153Bのソースコードを参照し、そろった際の音楽の追加、LCDの表示などを拡張
した。
今回初めはボタンを3つに増やし、それぞれ数字を別々に止めれるようにしたかっ
たが、時間の都合上できなかった。おそらく、シリアル通信を使うことで、キー
ボード入力にでき、ボタンを増やせるかと考えられる。
また、今回私たちが作ったソースコードでは、数字のランダムが1から3の時だけ、
数字がそろった際音楽が流れるが、ランダムの数字を増やしても音楽がそれぞれ
別に流れるようにすればさらに良いかと思われる。
- 最終更新:2015-12-22 16:02:16