
updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
main.cpp@0:f2b739e846ae, 2017-02-27 (annotated)
- Committer:
- benswindell
- Date:
- Mon Feb 27 16:38:51 2017 +0000
- Revision:
- 0:f2b739e846ae
- Child:
- 1:24bc4d8ed2ae
Added in trace;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benswindell | 0:f2b739e846ae | 1 | #include "mbed.h" |
benswindell | 0:f2b739e846ae | 2 | #include "WS2812.h" |
benswindell | 0:f2b739e846ae | 3 | #include "PixelArray.h" |
benswindell | 0:f2b739e846ae | 4 | |
benswindell | 0:f2b739e846ae | 5 | #define WS2812_BUF 112 |
benswindell | 0:f2b739e846ae | 6 | #define NUM_COLORS 6 |
benswindell | 0:f2b739e846ae | 7 | #define NUM_LEDS_PER_COLOR 1 |
benswindell | 0:f2b739e846ae | 8 | |
benswindell | 0:f2b739e846ae | 9 | //-------- Colours ----------- |
benswindell | 0:f2b739e846ae | 10 | #define RED 0x2f0000 |
benswindell | 0:f2b739e846ae | 11 | #define YELLOW 0x2f2f00 |
benswindell | 0:f2b739e846ae | 12 | #define GREEN 0x002f00 |
benswindell | 0:f2b739e846ae | 13 | #define LIGHTBLUE 0x002f2f |
benswindell | 0:f2b739e846ae | 14 | #define DARKBLUE 0x00002f |
benswindell | 0:f2b739e846ae | 15 | #define BLUE 0x0000ff // Player scored a goal |
benswindell | 0:f2b739e846ae | 16 | #define PINK 0x2f002f |
benswindell | 0:f2b739e846ae | 17 | #define OFF 0x000000 |
benswindell | 0:f2b739e846ae | 18 | #define WHITE 0xffffff |
benswindell | 0:f2b739e846ae | 19 | #define ARMBLUE 0x128BAB |
benswindell | 0:f2b739e846ae | 20 | #define PURPLE 0xff0055 // Player has conceded a goal |
benswindell | 0:f2b739e846ae | 21 | |
benswindell | 0:f2b739e846ae | 22 | // GPIO |
benswindell | 0:f2b739e846ae | 23 | AnalogIn robotBreakBeam(A0); |
benswindell | 0:f2b739e846ae | 24 | AnalogIn playerBreakBeam(A1); |
benswindell | 0:f2b739e846ae | 25 | DigitalOut led_green(LED_GREEN, 1); |
benswindell | 0:f2b739e846ae | 26 | |
benswindell | 0:f2b739e846ae | 27 | // SERIAL |
benswindell | 0:f2b739e846ae | 28 | Serial pc(USBTX, USBRX); // tx, rx |
benswindell | 0:f2b739e846ae | 29 | |
benswindell | 0:f2b739e846ae | 30 | // LED STRIPS |
benswindell | 0:f2b739e846ae | 31 | // See the program page for information on the timing numbers |
benswindell | 0:f2b739e846ae | 32 | // The given numbers are for the K64F |
benswindell | 0:f2b739e846ae | 33 | WS2812 robotScoreLED(D9, WS2812_BUF, 0, 5, 5, 0); |
benswindell | 0:f2b739e846ae | 34 | WS2812 playerScoreLED(D8,WS2812_BUF, 0, 5, 5, 0); |
benswindell | 0:f2b739e846ae | 35 | WS2812 robotGoalLED(D7,WS2812_BUF, 0, 5, 5, 0); |
benswindell | 0:f2b739e846ae | 36 | WS2812 playerGoalLED(D6,WS2812_BUF, 0, 5, 5, 0); |
benswindell | 0:f2b739e846ae | 37 | |
benswindell | 0:f2b739e846ae | 38 | // LED Variables |
benswindell | 0:f2b739e846ae | 39 | bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G; |
benswindell | 0:f2b739e846ae | 40 | int seg1Array[112]; |
benswindell | 0:f2b739e846ae | 41 | int mainArray[11][122]; |
benswindell | 0:f2b739e846ae | 42 | PixelArray px(WS2812_BUF); |
benswindell | 0:f2b739e846ae | 43 | |
benswindell | 0:f2b739e846ae | 44 | // Score counters |
benswindell | 0:f2b739e846ae | 45 | int robotScore; |
benswindell | 0:f2b739e846ae | 46 | int playerScore; |
benswindell | 0:f2b739e846ae | 47 | int scoreLimit = 3; |
benswindell | 0:f2b739e846ae | 48 | bool finishedGame = false; |
benswindell | 0:f2b739e846ae | 49 | int endFlashes = 0; |
benswindell | 0:f2b739e846ae | 50 | int numFlashes; |
benswindell | 0:f2b739e846ae | 51 | |
benswindell | 0:f2b739e846ae | 52 | // Robot Bream Beam value |
benswindell | 0:f2b739e846ae | 53 | double prevRbbValue; // Previous Robot break beam value |
benswindell | 0:f2b739e846ae | 54 | double prevPbbValue; // Previous player break beam value |
benswindell | 0:f2b739e846ae | 55 | |
benswindell | 0:f2b739e846ae | 56 | // FUNCTION DECLERATIONS |
benswindell | 0:f2b739e846ae | 57 | void Write7Seg(int num); |
benswindell | 0:f2b739e846ae | 58 | void SetLEDArray(int x); |
benswindell | 0:f2b739e846ae | 59 | void WriteRobotGoal(bool scored); |
benswindell | 0:f2b739e846ae | 60 | void WritePlayerGoal(bool scored); |
benswindell | 0:f2b739e846ae | 61 | void WriteScores(); |
benswindell | 0:f2b739e846ae | 62 | void HandleGoal(bool hasRobotScored); |
benswindell | 0:f2b739e846ae | 63 | void WritePxScores(int line_num); |
benswindell | 0:f2b739e846ae | 64 | void WritePxGoal(unsigned int colour); |
benswindell | 0:f2b739e846ae | 65 | |
benswindell | 0:f2b739e846ae | 66 | |
benswindell | 0:f2b739e846ae | 67 | void setup() |
benswindell | 0:f2b739e846ae | 68 | { |
benswindell | 0:f2b739e846ae | 69 | // Set brightness of the 4 LED strips |
benswindell | 0:f2b739e846ae | 70 | robotScoreLED.setII(0xFF); |
benswindell | 0:f2b739e846ae | 71 | robotScoreLED.useII(WS2812::GLOBAL); |
benswindell | 0:f2b739e846ae | 72 | playerScoreLED.setII(0xFF); |
benswindell | 0:f2b739e846ae | 73 | playerScoreLED.useII(WS2812::GLOBAL); |
benswindell | 0:f2b739e846ae | 74 | robotGoalLED.setII(0xFF); |
benswindell | 0:f2b739e846ae | 75 | robotGoalLED.useII(WS2812::GLOBAL); |
benswindell | 0:f2b739e846ae | 76 | playerGoalLED.setII(0xFF); |
benswindell | 0:f2b739e846ae | 77 | playerGoalLED.useII(WS2812::GLOBAL); |
benswindell | 0:f2b739e846ae | 78 | |
benswindell | 0:f2b739e846ae | 79 | // Turn on green LED |
benswindell | 0:f2b739e846ae | 80 | led_green = 0; |
benswindell | 0:f2b739e846ae | 81 | |
benswindell | 0:f2b739e846ae | 82 | // Fills 2D array with data |
benswindell | 0:f2b739e846ae | 83 | for(int i=0; i<10; i++) { |
benswindell | 0:f2b739e846ae | 84 | Write7Seg(i); |
benswindell | 0:f2b739e846ae | 85 | } |
benswindell | 0:f2b739e846ae | 86 | |
benswindell | 0:f2b739e846ae | 87 | // Set scores to 0 |
benswindell | 0:f2b739e846ae | 88 | robotScore = 0; |
benswindell | 0:f2b739e846ae | 89 | playerScore = 0; |
benswindell | 0:f2b739e846ae | 90 | numFlashes = 0; |
benswindell | 0:f2b739e846ae | 91 | |
benswindell | 0:f2b739e846ae | 92 | // Set LEDS to start values |
benswindell | 0:f2b739e846ae | 93 | WriteScores(); |
benswindell | 0:f2b739e846ae | 94 | wait(0.01); |
benswindell | 0:f2b739e846ae | 95 | WritePlayerGoal(true); |
benswindell | 0:f2b739e846ae | 96 | wait(0.01); |
benswindell | 0:f2b739e846ae | 97 | WriteRobotGoal(true); |
benswindell | 0:f2b739e846ae | 98 | |
benswindell | 0:f2b739e846ae | 99 | // Turn off green LED |
benswindell | 0:f2b739e846ae | 100 | led_green = 1; |
benswindell | 0:f2b739e846ae | 101 | } |
benswindell | 0:f2b739e846ae | 102 | |
benswindell | 0:f2b739e846ae | 103 | // Set segment variables |
benswindell | 0:f2b739e846ae | 104 | void Write7Seg(int num) |
benswindell | 0:f2b739e846ae | 105 | { |
benswindell | 0:f2b739e846ae | 106 | switch (num) { |
benswindell | 0:f2b739e846ae | 107 | case 0 : |
benswindell | 0:f2b739e846ae | 108 | // Off |
benswindell | 0:f2b739e846ae | 109 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 110 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 111 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 112 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 113 | seg1E = 1; |
benswindell | 0:f2b739e846ae | 114 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 115 | seg1G = 0; |
benswindell | 0:f2b739e846ae | 116 | |
benswindell | 0:f2b739e846ae | 117 | SetLEDArray(0); |
benswindell | 0:f2b739e846ae | 118 | |
benswindell | 0:f2b739e846ae | 119 | break; |
benswindell | 0:f2b739e846ae | 120 | |
benswindell | 0:f2b739e846ae | 121 | case 1 : |
benswindell | 0:f2b739e846ae | 122 | // 1 |
benswindell | 0:f2b739e846ae | 123 | seg1A = 0; |
benswindell | 0:f2b739e846ae | 124 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 125 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 126 | seg1D = 0; |
benswindell | 0:f2b739e846ae | 127 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 128 | seg1F = 0; |
benswindell | 0:f2b739e846ae | 129 | seg1G = 0; |
benswindell | 0:f2b739e846ae | 130 | |
benswindell | 0:f2b739e846ae | 131 | SetLEDArray(1); |
benswindell | 0:f2b739e846ae | 132 | break; |
benswindell | 0:f2b739e846ae | 133 | |
benswindell | 0:f2b739e846ae | 134 | case 2 : |
benswindell | 0:f2b739e846ae | 135 | // 2 |
benswindell | 0:f2b739e846ae | 136 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 137 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 138 | seg1C = 0; |
benswindell | 0:f2b739e846ae | 139 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 140 | seg1E = 1; |
benswindell | 0:f2b739e846ae | 141 | seg1F = 0; |
benswindell | 0:f2b739e846ae | 142 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 143 | |
benswindell | 0:f2b739e846ae | 144 | SetLEDArray(2); |
benswindell | 0:f2b739e846ae | 145 | |
benswindell | 0:f2b739e846ae | 146 | break; |
benswindell | 0:f2b739e846ae | 147 | |
benswindell | 0:f2b739e846ae | 148 | case 3 : |
benswindell | 0:f2b739e846ae | 149 | // 3 |
benswindell | 0:f2b739e846ae | 150 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 151 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 152 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 153 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 154 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 155 | seg1F = 0; |
benswindell | 0:f2b739e846ae | 156 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 157 | |
benswindell | 0:f2b739e846ae | 158 | SetLEDArray(3); |
benswindell | 0:f2b739e846ae | 159 | break; |
benswindell | 0:f2b739e846ae | 160 | |
benswindell | 0:f2b739e846ae | 161 | case 4: |
benswindell | 0:f2b739e846ae | 162 | // 4 |
benswindell | 0:f2b739e846ae | 163 | seg1A = 0; |
benswindell | 0:f2b739e846ae | 164 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 165 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 166 | seg1D = 0; |
benswindell | 0:f2b739e846ae | 167 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 168 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 169 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 170 | |
benswindell | 0:f2b739e846ae | 171 | SetLEDArray(4); |
benswindell | 0:f2b739e846ae | 172 | |
benswindell | 0:f2b739e846ae | 173 | break; |
benswindell | 0:f2b739e846ae | 174 | |
benswindell | 0:f2b739e846ae | 175 | case 5: |
benswindell | 0:f2b739e846ae | 176 | // 5 |
benswindell | 0:f2b739e846ae | 177 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 178 | seg1B = 0; |
benswindell | 0:f2b739e846ae | 179 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 180 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 181 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 182 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 183 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 184 | |
benswindell | 0:f2b739e846ae | 185 | SetLEDArray(5); |
benswindell | 0:f2b739e846ae | 186 | |
benswindell | 0:f2b739e846ae | 187 | break; |
benswindell | 0:f2b739e846ae | 188 | |
benswindell | 0:f2b739e846ae | 189 | case 6: |
benswindell | 0:f2b739e846ae | 190 | // 6 |
benswindell | 0:f2b739e846ae | 191 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 192 | seg1B = 0; |
benswindell | 0:f2b739e846ae | 193 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 194 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 195 | seg1E = 1; |
benswindell | 0:f2b739e846ae | 196 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 197 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 198 | |
benswindell | 0:f2b739e846ae | 199 | SetLEDArray(6); |
benswindell | 0:f2b739e846ae | 200 | |
benswindell | 0:f2b739e846ae | 201 | break; |
benswindell | 0:f2b739e846ae | 202 | |
benswindell | 0:f2b739e846ae | 203 | case 7: |
benswindell | 0:f2b739e846ae | 204 | // 7 |
benswindell | 0:f2b739e846ae | 205 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 206 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 207 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 208 | seg1D = 0; |
benswindell | 0:f2b739e846ae | 209 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 210 | seg1F = 0; |
benswindell | 0:f2b739e846ae | 211 | seg1G = 0; |
benswindell | 0:f2b739e846ae | 212 | |
benswindell | 0:f2b739e846ae | 213 | SetLEDArray(7); |
benswindell | 0:f2b739e846ae | 214 | |
benswindell | 0:f2b739e846ae | 215 | break; |
benswindell | 0:f2b739e846ae | 216 | |
benswindell | 0:f2b739e846ae | 217 | case 8: |
benswindell | 0:f2b739e846ae | 218 | // 8 |
benswindell | 0:f2b739e846ae | 219 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 220 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 221 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 222 | seg1D = 1; |
benswindell | 0:f2b739e846ae | 223 | seg1E = 1; |
benswindell | 0:f2b739e846ae | 224 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 225 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 226 | |
benswindell | 0:f2b739e846ae | 227 | SetLEDArray(8); |
benswindell | 0:f2b739e846ae | 228 | break; |
benswindell | 0:f2b739e846ae | 229 | |
benswindell | 0:f2b739e846ae | 230 | case 9: |
benswindell | 0:f2b739e846ae | 231 | // 9 |
benswindell | 0:f2b739e846ae | 232 | seg1A = 1; |
benswindell | 0:f2b739e846ae | 233 | seg1B = 1; |
benswindell | 0:f2b739e846ae | 234 | seg1C = 1; |
benswindell | 0:f2b739e846ae | 235 | seg1D = 0; |
benswindell | 0:f2b739e846ae | 236 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 237 | seg1F = 1; |
benswindell | 0:f2b739e846ae | 238 | seg1G = 1; |
benswindell | 0:f2b739e846ae | 239 | |
benswindell | 0:f2b739e846ae | 240 | SetLEDArray(9); |
benswindell | 0:f2b739e846ae | 241 | break; |
benswindell | 0:f2b739e846ae | 242 | |
benswindell | 0:f2b739e846ae | 243 | case 10: |
benswindell | 0:f2b739e846ae | 244 | // OFF |
benswindell | 0:f2b739e846ae | 245 | seg1A = 0; |
benswindell | 0:f2b739e846ae | 246 | seg1B = 0; |
benswindell | 0:f2b739e846ae | 247 | seg1C = 0; |
benswindell | 0:f2b739e846ae | 248 | seg1D = 0; |
benswindell | 0:f2b739e846ae | 249 | seg1E = 0; |
benswindell | 0:f2b739e846ae | 250 | seg1F = 0; |
benswindell | 0:f2b739e846ae | 251 | seg1G = 0; |
benswindell | 0:f2b739e846ae | 252 | |
benswindell | 0:f2b739e846ae | 253 | SetLEDArray(10); |
benswindell | 0:f2b739e846ae | 254 | break; |
benswindell | 0:f2b739e846ae | 255 | |
benswindell | 0:f2b739e846ae | 256 | default : |
benswindell | 0:f2b739e846ae | 257 | |
benswindell | 0:f2b739e846ae | 258 | break; |
benswindell | 0:f2b739e846ae | 259 | |
benswindell | 0:f2b739e846ae | 260 | } |
benswindell | 0:f2b739e846ae | 261 | } |
benswindell | 0:f2b739e846ae | 262 | |
benswindell | 0:f2b739e846ae | 263 | // Write segment config to main array |
benswindell | 0:f2b739e846ae | 264 | void SetLEDArray(int x) |
benswindell | 0:f2b739e846ae | 265 | { |
benswindell | 0:f2b739e846ae | 266 | for (int i = 0; i < WS2812_BUF; i++) { |
benswindell | 0:f2b739e846ae | 267 | if (i < 16) { |
benswindell | 0:f2b739e846ae | 268 | mainArray[x][i] = seg1A; |
benswindell | 0:f2b739e846ae | 269 | } |
benswindell | 0:f2b739e846ae | 270 | |
benswindell | 0:f2b739e846ae | 271 | if ( i >= 16 && i < 32) { |
benswindell | 0:f2b739e846ae | 272 | mainArray[x][i] = seg1B; |
benswindell | 0:f2b739e846ae | 273 | } |
benswindell | 0:f2b739e846ae | 274 | |
benswindell | 0:f2b739e846ae | 275 | if (i >= 32 && i < 48) { |
benswindell | 0:f2b739e846ae | 276 | mainArray[x][i] = seg1C; |
benswindell | 0:f2b739e846ae | 277 | } |
benswindell | 0:f2b739e846ae | 278 | |
benswindell | 0:f2b739e846ae | 279 | if (i >= 48 && i < 64) { |
benswindell | 0:f2b739e846ae | 280 | mainArray[x][i]= seg1D; |
benswindell | 0:f2b739e846ae | 281 | } |
benswindell | 0:f2b739e846ae | 282 | |
benswindell | 0:f2b739e846ae | 283 | if ( i >= 64 && i < 80) { |
benswindell | 0:f2b739e846ae | 284 | mainArray[x][i] = seg1E; |
benswindell | 0:f2b739e846ae | 285 | } |
benswindell | 0:f2b739e846ae | 286 | |
benswindell | 0:f2b739e846ae | 287 | if (i >= 80 && i < 96) { |
benswindell | 0:f2b739e846ae | 288 | mainArray[x][i] = seg1F; |
benswindell | 0:f2b739e846ae | 289 | } |
benswindell | 0:f2b739e846ae | 290 | |
benswindell | 0:f2b739e846ae | 291 | if ( i >= 96 && i < 112) { |
benswindell | 0:f2b739e846ae | 292 | mainArray[x][i] = seg1G; |
benswindell | 0:f2b739e846ae | 293 | } |
benswindell | 0:f2b739e846ae | 294 | }// FOR LOOP |
benswindell | 0:f2b739e846ae | 295 | } |
benswindell | 0:f2b739e846ae | 296 | |
benswindell | 0:f2b739e846ae | 297 | // Write to player 1 LED (ROBOT) |
benswindell | 0:f2b739e846ae | 298 | void WriteRobotGoal(bool scored) |
benswindell | 0:f2b739e846ae | 299 | { |
benswindell | 0:f2b739e846ae | 300 | if(scored == true) |
benswindell | 0:f2b739e846ae | 301 | { |
benswindell | 0:f2b739e846ae | 302 | WritePxGoal(BLUE); |
benswindell | 0:f2b739e846ae | 303 | } else { |
benswindell | 0:f2b739e846ae | 304 | WritePxGoal(PURPLE); |
benswindell | 0:f2b739e846ae | 305 | } |
benswindell | 0:f2b739e846ae | 306 | robotGoalLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 307 | } |
benswindell | 0:f2b739e846ae | 308 | |
benswindell | 0:f2b739e846ae | 309 | // Write to player 1 LED (ROBOT) |
benswindell | 0:f2b739e846ae | 310 | void WritePlayerGoal(bool scored) |
benswindell | 0:f2b739e846ae | 311 | { |
benswindell | 0:f2b739e846ae | 312 | if(scored == true) |
benswindell | 0:f2b739e846ae | 313 | { |
benswindell | 0:f2b739e846ae | 314 | WritePxGoal(BLUE); |
benswindell | 0:f2b739e846ae | 315 | } else { |
benswindell | 0:f2b739e846ae | 316 | WritePxGoal(PURPLE); |
benswindell | 0:f2b739e846ae | 317 | } |
benswindell | 0:f2b739e846ae | 318 | playerGoalLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 319 | } |
benswindell | 0:f2b739e846ae | 320 | |
benswindell | 0:f2b739e846ae | 321 | void WriteGoalsOff() |
benswindell | 0:f2b739e846ae | 322 | { |
benswindell | 0:f2b739e846ae | 323 | WritePxGoal(OFF); |
benswindell | 0:f2b739e846ae | 324 | robotGoalLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 325 | WritePxGoal(OFF); |
benswindell | 0:f2b739e846ae | 326 | playerGoalLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 327 | } |
benswindell | 0:f2b739e846ae | 328 | |
benswindell | 0:f2b739e846ae | 329 | void WriteScores() |
benswindell | 0:f2b739e846ae | 330 | { |
benswindell | 0:f2b739e846ae | 331 | WritePxScores(playerScore); |
benswindell | 0:f2b739e846ae | 332 | playerScoreLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 333 | wait(0.01); |
benswindell | 0:f2b739e846ae | 334 | WritePxScores(robotScore); |
benswindell | 0:f2b739e846ae | 335 | robotScoreLED.write(px.getBuf()); |
benswindell | 0:f2b739e846ae | 336 | } |
benswindell | 0:f2b739e846ae | 337 | |
benswindell | 0:f2b739e846ae | 338 | // Write pixel array |
benswindell | 0:f2b739e846ae | 339 | void WritePxScores(int line_num) |
benswindell | 0:f2b739e846ae | 340 | { |
benswindell | 0:f2b739e846ae | 341 | for (int i = 0; i < WS2812_BUF; i++) { |
benswindell | 0:f2b739e846ae | 342 | if (mainArray[line_num][i] == 0) { |
benswindell | 0:f2b739e846ae | 343 | px.Set(i,OFF); |
benswindell | 0:f2b739e846ae | 344 | } |
benswindell | 0:f2b739e846ae | 345 | |
benswindell | 0:f2b739e846ae | 346 | if (mainArray[line_num][i] == 1) { |
benswindell | 0:f2b739e846ae | 347 | px.Set(i,LIGHTBLUE); |
benswindell | 0:f2b739e846ae | 348 | } |
benswindell | 0:f2b739e846ae | 349 | } |
benswindell | 0:f2b739e846ae | 350 | } |
benswindell | 0:f2b739e846ae | 351 | |
benswindell | 0:f2b739e846ae | 352 | void WritePxGoal(unsigned int colour) |
benswindell | 0:f2b739e846ae | 353 | { |
benswindell | 0:f2b739e846ae | 354 | for (int i = 0; i < WS2812_BUF; i++) { |
benswindell | 0:f2b739e846ae | 355 | px.Set(i,colour); |
benswindell | 0:f2b739e846ae | 356 | } |
benswindell | 0:f2b739e846ae | 357 | } |
benswindell | 0:f2b739e846ae | 358 | |
benswindell | 0:f2b739e846ae | 359 | void HandleGoal(bool hasRobotScored) |
benswindell | 0:f2b739e846ae | 360 | { |
benswindell | 0:f2b739e846ae | 361 | if(hasRobotScored == true) { |
benswindell | 0:f2b739e846ae | 362 | robotScore++; |
benswindell | 0:f2b739e846ae | 363 | WriteRobotGoal(true); |
benswindell | 0:f2b739e846ae | 364 | wait(0.01); |
benswindell | 0:f2b739e846ae | 365 | WritePlayerGoal(false); |
benswindell | 0:f2b739e846ae | 366 | wait(0.01); |
benswindell | 0:f2b739e846ae | 367 | WriteScores(); |
benswindell | 0:f2b739e846ae | 368 | } else { |
benswindell | 0:f2b739e846ae | 369 | playerScore++; |
benswindell | 0:f2b739e846ae | 370 | WriteRobotGoal(false); |
benswindell | 0:f2b739e846ae | 371 | wait(0.01); |
benswindell | 0:f2b739e846ae | 372 | WritePlayerGoal(true); |
benswindell | 0:f2b739e846ae | 373 | wait(0.01); |
benswindell | 0:f2b739e846ae | 374 | WriteScores(); |
benswindell | 0:f2b739e846ae | 375 | } |
benswindell | 0:f2b739e846ae | 376 | |
benswindell | 0:f2b739e846ae | 377 | wait(5); |
benswindell | 0:f2b739e846ae | 378 | WriteGoalsOff(); |
benswindell | 0:f2b739e846ae | 379 | } |
benswindell | 0:f2b739e846ae | 380 | |
benswindell | 0:f2b739e846ae | 381 | int main() |
benswindell | 0:f2b739e846ae | 382 | { |
benswindell | 0:f2b739e846ae | 383 | while(1) { |
benswindell | 0:f2b739e846ae | 384 | double rbbValue = robotBreakBeam; // Read Robot Break beam |
benswindell | 0:f2b739e846ae | 385 | double pbbValue = playerBreakBeam; // Read Player Break beam |
benswindell | 0:f2b739e846ae | 386 | |
benswindell | 0:f2b739e846ae | 387 | // IF PLAYER HAS SCORED A GOAL |
benswindell | 0:f2b739e846ae | 388 | if ((prevRbbValue - rbbValue)>0.01) { |
benswindell | 0:f2b739e846ae | 389 | pc.printf("Player has scored a goal \n\r"); |
benswindell | 0:f2b739e846ae | 390 | HandleGoal(false); |
benswindell | 0:f2b739e846ae | 391 | } |
benswindell | 0:f2b739e846ae | 392 | |
benswindell | 0:f2b739e846ae | 393 | // IF ROBOT HAS SCORED A GOAL |
benswindell | 0:f2b739e846ae | 394 | if ((prevPbbValue - pbbValue) > 0.01) { |
benswindell | 0:f2b739e846ae | 395 | pc.printf("Robot has scored a goal \n\r"); |
benswindell | 0:f2b739e846ae | 396 | HandleGoal(true); |
benswindell | 0:f2b739e846ae | 397 | } |
benswindell | 0:f2b739e846ae | 398 | |
benswindell | 0:f2b739e846ae | 399 | prevRbbValue = rbbValue; |
benswindell | 0:f2b739e846ae | 400 | prevPbbValue = pbbValue; |
benswindell | 0:f2b739e846ae | 401 | |
benswindell | 0:f2b739e846ae | 402 | pc.printf("PlayerGoal: %f, RobotGoal: %f",pbbValue,rbbValue); |
benswindell | 0:f2b739e846ae | 403 | pc.printf("Player: %i v %i : Robot",playerScore,robotScore); |
benswindell | 0:f2b739e846ae | 404 | wait(0.01); |
benswindell | 0:f2b739e846ae | 405 | |
benswindell | 0:f2b739e846ae | 406 | } |
benswindell | 0:f2b739e846ae | 407 | } |