First Last / Mbed 2 deprecated 1D-Pong

Dependencies:   MODSERIAL mbed

Files at this revision

API Documentation at this revision

Comitter:
vsluiter
Date:
Thu Aug 22 22:35:36 2013 +0000
Parent:
11:fc80c39ba9f0
Child:
13:e96098b6660d
Commit message:
Somehow the ledstrip registers paddle at wrong spot?

Changed in this revision

MODSERIAL.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Thu Aug 22 22:35:36 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MODSERIAL/#9a41078f0488
--- 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);
     }
 }