チーム1332

課題名

ぼっちテニス

研究者名

2-15-25 齋藤 弾
2-15-47 中村 大

概要

LCDディスプレイに表示されるボールをラケット(加速度センサ)で実際に振って打ち返すゲーム。
ボールは左端で打ち返し、右端で反射して再び戻って来る。
ボールは2つあり、この2つは反射するタイミングが違うので注意。
打ち返した回数を得点とする。
跳ね返しとゲームオーバーで音が鳴るよ。
photo1.jpg

photo2.jpg

使用機器

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

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

認証パスワード