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 Aug 27 18:54:15 2013 +0000
Revision:
21:a554229e884b
Parent:
20:a63273c11af0
Child:
22:a7619f315c0e
separated game code from more general paddle and button classes

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