Dependencies:   PixelArray WS2812 mbed

[OLD - NOT FINISHED CODE]

Final code for the Pong Table Code can be found here: https://developer.mbed.org/teams/ASE/code/frdm_pong_table_controller/

Committer:
benswindell
Date:
Wed Feb 22 11:44:36 2017 +0000
Revision:
1:58c735e369b1
Parent:
0:e610b1d38e80
Added code for sensors and a second goal array;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benswindell 1:58c735e369b1 1
alikin01 0:e610b1d38e80 2 #include "mbed.h"
alikin01 0:e610b1d38e80 3 #include "WS2812.h"
alikin01 0:e610b1d38e80 4 #include "PixelArray.h"
alikin01 0:e610b1d38e80 5
alikin01 0:e610b1d38e80 6 Serial pc(USBTX, USBRX);
benswindell 1:58c735e369b1 7 DigitalOut led_green(LED_GREEN, 1);
benswindell 1:58c735e369b1 8 AnalogIn sensor1(PTB2);
benswindell 1:58c735e369b1 9 AnalogIn sensor2(A0);
alikin01 0:e610b1d38e80 10
alikin01 0:e610b1d38e80 11
alikin01 0:e610b1d38e80 12 #define WS2812_BUF 112
alikin01 0:e610b1d38e80 13 #define NUM_COLORS 6
alikin01 0:e610b1d38e80 14 #define NUM_LEDS_PER_COLOR 1
alikin01 0:e610b1d38e80 15
alikin01 0:e610b1d38e80 16 //-------- Colours -----------
alikin01 0:e610b1d38e80 17 #define RED 0x2f0000
alikin01 0:e610b1d38e80 18 #define YELLOW 0x2f2f00
benswindell 1:58c735e369b1 19 #define GREEN 0x002f00 // Player has conceded a goal
alikin01 0:e610b1d38e80 20 #define LIGHTBLUE 0x002f2f
benswindell 1:58c735e369b1 21 #define DARKBLUE 0x00002f // Player scored a goal
alikin01 0:e610b1d38e80 22 #define PINK 0x2f002f
alikin01 0:e610b1d38e80 23 #define OFF 0x000000
alikin01 0:e610b1d38e80 24 #define WHITE 0xffffff
alikin01 0:e610b1d38e80 25 #define ARMBLUE 0x128BAB
alikin01 0:e610b1d38e80 26
benswindell 1:58c735e369b1 27 // Parameters
benswindell 1:58c735e369b1 28 const int READ_FREQUENCY = 20;
benswindell 1:58c735e369b1 29 const int BUFFER_SIZE = 2*READ_FREQUENCY; // in seconds
benswindell 1:58c735e369b1 30 const float VOLTAGE_REF = 5.000f; // V
benswindell 1:58c735e369b1 31 const int DEVIATION = 100; // mV
benswindell 1:58c735e369b1 32 const int DEFAULT_DATA = -1;
alikin01 0:e610b1d38e80 33
alikin01 0:e610b1d38e80 34 bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G;
alikin01 0:e610b1d38e80 35 int seg1Array[112];
benswindell 1:58c735e369b1 36 int MainArray[11][122];
alikin01 0:e610b1d38e80 37
alikin01 0:e610b1d38e80 38 //void write_8Seg(int num);
alikin01 0:e610b1d38e80 39 PixelArray px(WS2812_BUF);
alikin01 0:e610b1d38e80 40
alikin01 0:e610b1d38e80 41 // See the program page for information on the timing numbers
alikin01 0:e610b1d38e80 42 // The given numbers are for the K64F
alikin01 0:e610b1d38e80 43 WS2812 ws(D9, WS2812_BUF, 0, 5, 5, 0);
benswindell 1:58c735e369b1 44 WS2812 ws2(D8,WS2812_BUF, 0, 5, 5, 0);
benswindell 1:58c735e369b1 45 WS2812 ws3(D7,WS2812_BUF, 0, 5, 5, 0);
benswindell 1:58c735e369b1 46 WS2812 ws4(D6,WS2812_BUF, 0, 5, 5, 0);
alikin01 0:e610b1d38e80 47
alikin01 0:e610b1d38e80 48
benswindell 1:58c735e369b1 49 // Score counters
benswindell 1:58c735e369b1 50 int p1Score;
benswindell 1:58c735e369b1 51 int p2Score;
benswindell 1:58c735e369b1 52 int ScoreLimit = 5;
benswindell 1:58c735e369b1 53 bool FinishedGame = false;
benswindell 1:58c735e369b1 54 int EndFlashes = 0;
benswindell 1:58c735e369b1 55 int NumFlashes;
benswindell 1:58c735e369b1 56
benswindell 1:58c735e369b1 57 // Create timers
benswindell 1:58c735e369b1 58 Ticker pollTicker1;
benswindell 1:58c735e369b1 59 Ticker pollTicker2;
benswindell 1:58c735e369b1 60 Timer t;
benswindell 1:58c735e369b1 61
benswindell 1:58c735e369b1 62 int readings[BUFFER_SIZE]; // array of readings
benswindell 1:58c735e369b1 63 int reading = 0; // index into above
benswindell 1:58c735e369b1 64 int min = DEFAULT_DATA;
benswindell 1:58c735e369b1 65 int max = DEFAULT_DATA;
benswindell 1:58c735e369b1 66 int average = DEFAULT_DATA;
benswindell 1:58c735e369b1 67
benswindell 1:58c735e369b1 68 void readSensor();
benswindell 1:58c735e369b1 69 void handleGoal();
benswindell 1:58c735e369b1 70 void reset();
benswindell 1:58c735e369b1 71
benswindell 1:58c735e369b1 72 void setup()
benswindell 1:58c735e369b1 73 {
benswindell 1:58c735e369b1 74 // Turn on green LED
benswindell 1:58c735e369b1 75 led_green = 1;
benswindell 1:58c735e369b1 76
benswindell 1:58c735e369b1 77 // Fills 2D array with data
benswindell 1:58c735e369b1 78 for(int i=0; i<10; i++) {
benswindell 1:58c735e369b1 79 write_7Seg(i);
benswindell 1:58c735e369b1 80 }
benswindell 1:58c735e369b1 81
benswindell 1:58c735e369b1 82 p1Score = 0;
benswindell 1:58c735e369b1 83 p2Score = 0;
benswindell 1:58c735e369b1 84 NumFlashes = 0;
alikin01 0:e610b1d38e80 85
benswindell 1:58c735e369b1 86 // Set LEDS to start values
benswindell 1:58c735e369b1 87 write_pbbuf(p1Score);
benswindell 1:58c735e369b1 88 write_pbbuf2(p2Score);
benswindell 1:58c735e369b1 89 write_goal1(WHITE);
benswindell 1:58c735e369b1 90 write_goal2(WHITE);
benswindell 1:58c735e369b1 91 wait_ms(1000);
benswindell 1:58c735e369b1 92 write_goal1(OFF);
benswindell 1:58c735e369b1 93 write_goal2(OFF);
benswindell 1:58c735e369b1 94
benswindell 1:58c735e369b1 95 // Fill buffer with default data
benswindell 1:58c735e369b1 96 for (int i=0; i<BUFFER_SIZE; i++) {
benswindell 1:58c735e369b1 97 readings[i] = DEFAULT_DATA;
benswindell 1:58c735e369b1 98 }
benswindell 1:58c735e369b1 99
benswindell 1:58c735e369b1 100 pollTicker1.attach(&readSensor1,(float)1/READ_FREQUENCY);
benswindell 1:58c735e369b1 101 pollTicker2.attach(&readSensor2,(float)1/READ_FREQUENCY);
benswindell 1:58c735e369b1 102
benswindell 1:58c735e369b1 103 // Turn off green LED
benswindell 1:58c735e369b1 104 led_green = 0;
benswindell 1:58c735e369b1 105 }
benswindell 1:58c735e369b1 106
benswindell 1:58c735e369b1 107 // Set segment variables
benswindell 1:58c735e369b1 108 void write_7Seg(int num)
benswindell 1:58c735e369b1 109 {
benswindell 1:58c735e369b1 110 switch (num) {
benswindell 1:58c735e369b1 111 case 0 :
benswindell 1:58c735e369b1 112 // Off
benswindell 1:58c735e369b1 113 seg1A = 1;
benswindell 1:58c735e369b1 114 seg1B = 1;
benswindell 1:58c735e369b1 115 seg1C = 1;
benswindell 1:58c735e369b1 116 seg1D = 1;
benswindell 1:58c735e369b1 117 seg1E = 1;
benswindell 1:58c735e369b1 118 seg1F = 1;
benswindell 1:58c735e369b1 119 seg1G = 0;
benswindell 1:58c735e369b1 120
benswindell 1:58c735e369b1 121 setLEDArray(0);
benswindell 1:58c735e369b1 122
alikin01 0:e610b1d38e80 123 break;
benswindell 1:58c735e369b1 124
benswindell 1:58c735e369b1 125 case 1 :
alikin01 0:e610b1d38e80 126 // 1
alikin01 0:e610b1d38e80 127 seg1A = 0;
alikin01 0:e610b1d38e80 128 seg1B = 1;
alikin01 0:e610b1d38e80 129 seg1C = 1;
alikin01 0:e610b1d38e80 130 seg1D = 0;
alikin01 0:e610b1d38e80 131 seg1E = 0;
alikin01 0:e610b1d38e80 132 seg1F = 0;
benswindell 1:58c735e369b1 133 seg1G = 0;
alikin01 0:e610b1d38e80 134
benswindell 1:58c735e369b1 135 setLEDArray(1);
alikin01 0:e610b1d38e80 136 break;
benswindell 1:58c735e369b1 137
benswindell 1:58c735e369b1 138 case 2 :
alikin01 0:e610b1d38e80 139 // 2
alikin01 0:e610b1d38e80 140 seg1A = 1;
alikin01 0:e610b1d38e80 141 seg1B = 1;
alikin01 0:e610b1d38e80 142 seg1C = 0;
alikin01 0:e610b1d38e80 143 seg1D = 1;
alikin01 0:e610b1d38e80 144 seg1E = 1;
alikin01 0:e610b1d38e80 145 seg1F = 0;
benswindell 1:58c735e369b1 146 seg1G = 1;
alikin01 0:e610b1d38e80 147
benswindell 1:58c735e369b1 148 setLEDArray(2);
benswindell 1:58c735e369b1 149
alikin01 0:e610b1d38e80 150 break;
benswindell 1:58c735e369b1 151
alikin01 0:e610b1d38e80 152 case 3 :
alikin01 0:e610b1d38e80 153 // 3
alikin01 0:e610b1d38e80 154 seg1A = 1;
alikin01 0:e610b1d38e80 155 seg1B = 1;
alikin01 0:e610b1d38e80 156 seg1C = 1;
alikin01 0:e610b1d38e80 157 seg1D = 1;
alikin01 0:e610b1d38e80 158 seg1E = 0;
alikin01 0:e610b1d38e80 159 seg1F = 0;
alikin01 0:e610b1d38e80 160 seg1G = 1;
alikin01 0:e610b1d38e80 161
benswindell 1:58c735e369b1 162 setLEDArray(3);
alikin01 0:e610b1d38e80 163 break;
benswindell 1:58c735e369b1 164
alikin01 0:e610b1d38e80 165 case 4:
alikin01 0:e610b1d38e80 166 // 4
alikin01 0:e610b1d38e80 167 seg1A = 0;
alikin01 0:e610b1d38e80 168 seg1B = 1;
alikin01 0:e610b1d38e80 169 seg1C = 1;
alikin01 0:e610b1d38e80 170 seg1D = 0;
alikin01 0:e610b1d38e80 171 seg1E = 0;
alikin01 0:e610b1d38e80 172 seg1F = 1;
benswindell 1:58c735e369b1 173 seg1G = 1;
alikin01 0:e610b1d38e80 174
benswindell 1:58c735e369b1 175 setLEDArray(4);
benswindell 1:58c735e369b1 176
alikin01 0:e610b1d38e80 177 break;
benswindell 1:58c735e369b1 178
alikin01 0:e610b1d38e80 179 case 5:
alikin01 0:e610b1d38e80 180 // 5
alikin01 0:e610b1d38e80 181 seg1A = 1;
alikin01 0:e610b1d38e80 182 seg1B = 0;
alikin01 0:e610b1d38e80 183 seg1C = 1;
alikin01 0:e610b1d38e80 184 seg1D = 1;
alikin01 0:e610b1d38e80 185 seg1E = 0;
alikin01 0:e610b1d38e80 186 seg1F = 1;
benswindell 1:58c735e369b1 187 seg1G = 1;
alikin01 0:e610b1d38e80 188
benswindell 1:58c735e369b1 189 setLEDArray(5);
benswindell 1:58c735e369b1 190
alikin01 0:e610b1d38e80 191 break;
benswindell 1:58c735e369b1 192
alikin01 0:e610b1d38e80 193 case 6:
alikin01 0:e610b1d38e80 194 // 6
alikin01 0:e610b1d38e80 195 seg1A = 1;
alikin01 0:e610b1d38e80 196 seg1B = 0;
alikin01 0:e610b1d38e80 197 seg1C = 1;
alikin01 0:e610b1d38e80 198 seg1D = 1;
alikin01 0:e610b1d38e80 199 seg1E = 1;
alikin01 0:e610b1d38e80 200 seg1F = 1;
alikin01 0:e610b1d38e80 201 seg1G = 1;
benswindell 1:58c735e369b1 202
benswindell 1:58c735e369b1 203 setLEDArray(6);
alikin01 0:e610b1d38e80 204
alikin01 0:e610b1d38e80 205 break;
benswindell 1:58c735e369b1 206
alikin01 0:e610b1d38e80 207 case 7:
alikin01 0:e610b1d38e80 208 // 7
alikin01 0:e610b1d38e80 209 seg1A = 1;
alikin01 0:e610b1d38e80 210 seg1B = 1;
alikin01 0:e610b1d38e80 211 seg1C = 1;
alikin01 0:e610b1d38e80 212 seg1D = 0;
alikin01 0:e610b1d38e80 213 seg1E = 0;
alikin01 0:e610b1d38e80 214 seg1F = 0;
benswindell 1:58c735e369b1 215 seg1G = 0;
alikin01 0:e610b1d38e80 216
benswindell 1:58c735e369b1 217 setLEDArray(7);
benswindell 1:58c735e369b1 218
alikin01 0:e610b1d38e80 219 break;
benswindell 1:58c735e369b1 220
alikin01 0:e610b1d38e80 221 case 8:
alikin01 0:e610b1d38e80 222 // 8
alikin01 0:e610b1d38e80 223 seg1A = 1;
alikin01 0:e610b1d38e80 224 seg1B = 1;
alikin01 0:e610b1d38e80 225 seg1C = 1;
alikin01 0:e610b1d38e80 226 seg1D = 1;
alikin01 0:e610b1d38e80 227 seg1E = 1;
alikin01 0:e610b1d38e80 228 seg1F = 1;
benswindell 1:58c735e369b1 229 seg1G = 1;
alikin01 0:e610b1d38e80 230
benswindell 1:58c735e369b1 231 setLEDArray(8);
alikin01 0:e610b1d38e80 232 break;
benswindell 1:58c735e369b1 233
alikin01 0:e610b1d38e80 234 case 9:
alikin01 0:e610b1d38e80 235 // 9
alikin01 0:e610b1d38e80 236 seg1A = 1;
alikin01 0:e610b1d38e80 237 seg1B = 1;
alikin01 0:e610b1d38e80 238 seg1C = 1;
alikin01 0:e610b1d38e80 239 seg1D = 0;
alikin01 0:e610b1d38e80 240 seg1E = 0;
alikin01 0:e610b1d38e80 241 seg1F = 1;
benswindell 1:58c735e369b1 242 seg1G = 1;
benswindell 1:58c735e369b1 243
benswindell 1:58c735e369b1 244 setLEDArray(9);
benswindell 1:58c735e369b1 245 break;
benswindell 1:58c735e369b1 246
benswindell 1:58c735e369b1 247 case 10:
benswindell 1:58c735e369b1 248 // OFF
benswindell 1:58c735e369b1 249 seg1A = 0;
benswindell 1:58c735e369b1 250 seg1B = 0;
benswindell 1:58c735e369b1 251 seg1C = 0;
benswindell 1:58c735e369b1 252 seg1D = 0;
benswindell 1:58c735e369b1 253 seg1E = 0;
benswindell 1:58c735e369b1 254 seg1F = 0;
benswindell 1:58c735e369b1 255 seg1G = 0;
benswindell 1:58c735e369b1 256
benswindell 1:58c735e369b1 257 setLEDArray(10);
benswindell 1:58c735e369b1 258 break;
benswindell 1:58c735e369b1 259
benswindell 1:58c735e369b1 260 default :
benswindell 1:58c735e369b1 261
benswindell 1:58c735e369b1 262 break;
benswindell 1:58c735e369b1 263
benswindell 1:58c735e369b1 264 }
benswindell 1:58c735e369b1 265 }
benswindell 1:58c735e369b1 266
benswindell 1:58c735e369b1 267 // Write segment config to main array
benswindell 1:58c735e369b1 268 void setLEDArray(int x)
benswindell 1:58c735e369b1 269 {
benswindell 1:58c735e369b1 270 for (int i = 0; i < WS2812_BUF; i++) {
benswindell 1:58c735e369b1 271 if (i < 16) {
benswindell 1:58c735e369b1 272 MainArray[x][i] = seg1A;
benswindell 1:58c735e369b1 273 }
benswindell 1:58c735e369b1 274
benswindell 1:58c735e369b1 275 if ( i >= 16 && i < 32) {
benswindell 1:58c735e369b1 276 MainArray[x][i] = seg1B;
benswindell 1:58c735e369b1 277 }
benswindell 1:58c735e369b1 278
benswindell 1:58c735e369b1 279 if (i >= 32 && i < 48) {
benswindell 1:58c735e369b1 280 MainArray[x][i] = seg1C;
benswindell 1:58c735e369b1 281 }
benswindell 1:58c735e369b1 282
benswindell 1:58c735e369b1 283 if (i >= 48 && i < 64) {
benswindell 1:58c735e369b1 284 MainArray[x][i]= seg1D;
benswindell 1:58c735e369b1 285 }
benswindell 1:58c735e369b1 286
benswindell 1:58c735e369b1 287 if ( i >= 64 && i < 80) {
benswindell 1:58c735e369b1 288 MainArray[x][i] = seg1E;
benswindell 1:58c735e369b1 289 }
alikin01 0:e610b1d38e80 290
benswindell 1:58c735e369b1 291 if (i >= 80 && i < 96) {
benswindell 1:58c735e369b1 292 MainArray[x][i] = seg1F;
benswindell 1:58c735e369b1 293 }
benswindell 1:58c735e369b1 294
benswindell 1:58c735e369b1 295 if ( i >= 96 && i < 112) {
benswindell 1:58c735e369b1 296 MainArray[x][i] = seg1G;
benswindell 1:58c735e369b1 297 }
benswindell 1:58c735e369b1 298 }// FOR LOOP
benswindell 1:58c735e369b1 299 }
benswindell 1:58c735e369b1 300
benswindell 1:58c735e369b1 301 // Write to player 1 LED (ROBOT)
benswindell 1:58c735e369b1 302 void write_pbbuf(int line_num)
benswindell 1:58c735e369b1 303 {
benswindell 1:58c735e369b1 304 write_px(line_num);
benswindell 1:58c735e369b1 305 ws.write(px.getBuf());
benswindell 1:58c735e369b1 306 }
benswindell 1:58c735e369b1 307
benswindell 1:58c735e369b1 308 // Write to player 2 LED (HUMAN)
benswindell 1:58c735e369b1 309 void write_pbbuf2(int line_num)
benswindell 1:58c735e369b1 310 {
benswindell 1:58c735e369b1 311 write_px(line_num);
benswindell 1:58c735e369b1 312 ws2.write(px2.getBuf());
benswindell 1:58c735e369b1 313 }
benswindell 1:58c735e369b1 314
benswindell 1:58c735e369b1 315 // Write pixel array
benswindell 1:58c735e369b1 316 void write_px(int line_num)
benswindell 1:58c735e369b1 317 {
benswindell 1:58c735e369b1 318 for (int i = 0; i < WS2812_BUF; i++) {
benswindell 1:58c735e369b1 319 if (MainArray[line_num][i] == 0) {
benswindell 1:58c735e369b1 320 px.Set(i,OFF);
benswindell 1:58c735e369b1 321 }
benswindell 1:58c735e369b1 322
benswindell 1:58c735e369b1 323 if (MainArray[line_num][i] == 1) {
benswindell 1:58c735e369b1 324 px.Set(i,LIGHTBLUE);
benswindell 1:58c735e369b1 325 }
benswindell 1:58c735e369b1 326 }
benswindell 1:58c735e369b1 327 }
benswindell 1:58c735e369b1 328
benswindell 1:58c735e369b1 329 // Read goal sensor 1 (ROBOT)
benswindell 1:58c735e369b1 330 void readSensor1()
benswindell 1:58c735e369b1 331 {
benswindell 1:58c735e369b1 332 // Convert readings to mV
benswindell 1:58c735e369b1 333 readings[reading] = (int)(sensor1.read() * 1000 * VOLTAGE_REF);
benswindell 1:58c735e369b1 334 analyseReadings(0);
benswindell 1:58c735e369b1 335 }
benswindell 1:58c735e369b1 336
benswindell 1:58c735e369b1 337 // Read goal sensor 2 (HUMAN)
benswindell 1:58c735e369b1 338 void readSensor2()
benswindell 1:58c735e369b1 339 {
benswindell 1:58c735e369b1 340 // Convert readings to mV
benswindell 1:58c735e369b1 341 readings[reading] = (int)(sensor2.read() * 1000 * VOLTAGE_REF);
benswindell 1:58c735e369b1 342 analyseReadings(1);
alikin01 0:e610b1d38e80 343 }
alikin01 0:e610b1d38e80 344
benswindell 1:58c735e369b1 345 // Analyse sensor readings
benswindell 1:58c735e369b1 346 void analyseReadings(bool player)
benswindell 1:58c735e369b1 347 {
benswindell 1:58c735e369b1 348 min = DEFAULT_DATA;
benswindell 1:58c735e369b1 349 max = DEFAULT_DATA;
benswindell 1:58c735e369b1 350 int sum = 0;
benswindell 1:58c735e369b1 351 int count = 0;
benswindell 1:58c735e369b1 352
benswindell 1:58c735e369b1 353 for (int i=0; i<BUFFER_SIZE; i++) {
benswindell 1:58c735e369b1 354 if (readings[i] == DEFAULT_DATA) {
benswindell 1:58c735e369b1 355 // ignore default values
benswindell 1:58c735e369b1 356 break;
benswindell 1:58c735e369b1 357 }
benswindell 1:58c735e369b1 358
benswindell 1:58c735e369b1 359 if ((min == DEFAULT_DATA) || (readings[i] < min)) {
benswindell 1:58c735e369b1 360 min = readings[i];
benswindell 1:58c735e369b1 361 }
benswindell 1:58c735e369b1 362
benswindell 1:58c735e369b1 363 if ((max == DEFAULT_DATA) || (readings[i] > max)) {
benswindell 1:58c735e369b1 364 max = readings[i];
benswindell 1:58c735e369b1 365 }
benswindell 1:58c735e369b1 366
benswindell 1:58c735e369b1 367 sum += readings[i];
benswindell 1:58c735e369b1 368 count++;
benswindell 1:58c735e369b1 369 }
benswindell 1:58c735e369b1 370
benswindell 1:58c735e369b1 371 if (count == 0) {
benswindell 1:58c735e369b1 372 // No data yet
benswindell 1:58c735e369b1 373 return;
benswindell 1:58c735e369b1 374 }
benswindell 1:58c735e369b1 375
benswindell 1:58c735e369b1 376 average = sum/count;
benswindell 1:58c735e369b1 377
benswindell 1:58c735e369b1 378 // Goal detected if current reading deviates from average by more than 'deviation'
benswindell 1:58c735e369b1 379 if ((readings[reading] < (average - DEVIATION)) || (readings[reading] > (average + DEVIATION))) {
benswindell 1:58c735e369b1 380 incrementScore(!player); // Increase player score opposite the player whose goal's sensor reported a goal
benswindell 1:58c735e369b1 381 }
benswindell 1:58c735e369b1 382
benswindell 1:58c735e369b1 383 reading = (reading + 1) % BUFFER_SIZE;
benswindell 1:58c735e369b1 384 }
benswindell 1:58c735e369b1 385
benswindell 1:58c735e369b1 386 // Increment score
benswindell 1:58c735e369b1 387 void incrementScore(bool isPlayer1)
benswindell 1:58c735e369b1 388 {
benswindell 1:58c735e369b1 389 // Player 1 sensor reported goal, increase player 2 score
benswindell 1:58c735e369b1 390 if(isPlayer1 == 1) {
benswindell 1:58c735e369b1 391 if(p2Score < ScoreLimit) {
benswindell 1:58c735e369b1 392 p2Score++;
benswindell 1:58c735e369b1 393 write_goal(GREEN, isPlayer1);
benswindell 1:58c735e369b1 394 write_goal(DARKBLUE, !isPlayer1);
benswindell 1:58c735e369b1 395 t.start();
benswindell 1:58c735e369b1 396 } else if(Score == ScoreLimit) {
benswindell 1:58c735e369b1 397 FinishedGame = true;
benswindell 1:58c735e369b1 398 }
benswindell 1:58c735e369b1 399
benswindell 1:58c735e369b1 400 write_pbbuf2(p2Score);
benswindell 1:58c735e369b1 401
benswindell 1:58c735e369b1 402 }
benswindell 1:58c735e369b1 403
benswindell 1:58c735e369b1 404 // Player 2 sensor reported goal, increase player 1 score
benswindell 1:58c735e369b1 405 if(isPlayer1 == 0) {
benswindell 1:58c735e369b1 406 if(p1Score < ScoreLimit) {
benswindell 1:58c735e369b1 407 p1Score++;
benswindell 1:58c735e369b1 408 write_goal(DARKBLUE,isPlayer1);
benswindell 1:58c735e369b1 409 write_goal(GREEN,!isPlayer1);
benswindell 1:58c735e369b1 410 t.start();
benswindell 1:58c735e369b1 411 } else if(p1Score == ScoreLimit) {
benswindell 1:58c735e369b1 412 FinishedGame = true;
benswindell 1:58c735e369b1 413 }
benswindell 1:58c735e369b1 414
benswindell 1:58c735e369b1 415 write_pbbuf(p1Score);
benswindell 1:58c735e369b1 416 }
benswindell 1:58c735e369b1 417 t.start();
benswindell 1:58c735e369b1 418 }
benswindell 1:58c735e369b1 419
benswindell 1:58c735e369b1 420 // Write goal LED
benswindell 1:58c735e369b1 421 void write_goal(unsigned int Colour, bool player1Goal)
benswindell 1:58c735e369b1 422 {
benswindell 1:58c735e369b1 423 for (int i = 0; i < WS2812_BUF; i++) {
benswindell 1:58c735e369b1 424 px.Set(i,Colour);
benswindell 1:58c735e369b1 425 }
benswindell 1:58c735e369b1 426
benswindell 1:58c735e369b1 427 if(player1Goal == 1) {
benswindell 1:58c735e369b1 428 ws4.write(px.getBuf());
benswindell 1:58c735e369b1 429 } else if (player1Goal == 0) {
benswindell 1:58c735e369b1 430 ws3.write(px.getBuf());
benswindell 1:58c735e369b1 431 }
benswindell 1:58c735e369b1 432
benswindell 1:58c735e369b1 433 }
benswindell 1:58c735e369b1 434
benswindell 1:58c735e369b1 435 // Turn off goal LEDS
benswindell 1:58c735e369b1 436 void turn_off_goal(unsigned int Colour)
benswindell 1:58c735e369b1 437 {
benswindell 1:58c735e369b1 438 for (int i = 0; i < WS2812_BUF; i++) {
benswindell 1:58c735e369b1 439 px.Set(i,Colour);
benswindell 1:58c735e369b1 440 }
benswindell 1:58c735e369b1 441 ws4.write(px.getBuf());
benswindell 1:58c735e369b1 442
benswindell 1:58c735e369b1 443 for (int i = 0; i < WS2812_BUF; i++) {
benswindell 1:58c735e369b1 444 px.Set(i,Colour);
benswindell 1:58c735e369b1 445 }
benswindell 1:58c735e369b1 446 ws4.write(px.getBuf());
alikin01 0:e610b1d38e80 447 }
alikin01 0:e610b1d38e80 448
alikin01 0:e610b1d38e80 449
benswindell 1:58c735e369b1 450 int main()
benswindell 1:58c735e369b1 451 {
benswindell 1:58c735e369b1 452 // Set brightness of the 4 LED strips
benswindell 1:58c735e369b1 453 ws.setII(0xFF);
benswindell 1:58c735e369b1 454 ws.useII(WS2812::GLOBAL);
benswindell 1:58c735e369b1 455 ws2.setII(0xFF);
benswindell 1:58c735e369b1 456 ws2.useII(WS2812::GLOBAL);
benswindell 1:58c735e369b1 457 ws3.setII(0xFF);
benswindell 1:58c735e369b1 458 ws3.useII(WS2812::GLOBAL);
benswindell 1:58c735e369b1 459 ws4.setII(0xFF);
benswindell 1:58c735e369b1 460 ws4.useII(WS2812::GLOBAL);
benswindell 1:58c735e369b1 461 setup();
benswindell 1:58c735e369b1 462
benswindell 1:58c735e369b1 463 while(1) {
benswindell 1:58c735e369b1 464 wait(1.0f);
benswindell 1:58c735e369b1 465 // Check timer to see if 3s or 5s has elapsed
benswindell 1:58c735e369b1 466 if(t.read() >= 3.0f && FinishedGame == false) {
benswindell 1:58c735e369b1 467 turn_off_goal(OFF);
benswindell 1:58c735e369b1 468 t.stop();
benswindell 1:58c735e369b1 469 t.reset();
benswindell 1:58c735e369b1 470 } else if(t.read() >= 5.0f && FinishedGame == true) {
benswindell 1:58c735e369b1 471 /* Some finished game code here */
benswindell 1:58c735e369b1 472 t.stop();
benswindell 1:58c735e369b1 473 t.reset();
benswindell 1:58c735e369b1 474 }
alikin01 0:e610b1d38e80 475 }
alikin01 0:e610b1d38e80 476 }
alikin01 0:e610b1d38e80 477
alikin01 0:e610b1d38e80 478
alikin01 0:e610b1d38e80 479
benswindell 1:58c735e369b1 480
benswindell 1:58c735e369b1 481