1D-Pong game based on a LED strip with 150 LPD6803-controlled pixels. Game keeps score for 'best-of-21' game. Written for KL25Z

Dependencies:   MODSERIAL mbed

Committer:
vsluiter
Date:
Tue Sep 03 22:30:16 2013 +0000
Revision:
25:3144a392690b
Parent:
24:2b14f846cf28
Child:
26:448ee3b0b481
GOGBOT PRODUCTION;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:cde34c55fa20 1 #include "mbed.h"
vsluiter 12:97c71b84c984 2 #include "MODSERIAL.h"
vsluiter 21:a554229e884b 3 #include "paddle.h"
vsluiter 21:a554229e884b 4 #include "GameButton.h"
vsluiter 0:cde34c55fa20 5 #define NUMBER_OF_PIXELS 50
vsluiter 0:cde34c55fa20 6 #define PADDLE_LENGTH 5
vsluiter 25:3144a392690b 7 #define START_SPEED 19
vsluiter 25:3144a392690b 8 #define SPEED_FACTOR 6
vsluiter 2:d2f8772a8db5 9 #define LEFT false
vsluiter 2:d2f8772a8db5 10 #define RIGHT true
vsluiter 5:d2e819018807 11
vsluiter 0:cde34c55fa20 12 void Randomblinks(float seconds, bool colored = false);
vsluiter 0:cde34c55fa20 13 void PaddleDemo(float seconds, uint8_t red, uint8_t green, uint8_t blue);
vsluiter 1:7a2ec350cdf5 14 void WinLoose(float seconds, bool side);
vsluiter 5:d2e819018807 15 void UpdateDemoPaddle(void);
vsluiter 2:d2f8772a8db5 16 void Score(uint8_t left, uint8_t right);
vsluiter 5:d2e819018807 17 void DrawGamePaddle(void);
vsluiter 9:c5086fe3c0cc 18 void HandleScore(uint8_t *, uint8_t *, bool, Timer *);
vsluiter 16:f0176e9e4a9d 19 void DrawLine(uint8_t start, uint8_t end, uint8_t red, uint8_t green, uint8_t blue);
vsluiter 0:cde34c55fa20 20 uint16_t totalstrip[NUMBER_OF_PIXELS];
vsluiter 0:cde34c55fa20 21 volatile int8_t paddlestart= 0;
vsluiter 18:789e9fafa5f6 22 bool strip_drawable = true;
vsluiter 0:cde34c55fa20 23 SPI ledstrip(PTD2,NC,PTD1);
vsluiter 25:3144a392690b 24 MODSERIAL pc(PTA2,PTA1);
vsluiter 0:cde34c55fa20 25
vsluiter 18:789e9fafa5f6 26 Paddle paddle;
vsluiter 18:789e9fafa5f6 27
vsluiter 17:c5a38d01dfbe 28 class PongGameButton : public GameButton
vsluiter 17:c5a38d01dfbe 29 {
vsluiter 17:c5a38d01dfbe 30 public:
vsluiter 18:789e9fafa5f6 31 PongGameButton(PinName name, float time);
vsluiter 18:789e9fafa5f6 32 void pushhandlercallback(void);
vsluiter 18:789e9fafa5f6 33 int16_t paddlepos;
vsluiter 17:c5a38d01dfbe 34 };
vsluiter 17:c5a38d01dfbe 35
vsluiter 21:a554229e884b 36 PongGameButton::PongGameButton(PinName name, float time) : GameButton(name, time)
vsluiter 18:789e9fafa5f6 37 {
vsluiter 18:789e9fafa5f6 38 paddlepos = 0;
vsluiter 18:789e9fafa5f6 39 }
vsluiter 18:789e9fafa5f6 40
vsluiter 18:789e9fafa5f6 41 void PongGameButton::pushhandlercallback(void)
vsluiter 18:789e9fafa5f6 42 {
vsluiter 18:789e9fafa5f6 43 paddlepos = paddle.position;
vsluiter 18:789e9fafa5f6 44 }
vsluiter 18:789e9fafa5f6 45
vsluiter 0:cde34c55fa20 46 void UpdateLEDstrip(void)
vsluiter 0:cde34c55fa20 47 {
vsluiter 0:cde34c55fa20 48 uint8_t pixelcounter;
vsluiter 18:789e9fafa5f6 49 if(strip_drawable)
vsluiter 18:789e9fafa5f6 50 {
vsluiter 18:789e9fafa5f6 51 /*start by writing 32 zeroes */
vsluiter 18:789e9fafa5f6 52 ledstrip.write(0);
vsluiter 18:789e9fafa5f6 53 ledstrip.write(0);
vsluiter 18:789e9fafa5f6 54 ledstrip.write(0);
vsluiter 18:789e9fafa5f6 55 ledstrip.write(0);
vsluiter 18:789e9fafa5f6 56 for(pixelcounter = 0 ; pixelcounter < NUMBER_OF_PIXELS; pixelcounter++) {
vsluiter 18:789e9fafa5f6 57 ledstrip.write( uint8_t(totalstrip[pixelcounter]>>8));//uint8_t(temp16));//(totalstrip.ledcounter[pixelcounter].red << 2) | (totalstrip.ledcounter[pixelcounter].high << 7) |(totalstrip.ledcounter[pixelcounter].green & 0x << 2) );
vsluiter 18:789e9fafa5f6 58 ledstrip.write( uint8_t(totalstrip[pixelcounter]));//(*(uint16_t *)(&totalstrip[pixelcounter]))>>8);
vsluiter 18:789e9fafa5f6 59 }
vsluiter 18:789e9fafa5f6 60 }
vsluiter 0:cde34c55fa20 61 }
vsluiter 0:cde34c55fa20 62
vsluiter 0:cde34c55fa20 63 void write_led(uint16_t * led, uint8_t red, uint8_t green, uint8_t blue)
vsluiter 0:cde34c55fa20 64 {
vsluiter 0:cde34c55fa20 65 *led = (1<<15) | ((green >> 3)<<10) | ((red >>3)<< 5) | (blue >>3);
vsluiter 0:cde34c55fa20 66 }
vsluiter 5:d2e819018807 67
vsluiter 18:789e9fafa5f6 68
vsluiter 18:789e9fafa5f6 69 bool rightpushed = false;
vsluiter 18:789e9fafa5f6 70 int16_t rightpushpos = 0;
vsluiter 6:c2040b4cf589 71
vsluiter 6:c2040b4cf589 72 void right_pushed(void)
vsluiter 6:c2040b4cf589 73 {
vsluiter 12:97c71b84c984 74 rightpushpos = paddle.position;
vsluiter 8:f46db1ff5ec9 75 if(paddle.direction == 1)
vsluiter 6:c2040b4cf589 76 rightpushed = true;
vsluiter 6:c2040b4cf589 77 }
vsluiter 5:d2e819018807 78
vsluiter 0:cde34c55fa20 79 int main()
vsluiter 0:cde34c55fa20 80 {
vsluiter 0:cde34c55fa20 81 Ticker updater;
vsluiter 12:97c71b84c984 82 //Ticker demopaddlepos;
vsluiter 8:f46db1ff5ec9 83 Timer gametimer;
vsluiter 20:a63273c11af0 84 PongGameButton buttonleft(PTD0,1);
vsluiter 20:a63273c11af0 85 PongGameButton buttonright(PTD5, 1);
vsluiter 0:cde34c55fa20 86 uint8_t ledcounter;
vsluiter 8:f46db1ff5ec9 87 uint8_t left_score = 0, right_score = 0;
vsluiter 12:97c71b84c984 88 pc.baud(115200);
vsluiter 12:97c71b84c984 89 updater.attach(UpdateLEDstrip, .03);
vsluiter 0:cde34c55fa20 90 ledstrip.format(8,0); //15 bits, mode '0'
vsluiter 11:fc80c39ba9f0 91 ledstrip.frequency(1000000); //1MHz clock
vsluiter 4:119537f0ff8e 92 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++) {//turn off leds
vsluiter 0:cde34c55fa20 93 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 94 }
vsluiter 5:d2e819018807 95 paddle.setSize(6);
vsluiter 22:a7619f315c0e 96 paddle.setSpeed(START_SPEED);
vsluiter 5:d2e819018807 97 paddle.setColor(255,0,255);
vsluiter 22:a7619f315c0e 98 paddle.position = NUMBER_OF_PIXELS/2;
vsluiter 9:c5086fe3c0cc 99 gametimer.start();
vsluiter 0:cde34c55fa20 100 while(1) {
vsluiter 10:6f9624c7425d 101 static uint8_t naglevel1 = 0, naglevel2 = 0;
vsluiter 12:97c71b84c984 102 //paddle.position = 48;
vsluiter 12:97c71b84c984 103 //while(1);
vsluiter 18:789e9fafa5f6 104 strip_drawable = false;
vsluiter 16:f0176e9e4a9d 105 DrawGamePaddle();
vsluiter 18:789e9fafa5f6 106 if(buttonleft.getTimeoutActive())
vsluiter 19:bb0179b9043f 107 DrawLine(0,1,0,0,255);
vsluiter 18:789e9fafa5f6 108 if(buttonright.getTimeoutActive())
vsluiter 19:bb0179b9043f 109 DrawLine(NUMBER_OF_PIXELS-1, NUMBER_OF_PIXELS,0,0,255);
vsluiter 18:789e9fafa5f6 110 strip_drawable = true;
vsluiter 18:789e9fafa5f6 111 if(buttonleft.pushflag || buttonright.pushflag)
vsluiter 6:c2040b4cf589 112 {
vsluiter 13:e96098b6660d 113 if(paddle.direction == 1)
vsluiter 6:c2040b4cf589 114 {
vsluiter 18:789e9fafa5f6 115 if(buttonright.pushflag)
vsluiter 12:97c71b84c984 116 {
vsluiter 13:e96098b6660d 117 //printf("\n\rright pushed");
vsluiter 22:a7619f315c0e 118 pc.printf("R\n\r");
vsluiter 18:789e9fafa5f6 119 buttonright.pushflag = false;
vsluiter 18:789e9fafa5f6 120 if(buttonright.paddlepos >= NUMBER_OF_PIXELS-1 ) //also count when hit at last pixel = NUMBER_OF_PIXELS-1
vsluiter 13:e96098b6660d 121 {
vsluiter 13:e96098b6660d 122 paddle.direction = 0;
vsluiter 22:a7619f315c0e 123 paddle.setSpeed(START_SPEED+(buttonright.paddlepos-(NUMBER_OF_PIXELS-1))*SPEED_FACTOR);
vsluiter 18:789e9fafa5f6 124 paddle.position = NUMBER_OF_PIXELS-2;
vsluiter 13:e96098b6660d 125 }
vsluiter 22:a7619f315c0e 126 //pc.printf("\n\rright pushed. Paddle position: %d, registered: %d, speed: %", paddle.position, buttonright.paddlepos,paddle.getSpeed());
vsluiter 12:97c71b84c984 127 }
vsluiter 18:789e9fafa5f6 128 buttonleft.pushflag = false;
vsluiter 13:e96098b6660d 129 }
vsluiter 13:e96098b6660d 130 else
vsluiter 13:e96098b6660d 131 {
vsluiter 18:789e9fafa5f6 132 if(buttonleft.pushflag)
vsluiter 13:e96098b6660d 133 {
vsluiter 13:e96098b6660d 134 //printf("\n\rleft pushed");
vsluiter 22:a7619f315c0e 135 pc.printf("L\n\r");
vsluiter 18:789e9fafa5f6 136 buttonleft.pushflag = false;
vsluiter 18:789e9fafa5f6 137 if(buttonleft.paddlepos <= 0 )
vsluiter 13:e96098b6660d 138 {
vsluiter 13:e96098b6660d 139 paddle.direction = 1;
vsluiter 22:a7619f315c0e 140 paddle.setSpeed(START_SPEED+(-buttonleft.paddlepos)*SPEED_FACTOR);
vsluiter 13:e96098b6660d 141 paddle.position = 0;
vsluiter 13:e96098b6660d 142 }
vsluiter 22:a7619f315c0e 143 //pc.printf("\n\rleft pushed. Paddle position: %d, registered: %d, speed %d", paddle.position, buttonleft.paddlepos, paddle.getSpeed());
vsluiter 13:e96098b6660d 144 }
vsluiter 18:789e9fafa5f6 145 buttonright.pushflag = false;
vsluiter 6:c2040b4cf589 146 }
vsluiter 6:c2040b4cf589 147 }
vsluiter 5:d2e819018807 148 else
vsluiter 13:e96098b6660d 149 {
vsluiter 13:e96098b6660d 150 if(paddle.position > ( NUMBER_OF_PIXELS + paddle.getSize() ) && (paddle.direction == 1))
vsluiter 6:c2040b4cf589 151 {
vsluiter 22:a7619f315c0e 152 //pc.printf("\n\rleft player score. Paddle position: %d", paddle.position);
vsluiter 13:e96098b6660d 153 //left player scores!
vsluiter 13:e96098b6660d 154 left_score++;
vsluiter 22:a7619f315c0e 155 pc.printf("S:%2d:%2d\n\r",left_score,right_score);
vsluiter 13:e96098b6660d 156 naglevel1=naglevel2 = 0;
vsluiter 25:3144a392690b 157 HandleScore(&left_score,&right_score,false, &gametimer);
vsluiter 19:bb0179b9043f 158 buttonright.pushflag = false;
vsluiter 19:bb0179b9043f 159 buttonleft.pushflag = false;
vsluiter 6:c2040b4cf589 160 }
vsluiter 13:e96098b6660d 161 if(paddle.position < -paddle.getSize() && (paddle.direction == 0))
vsluiter 13:e96098b6660d 162 {
vsluiter 22:a7619f315c0e 163 //pc.printf("\n\rright player score. Paddle position: %d", paddle.position);
vsluiter 13:e96098b6660d 164 //right player scores!
vsluiter 13:e96098b6660d 165 right_score++;
vsluiter 22:a7619f315c0e 166 pc.printf("S:%2d:%2d\n\r",left_score,right_score);
vsluiter 13:e96098b6660d 167 naglevel1=naglevel2 = 0;
vsluiter 25:3144a392690b 168 HandleScore(&left_score,&right_score,true, &gametimer);
vsluiter 19:bb0179b9043f 169 buttonright.pushflag = false;
vsluiter 19:bb0179b9043f 170 buttonleft.pushflag = false;
vsluiter 13:e96098b6660d 171 }
vsluiter 12:97c71b84c984 172 }
vsluiter 15:72c494e934c8 173 if(gametimer.read()>10 && !naglevel1)
vsluiter 9:c5086fe3c0cc 174 {
vsluiter 10:6f9624c7425d 175 naglevel1 = 1;
vsluiter 19:bb0179b9043f 176 paddle.setSize(8);
vsluiter 14:5b588ea6bd8f 177 //paddle.setSpeed(40);
vsluiter 9:c5086fe3c0cc 178 }
vsluiter 15:72c494e934c8 179 if(gametimer.read()>15 && !naglevel2)
vsluiter 9:c5086fe3c0cc 180 {
vsluiter 10:6f9624c7425d 181 naglevel2 = 1;
vsluiter 21:a554229e884b 182 paddle.setSize(10);
vsluiter 14:5b588ea6bd8f 183 //paddle.setSpeed(70);
vsluiter 9:c5086fe3c0cc 184 }
vsluiter 25:3144a392690b 185 wait(0.01);
vsluiter 0:cde34c55fa20 186 }
vsluiter 0:cde34c55fa20 187 }
vsluiter 0:cde34c55fa20 188
vsluiter 9:c5086fe3c0cc 189 void HandleScore(uint8_t *leftscore, uint8_t *rightscore, bool last_won, Timer *gametimer)
vsluiter 9:c5086fe3c0cc 190 {
vsluiter 10:6f9624c7425d 191 WinLoose(1.5, last_won);
vsluiter 9:c5086fe3c0cc 192 Score(*leftscore, *rightscore);
vsluiter 9:c5086fe3c0cc 193 if(*leftscore + *rightscore == 11)
vsluiter 9:c5086fe3c0cc 194 {
vsluiter 23:861ceaca2518 195 pc.printf("EOG\n\r");
vsluiter 9:c5086fe3c0cc 196 *leftscore = 0;
vsluiter 9:c5086fe3c0cc 197 *rightscore = 0;
vsluiter 19:bb0179b9043f 198 Randomblinks(5,false);
vsluiter 23:861ceaca2518 199 pc.printf("S: 0: 0\n\r");
vsluiter 9:c5086fe3c0cc 200 }
vsluiter 9:c5086fe3c0cc 201 (*(mbed::Timer *)gametimer).reset();
vsluiter 9:c5086fe3c0cc 202 paddle.setSize(6);
vsluiter 22:a7619f315c0e 203 (rand()%20)>10?paddle.direction = 1:paddle.direction = 0;
vsluiter 22:a7619f315c0e 204 paddle.setSpeed(START_SPEED);
vsluiter 22:a7619f315c0e 205 paddle.position = NUMBER_OF_PIXELS/2;
vsluiter 9:c5086fe3c0cc 206 }
vsluiter 9:c5086fe3c0cc 207
vsluiter 5:d2e819018807 208 void DrawGamePaddle(void)
vsluiter 5:d2e819018807 209 {
vsluiter 5:d2e819018807 210 uint8_t ledcounter;
vsluiter 12:97c71b84c984 211 uint8_t colorpos;
vsluiter 5:d2e819018807 212 for(ledcounter = 0; ledcounter< NUMBER_OF_PIXELS; ledcounter++)
vsluiter 5:d2e819018807 213 {
vsluiter 12:97c71b84c984 214 if(paddle.direction == 1)
vsluiter 5:d2e819018807 215 {
vsluiter 12:97c71b84c984 216 if(ledcounter > paddle.position-paddle.getSize() && ledcounter <= paddle.position)
vsluiter 5:d2e819018807 217 {
vsluiter 12:97c71b84c984 218 colorpos = paddle.getSize()-(paddle.position - ledcounter);//paddle.getSize()-(ledcounter-paddle.position);
vsluiter 5:d2e819018807 219 write_led(&totalstrip[ledcounter],paddle.getColor(colorpos,0),paddle.getColor(colorpos,1),paddle.getColor(colorpos,2));
vsluiter 5:d2e819018807 220 }
vsluiter 5:d2e819018807 221 else
vsluiter 12:97c71b84c984 222 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 12:97c71b84c984 223 }
vsluiter 12:97c71b84c984 224 else
vsluiter 12:97c71b84c984 225 {
vsluiter 12:97c71b84c984 226 if(ledcounter >= paddle.position && ledcounter <= paddle.position+paddle.getSize())
vsluiter 5:d2e819018807 227 {
vsluiter 5:d2e819018807 228 colorpos = paddle.getSize()-(ledcounter-paddle.position);
vsluiter 5:d2e819018807 229 write_led(&totalstrip[ledcounter],paddle.getColor(colorpos,0),paddle.getColor(colorpos,1),paddle.getColor(colorpos,2));
vsluiter 5:d2e819018807 230 }
vsluiter 12:97c71b84c984 231 else
vsluiter 12:97c71b84c984 232 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 5:d2e819018807 233 }
vsluiter 5:d2e819018807 234 }
vsluiter 5:d2e819018807 235 }
vsluiter 5:d2e819018807 236
vsluiter 2:d2f8772a8db5 237 void Score(uint8_t left, uint8_t right)
vsluiter 2:d2f8772a8db5 238 {
vsluiter 2:d2f8772a8db5 239 uint8_t maxscore;
vsluiter 2:d2f8772a8db5 240 int8_t ledcounter;
vsluiter 2:d2f8772a8db5 241 uint8_t scorecounter;
vsluiter 3:a2b58da5c03b 242 typedef struct ledcolor
vsluiter 3:a2b58da5c03b 243 {
vsluiter 3:a2b58da5c03b 244 uint8_t red;
vsluiter 3:a2b58da5c03b 245 uint8_t green;
vsluiter 3:a2b58da5c03b 246 uint8_t blue;
vsluiter 3:a2b58da5c03b 247 }ledcolor_t;
vsluiter 3:a2b58da5c03b 248 ledcolor_t rightled={0,0,0}, leftled={0,0,0};
vsluiter 16:f0176e9e4a9d 249 left>=right?maxscore = left: maxscore = right;
vsluiter 2:d2f8772a8db5 250 for(scorecounter = 0 ; scorecounter <= maxscore ; scorecounter++)
vsluiter 2:d2f8772a8db5 251 {
vsluiter 2:d2f8772a8db5 252 uint8_t templeft,tempright;
vsluiter 23:861ceaca2518 253 uint8_t sidecounter;
vsluiter 2:d2f8772a8db5 254 templeft = left>scorecounter?scorecounter:left;
vsluiter 2:d2f8772a8db5 255 tempright = right>scorecounter?scorecounter:right;
vsluiter 23:861ceaca2518 256 //pc.printf("scorecounter: %d, maxscore: %d\n\r",scorecounter, maxscore);
vsluiter 24:2b14f846cf28 257 /*Change color on last score update: green is winning, red is losing, yellow is draw*/
vsluiter 24:2b14f846cf28 258 if(scorecounter == maxscore)
vsluiter 16:f0176e9e4a9d 259 {
vsluiter 24:2b14f846cf28 260 leftled.green = leftled.red = leftled.blue = rightled.green = rightled.red = rightled.blue = 0;
vsluiter 24:2b14f846cf28 261 if(left >= right)
vsluiter 16:f0176e9e4a9d 262 {
vsluiter 24:2b14f846cf28 263
vsluiter 16:f0176e9e4a9d 264 leftled.green = 255;
vsluiter 16:f0176e9e4a9d 265 rightled.red = 255;
vsluiter 16:f0176e9e4a9d 266 }
vsluiter 24:2b14f846cf28 267 if(right >= left)
vsluiter 16:f0176e9e4a9d 268 {
vsluiter 16:f0176e9e4a9d 269 leftled.red = 255;
vsluiter 16:f0176e9e4a9d 270 rightled.green = 255;
vsluiter 23:861ceaca2518 271
vsluiter 16:f0176e9e4a9d 272 }
vsluiter 16:f0176e9e4a9d 273 }
vsluiter 16:f0176e9e4a9d 274 else
vsluiter 16:f0176e9e4a9d 275 {
vsluiter 16:f0176e9e4a9d 276 leftled.green = leftled.red = leftled.blue = rightled.green = rightled.red = rightled.blue = 255;
vsluiter 16:f0176e9e4a9d 277 }
vsluiter 16:f0176e9e4a9d 278
vsluiter 20:a63273c11af0 279 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)//blank memory
vsluiter 2:d2f8772a8db5 280 {
vsluiter 2:d2f8772a8db5 281 write_led(&totalstrip[ledcounter], 0, 0 ,0);
vsluiter 2:d2f8772a8db5 282 }
vsluiter 2:d2f8772a8db5 283 for(sidecounter = 0 ; sidecounter < templeft; sidecounter++)
vsluiter 2:d2f8772a8db5 284 {
vsluiter 3:a2b58da5c03b 285 write_led(&totalstrip[sidecounter*2],leftled.red,leftled.green,leftled.blue);
vsluiter 2:d2f8772a8db5 286 }
vsluiter 2:d2f8772a8db5 287 for(sidecounter = 0 ; sidecounter < tempright ; sidecounter++)
vsluiter 2:d2f8772a8db5 288 {
vsluiter 3:a2b58da5c03b 289 write_led(&totalstrip[(NUMBER_OF_PIXELS-1)-(sidecounter*2)],rightled.red,rightled.green,rightled.blue);
vsluiter 2:d2f8772a8db5 290 }
vsluiter 16:f0176e9e4a9d 291 wait(0.2);
vsluiter 2:d2f8772a8db5 292 }
vsluiter 16:f0176e9e4a9d 293 wait(0.7);
vsluiter 16:f0176e9e4a9d 294 }
vsluiter 16:f0176e9e4a9d 295
vsluiter 16:f0176e9e4a9d 296
vsluiter 16:f0176e9e4a9d 297 //Only writes pixels that are in 'line'. Does not clear, only overwrites.
vsluiter 16:f0176e9e4a9d 298 void DrawLine(uint8_t start, uint8_t end, uint8_t red, uint8_t green, uint8_t blue)
vsluiter 16:f0176e9e4a9d 299 {
vsluiter 16:f0176e9e4a9d 300 uint8_t ledcounter;
vsluiter 18:789e9fafa5f6 301 if(end >= NUMBER_OF_PIXELS)
vsluiter 19:bb0179b9043f 302 end = NUMBER_OF_PIXELS;
vsluiter 18:789e9fafa5f6 303 if(start < end)
vsluiter 16:f0176e9e4a9d 304 {
vsluiter 18:789e9fafa5f6 305 for(ledcounter = start; ledcounter < end ; ledcounter++)
vsluiter 18:789e9fafa5f6 306 {
vsluiter 18:789e9fafa5f6 307 write_led(&totalstrip[ledcounter], red, green, blue);
vsluiter 18:789e9fafa5f6 308 }
vsluiter 16:f0176e9e4a9d 309 }
vsluiter 2:d2f8772a8db5 310 }
vsluiter 2:d2f8772a8db5 311
vsluiter 1:7a2ec350cdf5 312 void WinLoose(float seconds, bool side)
vsluiter 1:7a2ec350cdf5 313 {
vsluiter 1:7a2ec350cdf5 314 uint8_t ledcounter;
vsluiter 1:7a2ec350cdf5 315 Timer timer;
vsluiter 1:7a2ec350cdf5 316 timer.start();
vsluiter 1:7a2ec350cdf5 317 while( timer.read() < seconds)
vsluiter 1:7a2ec350cdf5 318 {
vsluiter 1:7a2ec350cdf5 319 uint8_t redvalue = 255-(255.0*(timer.read()/(seconds/2)));
vsluiter 1:7a2ec350cdf5 320 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
vsluiter 1:7a2ec350cdf5 321 {
vsluiter 1:7a2ec350cdf5 322 if(ledcounter < NUMBER_OF_PIXELS / 2)
vsluiter 1:7a2ec350cdf5 323 {
vsluiter 1:7a2ec350cdf5 324 if(side)
vsluiter 1:7a2ec350cdf5 325 write_led(&totalstrip[ledcounter], redvalue,0,0);
vsluiter 1:7a2ec350cdf5 326 else
vsluiter 1:7a2ec350cdf5 327 write_led(&totalstrip[ledcounter], 0,255,0);
vsluiter 1:7a2ec350cdf5 328 }
vsluiter 1:7a2ec350cdf5 329 else
vsluiter 1:7a2ec350cdf5 330 {
vsluiter 1:7a2ec350cdf5 331 if(side)
vsluiter 1:7a2ec350cdf5 332 write_led(&totalstrip[ledcounter], 0,255,0);
vsluiter 1:7a2ec350cdf5 333 else
vsluiter 1:7a2ec350cdf5 334 write_led(&totalstrip[ledcounter], redvalue ,0,0);
vsluiter 1:7a2ec350cdf5 335
vsluiter 1:7a2ec350cdf5 336 }
vsluiter 1:7a2ec350cdf5 337 }
vsluiter 1:7a2ec350cdf5 338 }
vsluiter 1:7a2ec350cdf5 339 }
vsluiter 11:fc80c39ba9f0 340
vsluiter 0:cde34c55fa20 341 void PaddleDemo(float seconds, uint8_t red, uint8_t green, uint8_t blue)
vsluiter 0:cde34c55fa20 342 {
vsluiter 0:cde34c55fa20 343 uint8_t ledcounter;
vsluiter 0:cde34c55fa20 344 Timer timer;
vsluiter 0:cde34c55fa20 345 timer.start();
vsluiter 0:cde34c55fa20 346 while( timer.read() < seconds)
vsluiter 0:cde34c55fa20 347 {
vsluiter 0:cde34c55fa20 348 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
vsluiter 0:cde34c55fa20 349 {
vsluiter 0:cde34c55fa20 350 if((ledcounter >= paddlestart) && ( ledcounter <= paddlestart+PADDLE_LENGTH))
vsluiter 0:cde34c55fa20 351 write_led(&totalstrip[ledcounter], red,green,blue);
vsluiter 0:cde34c55fa20 352 else
vsluiter 0:cde34c55fa20 353 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 354 }
vsluiter 0:cde34c55fa20 355 }
vsluiter 0:cde34c55fa20 356 }
vsluiter 0:cde34c55fa20 357
vsluiter 0:cde34c55fa20 358 void Randomblinks(float seconds, bool colored)
vsluiter 0:cde34c55fa20 359 {
vsluiter 0:cde34c55fa20 360 uint8_t ledcounter;
vsluiter 0:cde34c55fa20 361 uint8_t test;
vsluiter 0:cde34c55fa20 362 Timer timer;
vsluiter 0:cde34c55fa20 363 timer.start();
vsluiter 0:cde34c55fa20 364 while( timer.read() < seconds )
vsluiter 0:cde34c55fa20 365 {
vsluiter 0:cde34c55fa20 366 test = 50.0*rand()/(RAND_MAX*1.0);
vsluiter 0:cde34c55fa20 367 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
vsluiter 0:cde34c55fa20 368 {
vsluiter 0:cde34c55fa20 369 if(ledcounter == test)
vsluiter 0:cde34c55fa20 370 {
vsluiter 0:cde34c55fa20 371 if(colored)
vsluiter 0:cde34c55fa20 372 write_led(&totalstrip[ledcounter], test*5,(test%10)*25,(test%15)*15);
vsluiter 0:cde34c55fa20 373 else
vsluiter 0:cde34c55fa20 374 write_led(&totalstrip[ledcounter], 255,255,255);
vsluiter 0:cde34c55fa20 375 }
vsluiter 0:cde34c55fa20 376 else
vsluiter 0:cde34c55fa20 377 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 378 }
vsluiter 0:cde34c55fa20 379 }
vsluiter 0:cde34c55fa20 380 }
vsluiter 0:cde34c55fa20 381
vsluiter 5:d2e819018807 382 void UpdateDemoPaddle(void)
vsluiter 1:7a2ec350cdf5 383 {
vsluiter 1:7a2ec350cdf5 384 static uint8_t direction = 1;
vsluiter 1:7a2ec350cdf5 385 if(direction) {
vsluiter 1:7a2ec350cdf5 386 paddlestart++;
vsluiter 1:7a2ec350cdf5 387 } else {
vsluiter 1:7a2ec350cdf5 388 paddlestart--;
vsluiter 1:7a2ec350cdf5 389 }
vsluiter 1:7a2ec350cdf5 390
vsluiter 1:7a2ec350cdf5 391 if(paddlestart > (NUMBER_OF_PIXELS - PADDLE_LENGTH))
vsluiter 1:7a2ec350cdf5 392 direction = 0;
vsluiter 1:7a2ec350cdf5 393 if(paddlestart < 0)
vsluiter 1:7a2ec350cdf5 394 direction = 1;
vsluiter 1:7a2ec350cdf5 395 }