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:
Wed Aug 21 16:52:51 2013 +0000
Revision:
0:cde34c55fa20
Child:
1:7a2ec350cdf5
Demo application

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 0:cde34c55fa20 5
vsluiter 0:cde34c55fa20 6 void Randomblinks(float seconds, bool colored = false);
vsluiter 0:cde34c55fa20 7 void PaddleDemo(float seconds, uint8_t red, uint8_t green, uint8_t blue);
vsluiter 0:cde34c55fa20 8
vsluiter 0:cde34c55fa20 9 uint16_t totalstrip[NUMBER_OF_PIXELS];
vsluiter 0:cde34c55fa20 10 volatile int8_t paddlestart= 0;
vsluiter 0:cde34c55fa20 11 SPI ledstrip(PTD2,NC,PTD1);
vsluiter 0:cde34c55fa20 12
vsluiter 0:cde34c55fa20 13 void UpdatePaddle(void)
vsluiter 0:cde34c55fa20 14 {
vsluiter 0:cde34c55fa20 15 static uint8_t direction = 1;
vsluiter 0:cde34c55fa20 16 if(direction) {
vsluiter 0:cde34c55fa20 17 paddlestart++;
vsluiter 0:cde34c55fa20 18 } else {
vsluiter 0:cde34c55fa20 19 paddlestart--;
vsluiter 0:cde34c55fa20 20 }
vsluiter 0:cde34c55fa20 21
vsluiter 0:cde34c55fa20 22 if(paddlestart > (NUMBER_OF_PIXELS - PADDLE_LENGTH))
vsluiter 0:cde34c55fa20 23 direction = 0;
vsluiter 0:cde34c55fa20 24 if(paddlestart < 0)
vsluiter 0:cde34c55fa20 25 direction = 1;
vsluiter 0:cde34c55fa20 26
vsluiter 0:cde34c55fa20 27 }
vsluiter 0:cde34c55fa20 28
vsluiter 0:cde34c55fa20 29 void UpdateLEDstrip(void)
vsluiter 0:cde34c55fa20 30 {
vsluiter 0:cde34c55fa20 31 uint8_t pixelcounter;
vsluiter 0:cde34c55fa20 32 /*start by writing 32 zeroes */
vsluiter 0:cde34c55fa20 33 ledstrip.write(0);
vsluiter 0:cde34c55fa20 34 ledstrip.write(0);
vsluiter 0:cde34c55fa20 35 ledstrip.write(0);
vsluiter 0:cde34c55fa20 36 ledstrip.write(0);
vsluiter 0:cde34c55fa20 37 for(pixelcounter = 0 ; pixelcounter < NUMBER_OF_PIXELS; pixelcounter++) {
vsluiter 0:cde34c55fa20 38 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 39 ledstrip.write( uint8_t(totalstrip[pixelcounter]));//(*(uint16_t *)(&totalstrip[pixelcounter]))>>8);
vsluiter 0:cde34c55fa20 40 }
vsluiter 0:cde34c55fa20 41 }
vsluiter 0:cde34c55fa20 42
vsluiter 0:cde34c55fa20 43 void write_led(uint16_t * led, uint8_t red, uint8_t green, uint8_t blue)
vsluiter 0:cde34c55fa20 44 {
vsluiter 0:cde34c55fa20 45 *led = (1<<15) | ((green >> 3)<<10) | ((red >>3)<< 5) | (blue >>3);
vsluiter 0:cde34c55fa20 46 }
vsluiter 0:cde34c55fa20 47 int main()
vsluiter 0:cde34c55fa20 48 {
vsluiter 0:cde34c55fa20 49 Ticker updater;
vsluiter 0:cde34c55fa20 50 Ticker paddlepos;
vsluiter 0:cde34c55fa20 51 uint8_t ledcounter;
vsluiter 0:cde34c55fa20 52 updater.attach(UpdateLEDstrip, .05);
vsluiter 0:cde34c55fa20 53 paddlepos.attach(UpdatePaddle, .03);
vsluiter 0:cde34c55fa20 54 ledstrip.format(8,0); //15 bits, mode '0'
vsluiter 0:cde34c55fa20 55 ledstrip.frequency(100000);
vsluiter 0:cde34c55fa20 56 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++) {
vsluiter 0:cde34c55fa20 57 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 58 }
vsluiter 0:cde34c55fa20 59 while(1) {
vsluiter 0:cde34c55fa20 60 PaddleDemo(5,255,10,100);
vsluiter 0:cde34c55fa20 61 Randomblinks(5, true);
vsluiter 0:cde34c55fa20 62 }
vsluiter 0:cde34c55fa20 63 }
vsluiter 0:cde34c55fa20 64
vsluiter 0:cde34c55fa20 65 void PaddleDemo(float seconds, uint8_t red, uint8_t green, uint8_t blue)
vsluiter 0:cde34c55fa20 66 {
vsluiter 0:cde34c55fa20 67 uint8_t ledcounter;
vsluiter 0:cde34c55fa20 68 Timer timer;
vsluiter 0:cde34c55fa20 69 timer.start();
vsluiter 0:cde34c55fa20 70 while( timer.read() < seconds)
vsluiter 0:cde34c55fa20 71 {
vsluiter 0:cde34c55fa20 72 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
vsluiter 0:cde34c55fa20 73 {
vsluiter 0:cde34c55fa20 74 if((ledcounter >= paddlestart) && ( ledcounter <= paddlestart+PADDLE_LENGTH))
vsluiter 0:cde34c55fa20 75 write_led(&totalstrip[ledcounter], red,green,blue);
vsluiter 0:cde34c55fa20 76 else
vsluiter 0:cde34c55fa20 77 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 78 }
vsluiter 0:cde34c55fa20 79 }
vsluiter 0:cde34c55fa20 80 }
vsluiter 0:cde34c55fa20 81
vsluiter 0:cde34c55fa20 82 void Randomblinks(float seconds, bool colored)
vsluiter 0:cde34c55fa20 83 {
vsluiter 0:cde34c55fa20 84 uint8_t ledcounter;
vsluiter 0:cde34c55fa20 85 uint8_t test;
vsluiter 0:cde34c55fa20 86 Timer timer;
vsluiter 0:cde34c55fa20 87 timer.start();
vsluiter 0:cde34c55fa20 88 while( timer.read() < seconds )
vsluiter 0:cde34c55fa20 89 {
vsluiter 0:cde34c55fa20 90 test = 50.0*rand()/(RAND_MAX*1.0);
vsluiter 0:cde34c55fa20 91 for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
vsluiter 0:cde34c55fa20 92 {
vsluiter 0:cde34c55fa20 93 if(ledcounter == test)
vsluiter 0:cde34c55fa20 94 {
vsluiter 0:cde34c55fa20 95 if(colored)
vsluiter 0:cde34c55fa20 96 write_led(&totalstrip[ledcounter], test*5,(test%10)*25,(test%15)*15);
vsluiter 0:cde34c55fa20 97 else
vsluiter 0:cde34c55fa20 98 write_led(&totalstrip[ledcounter], 255,255,255);
vsluiter 0:cde34c55fa20 99 }
vsluiter 0:cde34c55fa20 100 else
vsluiter 0:cde34c55fa20 101 write_led(&totalstrip[ledcounter], 0,0,0);
vsluiter 0:cde34c55fa20 102 }
vsluiter 0:cde34c55fa20 103 }
vsluiter 0:cde34c55fa20 104 }
vsluiter 0:cde34c55fa20 105
vsluiter 0:cde34c55fa20 106 //DigitalOut myled(LED1);
vsluiter 0:cde34c55fa20 107
vsluiter 0:cde34c55fa20 108 //int main() {
vsluiter 0:cde34c55fa20 109 // while(1) {
vsluiter 0:cde34c55fa20 110 // myled = 1;
vsluiter 0:cde34c55fa20 111 // wait(0.2);
vsluiter 0:cde34c55fa20 112 // myled = 0;
vsluiter 0:cde34c55fa20 113 // wait(0.2);
vsluiter 0:cde34c55fa20 114 // }
vsluiter 0:cde34c55fa20 115 //}