1D-Pong game based on a LED strip with 150 LPD6803-controlled pixels. Game keeps score for 'best-of-21' game. Written for KL25Z
Diff: main.cpp
- Revision:
- 12:97c71b84c984
- Parent:
- 11:fc80c39ba9f0
- Child:
- 13:e96098b6660d
--- a/main.cpp Thu Aug 22 07:11:27 2013 +0000 +++ b/main.cpp Thu Aug 22 22:35:36 2013 +0000 @@ -1,7 +1,8 @@ #include "mbed.h" - +#include "MODSERIAL.h" #define NUMBER_OF_PIXELS 50 #define PADDLE_LENGTH 5 +#define STARTING_SPEED 20 #define LEFT false #define RIGHT true @@ -16,6 +17,7 @@ uint16_t totalstrip[NUMBER_OF_PIXELS]; volatile int8_t paddlestart= 0; SPI ledstrip(PTD2,NC,PTD1); +MODSERIAL pc(USBTX,USBRX); class Paddle { @@ -24,7 +26,7 @@ // ~Paddle();//deconstructor int16_t position; uint8_t direction; - void setSpeed(float speed); + void setSpeed(float speed); //pixels per second void setColor(uint8_t red, uint8_t green, uint8_t blue); uint8_t getSize(void); void setSize(uint8_t size); @@ -130,15 +132,17 @@ Paddle paddle; bool leftpushed = false, rightpushed = false; - +int16_t leftpushpos= 0, rightpushpos = 0; void left_pushed(void) { + leftpushpos = paddle.position; if(paddle.direction != 1) leftpushed = true; } void right_pushed(void) { + rightpushpos = paddle.position; if(paddle.direction == 1) rightpushed = true; } @@ -146,49 +150,79 @@ int main() { Ticker updater; - Ticker demopaddlepos; + //Ticker demopaddlepos; Timer gametimer; InterruptIn buttonleft(PTD5); InterruptIn buttonright(PTD0); uint8_t ledcounter; uint8_t left_score = 0, right_score = 0; + pc.baud(115200); buttonleft.mode(PullUp); buttonright.mode(PullUp); buttonright.fall(right_pushed); buttonleft.fall(left_pushed); - updater.attach(UpdateLEDstrip, .01); - demopaddlepos.attach(UpdateDemoPaddle, .03); + updater.attach(UpdateLEDstrip, .03); + //demopaddlepos.attach(UpdateDemoPaddle, .03); ledstrip.format(8,0); //15 bits, mode '0' ledstrip.frequency(1000000); //1MHz clock for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++) {//turn off leds write_led(&totalstrip[ledcounter], 0,0,0); } paddle.setSize(6); - paddle.setSpeed(30); + paddle.setSpeed(STARTING_SPEED); paddle.setColor(255,0,255); gametimer.start(); while(1) { static uint8_t naglevel1 = 0, naglevel2 = 0; - DrawGamePaddle(); + //paddle.position = 48; + //while(1); if(paddle.direction == 1) { if(rightpushed) { + //printf("\n\rright pushed"); rightpushed = false; - if(paddle.position > (NUMBER_OF_PIXELS - paddle.getSize()) && paddle.position < NUMBER_OF_PIXELS) + if(rightpushpos >= NUMBER_OF_PIXELS && rightpushpos < (NUMBER_OF_PIXELS + paddle.getSize()) ) + { paddle.direction = 0; + paddle.position = NUMBER_OF_PIXELS; + } + pc.printf("\n\rright pushed. Paddle position: %d, registered: %d", paddle.position, rightpushpos); } } else { if(leftpushed) { + //printf("\n\rleft pushed"); leftpushed = false; - if(paddle.position > -paddle.getSize() && (paddle.position <= 0 ) ) + if(leftpushpos > -paddle.getSize() && (paddle.position <= 0 ) ) + { paddle.direction = 1; + paddle.position = 0; + } + pc.printf("\n\rleft pushed. Paddle position: %d, registered: %d", paddle.position, leftpushpos); } } - if(gametimer.read()>6 && !naglevel1) + if(paddle.position > ( NUMBER_OF_PIXELS + paddle.getSize() ) && (paddle.direction == 1)) + { + pc.printf("\n\rleft player score. Paddle position: %d", paddle.position); + //left player scores! + left_score++; + HandleScore(&left_score,&right_score,false, &gametimer); + paddle.position = -paddle.getSize(); + naglevel1=naglevel2 = 0; + } + if(paddle.position < -paddle.getSize() && (paddle.direction == 0)) + { + pc.printf("\n\rleft player score. Paddle position: %d", paddle.position); + //right player scores! + right_score++; + HandleScore(&left_score,&right_score,true, &gametimer); + naglevel1=naglevel2 = 0; + paddle.position = NUMBER_OF_PIXELS; + } + if(gametimer.read()>6 && !naglevel1) { naglevel1 = 1; paddle.setSize(4); @@ -200,22 +234,7 @@ paddle.setSize(2); paddle.setSpeed(70); } - if(paddle.position >= NUMBER_OF_PIXELS && (paddle.direction == 1)) - { - //left player scores! - left_score++; - HandleScore(&left_score,&right_score,false, &gametimer); - paddle.position = -paddle.getSize(); - naglevel1=naglevel2 = 0; - } - if(paddle.position < -paddle.getSize() && (paddle.direction == 0)) - { - //right player scores! - right_score++; - HandleScore(&left_score,&right_score,true, &gametimer); - naglevel1=naglevel2 = 0; - paddle.position = NUMBER_OF_PIXELS; - } + DrawGamePaddle(); } } @@ -231,30 +250,35 @@ } (*(mbed::Timer *)gametimer).reset(); paddle.setSize(6); - paddle.setSpeed(30); + paddle.setSpeed(STARTING_SPEED); } void DrawGamePaddle(void) { uint8_t ledcounter; + uint8_t colorpos; for(ledcounter = 0; ledcounter< NUMBER_OF_PIXELS; ledcounter++) { - if(ledcounter >= paddle.position && ledcounter <= paddle.position+paddle.getSize()) + if(paddle.direction == 1) { - uint8_t colorpos; - if(paddle.direction ==1) + if(ledcounter > paddle.position-paddle.getSize() && ledcounter <= paddle.position) { - colorpos = ledcounter-paddle.position; + colorpos = paddle.getSize()-(paddle.position - ledcounter);//paddle.getSize()-(ledcounter-paddle.position); write_led(&totalstrip[ledcounter],paddle.getColor(colorpos,0),paddle.getColor(colorpos,1),paddle.getColor(colorpos,2)); } else + write_led(&totalstrip[ledcounter], 0,0,0); + } + else + { + if(ledcounter >= paddle.position && ledcounter <= paddle.position+paddle.getSize()) { colorpos = paddle.getSize()-(ledcounter-paddle.position); write_led(&totalstrip[ledcounter],paddle.getColor(colorpos,0),paddle.getColor(colorpos,1),paddle.getColor(colorpos,2)); } + else + write_led(&totalstrip[ledcounter], 0,0,0); } - else - write_led(&totalstrip[ledcounter], 0,0,0); } }