チーム1332
課題名
ぼっちテニス
研究者名
2-15-25 齋藤 弾
2-15-47 中村 大
概要
LCDディスプレイに表示されるボールをラケット(加速度センサ)で実際に振って打ち返すゲーム。
ボールは左端で打ち返し、右端で反射して再び戻って来る。
ボールは2つあり、この2つは反射するタイミングが違うので注意。
打ち返した回数を得点とする。
跳ね返しとゲームオーバーで音が鳴るよ。
使用機器
PSoC 1個
三軸加速度(ジャイロ)センサ 1個
ジャンパ線 3本
スピーカー 1個
LCD 1個
ソースコード
#include <m8c.h>
#include "PSoCAPI.h"
#include "stdlib.h"
void main(){
int iResult1[4] = {0}; int ref; int px = 1, pa = 1; int px2 = 1, pa2 = 1; int score = 0; char ScoreData[3]; int count=0; int i, j; int startf = 0; LCD_1_Start();
PGA_1_Start(PGA_1_MEDPOWER); PGA_2_Start(PGA_2_MEDPOWER); PGA_3_Start(PGA_3_MEDPOWER);
M8C_EnableGInt; TRIADC_1_Start(TRIADC_1_HIGHPOWER); TRIADC_1_SetResolution(12); TRIADC_1_GetSamples(0); while(TRIADC_1_fIsDataAvailable() == 0); iResult1[0] = TRIADC_1_iGetData1(); iResult1[0] *= (5000/4096); while(startf == 0){ iResult1[1] = iResult1[0]; while(TRIADC_1_fIsDataAvailable() == 0); iResult1[0] = TRIADC_1_iGetData1(); iResult1[0] *= (5000/4096); ref = iResult1[0] - iResult1[1]; LCD_1_Position(0,px); LCD_1_PrCString("o"); LCD_1_Position(1,px2); LCD_1_PrCString("o"); LCD_1_Position(1,13); LCD_1_PrCString("|"); if(ref > 500){ startf = 1; } } while(startf == 1){ LCD_1_Control(0x01); iResult1[3] = iResult1[2]; iResult1[2] = iResult1[1]; iResult1[1] = iResult1[0]; while(TRIADC_1_fIsDataAvailable() == 0); iResult1[0] = TRIADC_1_iGetData1(); iResult1[0] *= (5000/4096); ref = iResult1[0] - iResult1[1]; for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ if(ref < iResult1[i] - iResult1[j]){ ref = iResult1[i] - iResult1[j]; } } } ref = iResult1[0] - iResult1[3]; LCD_1_Position(0,px); LCD_1_PrCString("o"); LCD_1_Position(1,px2); LCD_1_PrCString("o"); LCD_1_Position(1,13); LCD_1_PrCString("|"); if(px==15){ pa*=-1; } if(px==0 && ref > 150){ pa*=-1; score++; PWM8_1_Start(); } px+=pa; if(px2==12){pa2*=-1;} if(px2==0 && ref > 150){ pa2*=-1; score++; PWM8_1_Start(); } px2+=pa2; wait_ms(60); PWM8_1_Stop(); while(px<0| |px2<0){ LCD_1_Position(0,3); LCD_1_PrCString("GAMEOVER "); itoa(ScoreData,score,10); LCD_1_PrString(ScoreData); if(count==0){ PWM8_1_Start(); } count++; if(count>=1000){ PWM8_1_Stop(); } } }
}
void wait_ms(WORD ms){
for (; ms ;ms--) LCD_1_Delay50uTimes(20);
}
考察
三軸加速度センサは動きの速さを値として出力されると思ったが、実際に動かしてみるとセンサの傾きを値として出力していた。
なので、直前の値と現在の値の差をとって加速度を表現した。
wikiの編集面倒くさい
- 最終更新:2013-07-09 16:37:04