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:
Thu Aug 22 07:11:27 2013 +0000
Revision:
11:fc80c39ba9f0
Parent:
10:6f9624c7425d
Child:
12:97c71b84c984
Some minor cleanup, and corrected paddle detection for left hand player

Who changed what in which revision?

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