updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
main.cpp
00001 #include "main.h" 00002 00003 int main() 00004 { 00005 Setup(); 00006 00007 pc.printf("\nSETUP(IDLE)"); 00008 00009 while(1) { 00010 00011 if (idle_flag == 0) { // IDLE 00012 00013 IdleStateProtocol(); 00014 00015 } 00016 00017 if (idle_flag == 1) { // PLAY 00018 00019 PlayStateProtocol(); 00020 00021 } 00022 00023 wait(0.02); 00024 00025 } 00026 00027 } 00028 00029 void Setup() 00030 { 00031 // Turn on green LED 00032 led_green = 0; 00033 00034 // enable the internal pull-down resistor on idleButton 00035 idleButton.mode(PullDown); 00036 00037 idleButton.attach_asserted(&idleButtonISR); 00038 00039 idleButton.setSampleFrequency( 10000 ); 00040 00041 // Set brightness of the 4 LED strips 00042 robotScoreLED.setII(0x30); 00043 robotScoreLED.useII(WS2812::GLOBAL); 00044 playerScoreLED.setII(0x30); 00045 playerScoreLED.useII(WS2812::GLOBAL); 00046 00047 // Set scores to 0 00048 robotScore = 0; 00049 playerScore = 0; 00050 numFlashes = 0; 00051 00052 memset(mainArray, 0, sizeof mainArray); 00053 00054 // Turn off green LED 00055 led_green = 1; 00056 00057 } 00058 00059 void IdleStateProtocol() 00060 { 00061 if (idle_button_pressed == 1) { // button just pressed 00062 00063 pc.printf("\nIDLE"); 00064 00065 PlayToIdleTransition(); 00066 00067 } 00068 00069 FigureOf8Animation(true,true,true,true,1); 00070 CircleAnimation(true,true,true,true,1); 00071 00072 } 00073 00074 void PlayStateProtocol() 00075 { 00076 if (idle_button_pressed == 1) { // button just pressed 00077 00078 pc.printf("\nPLAY"); 00079 00080 if (previous_state == 0) { 00081 00082 IdleToPlayTransition(); 00083 00084 } 00085 else { 00086 00087 idle_button_pressed = 0; 00088 00089 DrainAnimation(true,false,true,false); 00090 00091 wait(1); 00092 00093 robotScore = 0; 00094 00095 playerScore = 0; 00096 00097 WriteScores(); 00098 00099 } 00100 00101 } 00102 00103 double rbbValue = robotBreakBeam; // Read Robot Break beam 00104 double pbbValue = playerBreakBeam; // Read Player Break beam 00105 00106 // IF PLAYER HAS SCORED A GOAL 00107 if (((prevRbbValue - rbbValue) > 0.03) || (PB1==0)) { 00108 pc.printf("Player has scored a goal \n\r"); 00109 HandleGoal(false); 00110 } 00111 00112 // IF ROBOT HAS SCORED A GOAL 00113 if (((prevPbbValue - pbbValue) > 0.03) || (PB2==0)) { 00114 pc.printf("Robot has scored a goal \n\r"); 00115 HandleGoal(true); 00116 } 00117 00118 prevRbbValue = rbbValue; 00119 prevPbbValue = pbbValue; 00120 00121 pc.printf("PlayerGoal: %f, RobotGoal: %f \r\n",pbbValue,rbbValue); 00122 pc.printf("Player: %i v %i : Robot \r\n",playerScore,robotScore); 00123 00124 } 00125 00126 void IdleToPlayTransition() 00127 { 00128 // reset scores 00129 robotScore = 0; 00130 playerScore = 0; 00131 00132 // reset array 00133 memset(mainArray, 0, sizeof mainArray); 00134 00135 // form closed loop of LEDs around exterior of display in opposite directions for robot and player scores 00136 for (int i = 9; i < 115; i++) { 00137 00138 if (i < 104) { 00139 mainArray[0][i] = 1; 00140 } 00141 if (i > 103) { 00142 mainArray[0][i-104] = 1; 00143 } 00144 if (i < 19) { 00145 mainArray[1][18-i] = 1; 00146 } 00147 if (i > 18) { 00148 mainArray[1][122-i] = 1; 00149 } 00150 00151 wait_ms(10); 00152 00153 WritePxAnimation(0,false,true); 00154 playerScoreLED.write(playerScorePx.getBuf()); 00155 WritePxAnimation(1,true,true); 00156 robotScoreLED.write(robotScorePx.getBuf()); 00157 00158 } 00159 00160 // drain closed loop away 00161 DrainAnimation(true,true,true,true); 00162 00163 wait(1); 00164 00165 // flash 0-0 on display 00166 WriteScores(); 00167 00168 idle_button_pressed = 0; 00169 00170 } 00171 00172 void PlayToIdleTransition() 00173 { 00174 // reset scores and main array 00175 robotScore = 0; 00176 playerScore = 0; 00177 memset(mainArray, 0, sizeof mainArray); 00178 00179 FigureOf8Animation(true,true,true,true,1); 00180 00181 idle_button_pressed = 0; 00182 00183 } 00184 00185 // set segment number patterns 00186 void SetNumberPatterns() 00187 { 00188 for (int num = 0; num < 11; num++) { 00189 00190 switch (num) { 00191 case 0 : 00192 // 0 00193 seg1A = 1; 00194 seg1B = 1; 00195 seg1C = 1; 00196 seg1D = 1; 00197 seg1E = 1; 00198 seg1F = 1; 00199 seg1G = 0; 00200 00201 SetLEDArray(0); 00202 break; 00203 00204 case 1 : 00205 // 1 00206 seg1A = 0; 00207 seg1B = 1; 00208 seg1C = 1; 00209 seg1D = 0; 00210 seg1E = 0; 00211 seg1F = 0; 00212 seg1G = 0; 00213 00214 SetLEDArray(1); 00215 break; 00216 00217 case 2 : 00218 // 2 00219 seg1A = 1; 00220 seg1B = 1; 00221 seg1C = 0; 00222 seg1D = 1; 00223 seg1E = 1; 00224 seg1F = 0; 00225 seg1G = 1; 00226 00227 SetLEDArray(2); 00228 break; 00229 00230 case 3 : 00231 // 3 00232 seg1A = 1; 00233 seg1B = 1; 00234 seg1C = 1; 00235 seg1D = 1; 00236 seg1E = 0; 00237 seg1F = 0; 00238 seg1G = 1; 00239 00240 SetLEDArray(3); 00241 break; 00242 00243 case 4: 00244 // 4 00245 seg1A = 0; 00246 seg1B = 1; 00247 seg1C = 1; 00248 seg1D = 0; 00249 seg1E = 0; 00250 seg1F = 1; 00251 seg1G = 1; 00252 00253 SetLEDArray(4); 00254 break; 00255 00256 case 5: 00257 // 5 00258 seg1A = 1; 00259 seg1B = 0; 00260 seg1C = 1; 00261 seg1D = 1; 00262 seg1E = 0; 00263 seg1F = 1; 00264 seg1G = 1; 00265 00266 SetLEDArray(5); 00267 break; 00268 00269 case 6: 00270 // 6 00271 seg1A = 1; 00272 seg1B = 0; 00273 seg1C = 1; 00274 seg1D = 1; 00275 seg1E = 1; 00276 seg1F = 1; 00277 seg1G = 1; 00278 00279 SetLEDArray(6); 00280 break; 00281 00282 case 7: 00283 // 7 00284 seg1A = 1; 00285 seg1B = 1; 00286 seg1C = 1; 00287 seg1D = 0; 00288 seg1E = 0; 00289 seg1F = 0; 00290 seg1G = 0; 00291 00292 SetLEDArray(7); 00293 break; 00294 00295 case 8: 00296 // 8 00297 seg1A = 1; 00298 seg1B = 1; 00299 seg1C = 1; 00300 seg1D = 1; 00301 seg1E = 1; 00302 seg1F = 1; 00303 seg1G = 1; 00304 00305 SetLEDArray(8); 00306 break; 00307 00308 case 9: 00309 // 9 00310 seg1A = 1; 00311 seg1B = 1; 00312 seg1C = 1; 00313 seg1D = 0; 00314 seg1E = 0; 00315 seg1F = 1; 00316 seg1G = 1; 00317 00318 SetLEDArray(9); 00319 break; 00320 00321 case 10: 00322 // OFF 00323 seg1A = 0; 00324 seg1B = 0; 00325 seg1C = 0; 00326 seg1D = 0; 00327 seg1E = 0; 00328 seg1F = 0; 00329 seg1G = 0; 00330 00331 SetLEDArray(10); 00332 break; 00333 00334 default : 00335 00336 break; 00337 00338 } 00339 00340 } 00341 00342 } 00343 00344 // Write segment config to main array 00345 void SetLEDArray(int x) 00346 { 00347 for (int i = 0; i < WS2812_BUF; i++) { 00348 if (i < 18) { 00349 mainArray[x][i] = seg1A; 00350 } 00351 00352 if ( i >= 18 && i < 35) { 00353 mainArray[x][i] = seg1B; 00354 } 00355 00356 if (i >= 35 && i < 52) { 00357 mainArray[x][i] = seg1C; 00358 } 00359 00360 if (i >= 52 && i < 70) { 00361 mainArray[x][i]= seg1D; 00362 } 00363 00364 if ( i >= 70 && i < 87) { 00365 mainArray[x][i] = seg1E; 00366 } 00367 00368 if (i >= 87 && i < 104) { 00369 mainArray[x][i] = seg1F; 00370 } 00371 00372 if ( i >= 104 && i < 122) { 00373 mainArray[x][i] = seg1G; 00374 } 00375 } 00376 } 00377 00378 // Update both Score LEDs with the current score 00379 void WriteScores() 00380 { 00381 SetNumberPatterns(); 00382 WritePxAnimation(playerScore,false,false); 00383 playerScoreLED.write(playerScorePx.getBuf()); 00384 wait(0.01); 00385 WritePxAnimation(robotScore,true,false); 00386 robotScoreLED.write(robotScorePx.getBuf()); 00387 } 00388 00389 // Write Pixel array with either random colour pattern or in standard blue 00390 void WritePxAnimation(int line_num,bool isRobot,bool colour) 00391 { 00392 if (colour == true) { // random colours 00393 if(isRobot == true) { 00394 00395 for (int i = 0; i < WS2812_BUF; i++) { 00396 if (mainArray[line_num][i] == 0) { 00397 robotScorePx.Set(i,OFF); 00398 } 00399 00400 if (mainArray[line_num][i] == 1) { 00401 robotScorePx.Set(i,rand_colors[rand() % 10]); 00402 } 00403 } 00404 } else { 00405 for (int i = 0; i < WS2812_BUF; i++) { 00406 if (mainArray[line_num][i] == 0) { 00407 playerScorePx.Set(i,OFF); 00408 } 00409 00410 if (mainArray[line_num][i] == 1) { 00411 playerScorePx.Set(i,rand_colors[rand() % 10]); 00412 } 00413 } 00414 } 00415 } else { // blue 00416 if(isRobot == true) { 00417 00418 for (int i = 0; i < WS2812_BUF; i++) { 00419 if (mainArray[line_num][i] == 0) { 00420 robotScorePx.Set(i,OFF); 00421 } 00422 00423 if (mainArray[line_num][i] == 1) { 00424 robotScorePx.Set(i,BLUE); 00425 } 00426 } 00427 } else { 00428 for (int i = 0; i < WS2812_BUF; i++) { 00429 if (mainArray[line_num][i] == 0) { 00430 playerScorePx.Set(i,OFF); 00431 } 00432 00433 if (mainArray[line_num][i] == 1) { 00434 playerScorePx.Set(i,BLUE); 00435 } 00436 } 00437 } 00438 00439 } 00440 } 00441 00442 // Handle behaviour for the goal scored event 00443 void HandleGoal(bool hasRobotScored) 00444 { 00445 GoalAnimation(hasRobotScored); 00446 00447 // If either player reaches the score limit, then call HandleWin() 00448 if(robotScore == scoreLimit || playerScore == scoreLimit) { 00449 HandleWin(); 00450 } 00451 } 00452 00453 // Handle behaviour when either the player or robot has won a game. 00454 void HandleWin() 00455 { 00456 // Initalise variable as true 00457 bool isRobotWinner = true; 00458 00459 // Decide if the robot is the winner. If not, then change isRobotWinner to false 00460 if(playerScore == scoreLimit) { 00461 00462 isRobotWinner = false; 00463 pc.printf("Player won!"); 00464 WinAnimation(isRobotWinner); 00465 00466 } else { 00467 pc.printf("Robot won!"); 00468 WinAnimation(isRobotWinner); 00469 00470 } 00471 00472 // Reset scores then write to LEDs 00473 robotScore = 0; 00474 playerScore = 0; 00475 00476 // IDLE state 00477 idle_flag = 0; 00478 00479 idle_button_pressed = 0; // allow interrupt to fire 00480 00481 memset(mainArray, 0, sizeof mainArray); 00482 00483 } 00484 00485 // animation for when a goal is scored 00486 void GoalAnimation(bool hasRobotScored) 00487 { 00488 if(hasRobotScored == true) { 00489 00490 // clear current score 00491 switch (robotScore) { 00492 case 0: 00493 ZeroOutAnimation(true,false,false,false); 00494 break; 00495 case 1: 00496 OneOutAnimation(true,false,false,false); 00497 break; 00498 case 2: 00499 TwoOutAnimation(true,false,false,false); 00500 break; 00501 case 3: 00502 ThreeOutAnimation(true,false,false,false); 00503 default : 00504 break; 00505 } 00506 00507 // increment score 00508 robotScore++; 00509 wait_ms(250); 00510 00511 // write new score 00512 switch (robotScore) { 00513 case 0: 00514 ZeroInAnimation(true,false,false,false); 00515 break; 00516 case 1: 00517 OneInAnimation(true,false,false,false); 00518 break; 00519 case 2: 00520 TwoInAnimation(true,false,false,false); 00521 break; 00522 case 3: 00523 ThreeInAnimation(true,true,false,false); // with random colour pattern 00524 default : 00525 break; 00526 } 00527 00528 } else { 00529 00530 // clear current score 00531 switch (playerScore) { 00532 case 0: 00533 ZeroOutAnimation(false,false,true,false); 00534 break; 00535 case 1: 00536 OneOutAnimation(false,false,true,false); 00537 break; 00538 case 2: 00539 TwoOutAnimation(false,false,true,false); 00540 break; 00541 case 3: 00542 ThreeOutAnimation(false,false ,true,false); 00543 default : 00544 break; 00545 } 00546 00547 // increment score 00548 playerScore++; 00549 wait_ms(250); 00550 00551 // write new score 00552 switch (playerScore) { 00553 case 0: 00554 ZeroInAnimation(false,false,true,false); 00555 break; 00556 case 1: 00557 OneInAnimation(false,false,true,false); 00558 break; 00559 case 2: 00560 TwoInAnimation(false,false,true,false); 00561 break; 00562 case 3: 00563 ThreeInAnimation(false,false,true,true); // with random colour pattern 00564 default : 00565 break; 00566 } 00567 } 00568 00569 } 00570 00571 // animation when player or robot win the game 00572 void WinAnimation(bool isRobotWinner) 00573 { 00574 if(isRobotWinner == false) { 00575 00576 // dim brightness of the robot score because it lost 00577 robotScoreLED.setII(0x10); 00578 robotScoreLED.useII(WS2812::GLOBAL); 00579 robotScoreLED.write(robotScorePx.getBuf()); // rewrite buffer to change brightness 00580 00581 for (int i = 0; i < 80; i++) { // flash player score with changing random colours 00582 WritePxAnimation(playerScore,false,true); 00583 playerScoreLED.write(playerScorePx.getBuf()); 00584 wait_ms(50); 00585 } 00586 00587 DrainAnimation(true,false,true,true); // drain both scores away with the player score in random colours 00588 00589 // reset robot score brightness 00590 robotScoreLED.setII(0x30); 00591 robotScoreLED.useII(WS2812::GLOBAL); 00592 00593 } else { 00594 00595 // dim brightness of the player score because they lost 00596 playerScoreLED.setII(0x10); 00597 playerScoreLED.useII(WS2812::GLOBAL); 00598 playerScoreLED.write(playerScorePx.getBuf()); // rewrite buffer to change brightness 00599 00600 for (int i = 0; i < 80; i++) { // flash robot score with changing random colours 00601 WritePxAnimation(robotScore,true,true); 00602 robotScoreLED.write(robotScorePx.getBuf()); 00603 wait_ms(50); 00604 } 00605 00606 DrainAnimation(true,true,true,false); // drain both scores away with the robot score in random colours 00607 00608 // reset player score brightness 00609 playerScoreLED.setII(0x30); 00610 playerScoreLED.useII(WS2812::GLOBAL); 00611 } 00612 00613 wait(3); 00614 00615 } 00616 00617 // LEDs snake in a figure of 8 pattern in a group of 10 00618 void FigureOf8Animation(bool robot, bool robotColour, bool player, bool playerColour, int numberOfRepititions) 00619 { 00620 for (int loops = 0; loops < numberOfRepititions; loops++) { 00621 00622 for (int i = 0; i < 9; i++) { // loop for LED snake to separate from centre of segment A 00623 00624 mainArray[0][9+i] = 1; 00625 mainArray[1][8-i] = 1; 00626 if (i < 9) { 00627 mainArray[0][i] = 0; 00628 mainArray[1][17-i] = 0; 00629 } 00630 wait_ms(10); 00631 00632 if (player == true) { 00633 WritePxAnimation(0,false,playerColour); 00634 playerScoreLED.write(playerScorePx.getBuf()); 00635 } 00636 if (robot == true) { 00637 WritePxAnimation(1,true,robotColour); 00638 robotScoreLED.write(robotScorePx.getBuf()); 00639 } 00640 } 00641 00642 for (int i = 0; i < 17; i++) { // loop for LED snake to go down segments B and F 00643 00644 mainArray[0][18+i] = 1; 00645 mainArray[1][103-i] = 1; 00646 mainArray[0][9+i] = 0; 00647 if (i < 9) { 00648 mainArray[1][8-i] = 0; 00649 } else { 00650 mainArray[1][112-i] = 0; 00651 } 00652 wait_ms(10); 00653 00654 if (player == true) { 00655 WritePxAnimation(0,false,playerColour); 00656 playerScoreLED.write(playerScorePx.getBuf()); 00657 } 00658 if (robot == true) { 00659 WritePxAnimation(1,true,robotColour); 00660 robotScoreLED.write(robotScorePx.getBuf()); 00661 } 00662 } 00663 00664 for (int i = 0; i < 18; i++) { // loop for LED snake to pass through segment G 00665 00666 mainArray[0][121-i] = 1; 00667 mainArray[1][104+i] = 1; 00668 if (i < 9) { 00669 mainArray[0][26+i] = 0; 00670 mainArray[1][95-i] = 0; 00671 } else { 00672 mainArray[0][130-i] = 0; 00673 mainArray[1][95+i] = 0; 00674 } 00675 wait_ms(10); 00676 00677 if (player == true) { 00678 WritePxAnimation(0,false,playerColour); 00679 playerScoreLED.write(playerScorePx.getBuf()); 00680 } 00681 if (robot == true) { 00682 WritePxAnimation(1,true,robotColour); 00683 robotScoreLED.write(robotScorePx.getBuf()); 00684 } 00685 } 00686 00687 for (int i = 0; i < 17; i++) { // loop for LED snake to pass down through segments E and C 00688 00689 mainArray[0][86-i] = 1; 00690 mainArray[1][35+i] = 1; 00691 if (i < 9) { 00692 mainArray[0][112-i] = 0; 00693 mainArray[1][113+i] = 0; 00694 } else { 00695 mainArray[0][95-i] = 0; 00696 mainArray[1][26+i] = 0; 00697 } 00698 wait_ms(10); 00699 00700 if (player == true) { 00701 WritePxAnimation(0,false,playerColour); 00702 playerScoreLED.write(playerScorePx.getBuf()); 00703 } 00704 if (robot == true) { 00705 WritePxAnimation(1,true,robotColour); 00706 robotScoreLED.write(robotScorePx.getBuf()); 00707 } 00708 } 00709 00710 for (int i = 0; i < 35; i++) { // loop for LED snake to pass through segments D and E AND D and C 00711 00712 mainArray[0][69-i] = 1; 00713 mainArray[1][52+i] = 1; 00714 mainArray[0][80-i] = 0; 00715 mainArray[1][43+i] = 0; 00716 00717 wait_ms(10); 00718 00719 if (player == true) { 00720 WritePxAnimation(0,false,playerColour); 00721 playerScoreLED.write(playerScorePx.getBuf()); 00722 } 00723 if (robot == true) { 00724 WritePxAnimation(1,true,robotColour); 00725 robotScoreLED.write(robotScorePx.getBuf()); 00726 } 00727 } 00728 00729 for (int i = 0; i < 18; i++) { // loop for LED snake to pass through segment G 00730 00731 mainArray[0][121-i] = 1; 00732 mainArray[1][104+i] = 1; 00733 if (i < 9) { //////////////// 00734 mainArray[0][45-i] = 0; 00735 mainArray[1][78+i] = 0; 00736 if (i == 8) { 00737 mainArray[0][36] = 0; 00738 mainArray[0][35] = 0; 00739 } 00740 } else { 00741 mainArray[0][130-i] = 0; 00742 mainArray[1][95+i] = 0; 00743 } 00744 wait_ms(10); 00745 00746 if (player == true) { 00747 WritePxAnimation(0,false,playerColour); 00748 playerScoreLED.write(playerScorePx.getBuf()); 00749 } 00750 if (robot == true) { 00751 WritePxAnimation(1,true,robotColour); 00752 robotScoreLED.write(robotScorePx.getBuf()); 00753 } 00754 } 00755 00756 for (int i = 0; i < 17; i++) { // loop for LED snake to go up segments B and F 00757 00758 mainArray[0][87+i] = 1; 00759 mainArray[1][34-i] = 1; 00760 if (i < 9) { 00761 mainArray[0][112-i] = 0; 00762 mainArray[1][113+i] = 0; 00763 } else { 00764 mainArray[0][78+i] = 0; 00765 mainArray[1][43-i] = 0; 00766 } 00767 wait_ms(10); 00768 00769 if (player == true) { 00770 WritePxAnimation(0,false,playerColour); 00771 playerScoreLED.write(playerScorePx.getBuf()); 00772 } 00773 if (robot == true) { 00774 WritePxAnimation(1,true,robotColour); 00775 robotScoreLED.write(robotScorePx.getBuf()); 00776 } 00777 } 00778 00779 for (int i = 0; i < 9; i++) { // loop for LED snake to pass through the centre of segment A 00780 00781 mainArray[0][i] = 1; 00782 mainArray[1][17-i] = 1; 00783 if (i < 9) { 00784 mainArray[0][95+i] = 0; 00785 mainArray[1][26-i] = 0; 00786 } else { 00787 mainArray[0][i-9] = 0; 00788 mainArray[1][26-i] = 0; 00789 } 00790 wait_ms(10); 00791 00792 if (player == true) { 00793 WritePxAnimation(0,false,playerColour); 00794 playerScoreLED.write(playerScorePx.getBuf()); 00795 } 00796 if (robot == true) { 00797 WritePxAnimation(1,true,robotColour); 00798 robotScoreLED.write(robotScorePx.getBuf()); 00799 } 00800 } 00801 00802 00803 } 00804 00805 } 00806 00807 // LEDs snake in a figure of 8 pattern in a group of 10 00808 void CircleAnimation(bool robot, bool robotColour, bool player, bool playerColour, int numberOfRepititions) 00809 { 00810 for (int loops = 0; loops < numberOfRepititions; loops++) { 00811 00812 for (int i = 9; i < 115; i++) { // loop to set LEDs around the circle from start of segment A to end of Segment F 00813 00814 if (i < 104) { 00815 mainArray[0][i] = 1; 00816 for (int j = 0; j < i-10; j++) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long 00817 mainArray[0][j] = 0; 00818 } 00819 } 00820 if (i > 103) { 00821 mainArray[0][i-104] = 1; 00822 for (int j = 90; j < i-10; j++) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long 00823 mainArray[0][j] = 0; 00824 } 00825 } 00826 if (i < 19) { 00827 mainArray[1][18-i] = 1; 00828 for (int j = 17; j > 25-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long 00829 mainArray[1][j] = 0; 00830 } 00831 } 00832 if (i > 18) { 00833 00834 mainArray[1][122-i] = 1; 00835 00836 if (i < 29) { 00837 for (int j = 9; j > 27-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long 00838 mainArray[1][j] = 0; 00839 } 00840 } 00841 if (i > 28) { 00842 for (int j = 103; j > 131-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long 00843 mainArray[1][j] = 0; 00844 } 00845 } 00846 } 00847 00848 wait_ms(10); 00849 00850 if (player == true) { 00851 WritePxAnimation(0,false,playerColour); 00852 playerScoreLED.write(playerScorePx.getBuf()); 00853 } 00854 if (robot == true) { 00855 WritePxAnimation(1,true,robotColour); 00856 robotScoreLED.write(robotScorePx.getBuf()); 00857 } 00858 00859 } 00860 00861 } 00862 00863 } 00864 00865 // animation that drains the display from the top segment A to the bottom segment D 00866 void DrainAnimation(bool robot, bool robotColour,bool player, bool playerColour) 00867 { 00868 SetNumberPatterns(); 00869 00870 for (int i = 0; i < 10; i++) { // drain A from the centre of the segment 00871 mainArray[robotScore][9+i] = 0; 00872 mainArray[robotScore][9-i] = 0; 00873 mainArray[playerScore][9+i] = 0; 00874 mainArray[playerScore][9-i] = 0; 00875 wait_ms(30); 00876 if (player == true){ 00877 WritePxAnimation(playerScore,false,playerColour); 00878 playerScoreLED.write(playerScorePx.getBuf()); 00879 } 00880 if (robot == true) { 00881 WritePxAnimation(robotScore,true,robotColour); 00882 robotScoreLED.write(robotScorePx.getBuf()); 00883 } 00884 } 00885 for (int i = 0; i < 18; i++) { // drain B and F downwards 00886 mainArray[robotScore][18+i] = 0; 00887 mainArray[robotScore][103-i] = 0; 00888 mainArray[playerScore][18+i] = 0; 00889 mainArray[playerScore][103-i] = 0; 00890 wait_ms(30); 00891 if (player == true){ 00892 WritePxAnimation(playerScore,false,playerColour); 00893 playerScoreLED.write(playerScorePx.getBuf()); 00894 } 00895 if (robot == true) { 00896 WritePxAnimation(robotScore,true,robotColour); 00897 robotScoreLED.write(robotScorePx.getBuf()); 00898 } 00899 } 00900 if (robotScore != 0 | playerScore != 0) { // endgame - at least one score is three 00901 00902 for (int i = 0; i < 18; i++) { // drain G across 00903 mainArray[robotScore][104+i] = 0; 00904 mainArray[playerScore][104+i] = 0; 00905 if (player == true) { 00906 WritePxAnimation(playerScore,false,playerColour); 00907 playerScoreLED.write(playerScorePx.getBuf()); 00908 } 00909 if (robot == true) { 00910 WritePxAnimation(robotScore,true,robotColour); 00911 robotScoreLED.write(robotScorePx.getBuf()); 00912 } 00913 } 00914 } else { // start of game - both scores are 0 00915 for (int i = 0; i < 18; i++) { // instantly delete G 00916 mainArray[robotScore][104+i] = 0; 00917 mainArray[playerScore][104+i] = 0; 00918 } 00919 if (player == true) { 00920 WritePxAnimation(playerScore,false,playerColour); 00921 playerScoreLED.write(playerScorePx.getBuf()); 00922 } 00923 if (robot == true) { 00924 WritePxAnimation(robotScore,true,robotColour); 00925 robotScoreLED.write(robotScorePx.getBuf()); 00926 } 00927 } 00928 00929 for (int i = 0; i < 18; i++) { // drain C and E downwards 00930 mainArray[robotScore][35+i] = 0; 00931 mainArray[robotScore][86-i] = 0; 00932 mainArray[playerScore][35+i] = 0; 00933 mainArray[playerScore][86-i] = 0; 00934 wait_ms(30); 00935 if (player == true){ 00936 WritePxAnimation(playerScore,false,playerColour); 00937 playerScoreLED.write(playerScorePx.getBuf()); 00938 } 00939 if (robot == true) { 00940 WritePxAnimation(robotScore,true,robotColour); 00941 robotScoreLED.write(robotScorePx.getBuf()); 00942 } 00943 } 00944 for (int i = 0; i < 10; i++) { // drain D from edges to centre 00945 mainArray[robotScore][52+i] = 0; 00946 mainArray[robotScore][70-i] = 0; 00947 mainArray[playerScore][52+i] = 0; 00948 mainArray[playerScore][70-i] = 0; 00949 wait_ms(30); 00950 if (player == true){ 00951 WritePxAnimation(playerScore,false,playerColour); 00952 playerScoreLED.write(playerScorePx.getBuf()); 00953 } 00954 if (robot == true) { 00955 WritePxAnimation(robotScore,true,robotColour); 00956 robotScoreLED.write(robotScorePx.getBuf()); 00957 } 00958 } 00959 00960 00961 memset(mainArray, 0, sizeof mainArray); 00962 00963 } 00964 00965 void ZeroInAnimation(bool robot, bool robotColour, bool player, bool playerColour) 00966 { 00967 memset(mainArray, 0, sizeof mainArray); 00968 00969 if (player == true && robot == true) { 00970 00971 for (int i = 0; i < 10; i++) { // write A from centre 00972 mainArray[0][9+i] = 1; 00973 mainArray[0][9-i] = 1; 00974 wait_ms(10); 00975 WritePxAnimation(playerScore,false,playerColour); 00976 playerScoreLED.write(playerScorePx.getBuf()); 00977 WritePxAnimation(robotScore,true,robotColour); 00978 robotScoreLED.write(robotScorePx.getBuf()); 00979 } 00980 for (int i = 0; i < 18; i++) { // write B and F downwards 00981 mainArray[0][18+i] = 1; 00982 mainArray[0][103-i] = 1; 00983 wait_ms(10); 00984 WritePxAnimation(playerScore,false,playerColour); 00985 playerScoreLED.write(playerScorePx.getBuf()); 00986 WritePxAnimation(robotScore,true,robotColour); 00987 robotScoreLED.write(robotScorePx.getBuf()); 00988 } 00989 for (int i = 0; i < 18; i++) { // write C and E downwards 00990 mainArray[0][35+i] = 1; 00991 mainArray[0][86-i] = 1; 00992 wait_ms(10); 00993 WritePxAnimation(playerScore,false,playerColour); 00994 playerScoreLED.write(playerScorePx.getBuf()); 00995 WritePxAnimation(robotScore,true,robotColour); 00996 robotScoreLED.write(robotScorePx.getBuf()); 00997 } 00998 for (int i = 0; i < 10; i++) { // write D from edges to centre 00999 mainArray[0][52+i] = 1; 01000 mainArray[0][70-i] = 1; 01001 wait_ms(10); 01002 WritePxAnimation(playerScore,false,playerColour); 01003 playerScoreLED.write(playerScorePx.getBuf()); 01004 WritePxAnimation(robotScore,true,robotColour); 01005 robotScoreLED.write(robotScorePx.getBuf()); 01006 } 01007 01008 } 01009 01010 if (player == true && robot == false) { 01011 01012 for (int i = 0; i < 10; i++) { // A 01013 mainArray[0][9+i] = 1; 01014 mainArray[0][9-i] = 1; 01015 wait_ms(10); 01016 WritePxAnimation(playerScore,false,playerColour); 01017 playerScoreLED.write(playerScorePx.getBuf()); 01018 } 01019 for (int i = 0; i < 18; i++) { // B and F 01020 mainArray[0][18+i] = 1; 01021 mainArray[0][103-i] = 1; 01022 wait_ms(10); 01023 WritePxAnimation(playerScore,false,playerColour); 01024 playerScoreLED.write(playerScorePx.getBuf()); 01025 } 01026 for (int i = 0; i < 18; i++) { // G 01027 mainArray[0][104+i] = 1; 01028 } 01029 01030 WritePxAnimation(playerScore,false,playerColour); 01031 playerScoreLED.write(playerScorePx.getBuf()); 01032 01033 for (int i = 0; i < 18; i++) { // C and E 01034 mainArray[0][35+i] = 1; 01035 mainArray[0][86-i] = 1; 01036 wait_ms(30); 01037 WritePxAnimation(playerScore,false,playerColour); 01038 playerScoreLED.write(playerScorePx.getBuf()); 01039 } 01040 for (int i = 0; i < 10; i++) { // D 01041 mainArray[0][52+i] = 1; 01042 mainArray[0][70-i] = 1; 01043 wait_ms(10); 01044 WritePxAnimation(playerScore,false,playerColour); 01045 playerScoreLED.write(playerScorePx.getBuf()); 01046 } 01047 01048 } 01049 01050 if (player == false && robot == true) { 01051 01052 for (int i = 0; i < 10; i++) { // A 01053 mainArray[0][9+i] = 1; 01054 mainArray[0][9-i] = 1; 01055 wait_ms(10); 01056 WritePxAnimation(robotScore,true,robotColour); 01057 robotScoreLED.write(robotScorePx.getBuf()); 01058 } 01059 for (int i = 0; i < 18; i++) { // B and F 01060 mainArray[0][18+i] = 1; 01061 mainArray[0][103-i] = 1; 01062 wait_ms(10); 01063 WritePxAnimation(robotScore,true,robotColour); 01064 robotScoreLED.write(robotScorePx.getBuf()); 01065 } 01066 for (int i = 0; i < 18; i++) { // G 01067 mainArray[0][104+i] = 1; 01068 } 01069 01070 WritePxAnimation(robotScore,true,robotColour); 01071 robotScoreLED.write(robotScorePx.getBuf()); 01072 01073 for (int i = 0; i < 18; i++) { // C and E 01074 mainArray[0][35+i] = 1; 01075 mainArray[0][86-i] = 1; 01076 wait_ms(10); 01077 WritePxAnimation(robotScore,true,robotColour); 01078 robotScoreLED.write(robotScorePx.getBuf()); 01079 } 01080 for (int i = 0; i < 10; i++) { // D 01081 mainArray[0][52+i] = 1; 01082 mainArray[0][70-i] = 1; 01083 wait_ms(10); 01084 WritePxAnimation(robotScore,true,robotColour); 01085 robotScoreLED.write(robotScorePx.getBuf()); 01086 } 01087 01088 } 01089 01090 } 01091 01092 void ZeroOutAnimation(bool robot, bool robotColour, bool player, bool playerColour) 01093 { 01094 if (player == true && robot == true) { 01095 01096 for (int i = 0; i < 10; i++) { // A 01097 mainArray[0][9+i] = 0; 01098 mainArray[0][9-i] = 0; 01099 wait_ms(10); 01100 WritePxAnimation(playerScore,false,playerColour); 01101 playerScoreLED.write(playerScorePx.getBuf()); 01102 WritePxAnimation(robotScore,true,robotColour); 01103 robotScoreLED.write(robotScorePx.getBuf()); 01104 } 01105 for (int i = 0; i < 18; i++) { // B and F 01106 mainArray[0][18+i] = 0; 01107 mainArray[0][103-i] = 0; 01108 wait_ms(10); 01109 WritePxAnimation(playerScore,false,playerColour); 01110 playerScoreLED.write(playerScorePx.getBuf()); 01111 WritePxAnimation(robotScore,true,robotColour); 01112 robotScoreLED.write(robotScorePx.getBuf()); 01113 } 01114 for (int i = 0; i < 18; i++) { // G 01115 mainArray[0][104+i] = 0; 01116 } 01117 01118 WritePxAnimation(playerScore,false,playerColour); 01119 playerScoreLED.write(playerScorePx.getBuf()); 01120 WritePxAnimation(robotScore,true,robotColour); 01121 robotScoreLED.write(robotScorePx.getBuf()); 01122 01123 for (int i = 0; i < 18; i++) { // C and E 01124 mainArray[0][35+i] = 0; 01125 mainArray[0][86-i] = 0; 01126 wait_ms(10); 01127 WritePxAnimation(playerScore,false,playerColour); 01128 playerScoreLED.write(playerScorePx.getBuf()); 01129 WritePxAnimation(robotScore,true,robotColour); 01130 robotScoreLED.write(robotScorePx.getBuf()); 01131 } 01132 for (int i = 0; i < 10; i++) { // D 01133 mainArray[0][52+i] = 0; 01134 mainArray[0][70-i] = 0; 01135 wait_ms(10); 01136 WritePxAnimation(playerScore,false,playerColour); 01137 playerScoreLED.write(playerScorePx.getBuf()); 01138 WritePxAnimation(robotScore,true,robotColour); 01139 robotScoreLED.write(robotScorePx.getBuf()); 01140 } 01141 01142 } 01143 01144 if (player == true && robot == false) { 01145 01146 for (int i = 0; i < 10; i++) { // A 01147 mainArray[0][9+i] = 0; 01148 mainArray[0][9-i] = 0; 01149 wait_ms(10); 01150 WritePxAnimation(playerScore,false,playerColour); 01151 playerScoreLED.write(playerScorePx.getBuf()); 01152 } 01153 for (int i = 0; i < 18; i++) { // B and F 01154 mainArray[0][18+i] = 0; 01155 mainArray[0][103-i] = 0; 01156 wait_ms(10); 01157 WritePxAnimation(playerScore,false,playerColour); 01158 playerScoreLED.write(playerScorePx.getBuf()); 01159 } 01160 for (int i = 0; i < 18; i++) { // G 01161 mainArray[0][104+i] = 0; 01162 } 01163 01164 WritePxAnimation(playerScore,false,playerColour); 01165 playerScoreLED.write(playerScorePx.getBuf()); 01166 01167 for (int i = 0; i < 18; i++) { // C and E 01168 mainArray[0][35+i] = 0; 01169 mainArray[0][86-i] = 0; 01170 wait_ms(10); 01171 WritePxAnimation(playerScore,false,playerColour); 01172 playerScoreLED.write(playerScorePx.getBuf()); 01173 } 01174 for (int i = 0; i < 10; i++) { // D 01175 mainArray[0][52+i] = 0; 01176 mainArray[0][70-i] = 0; 01177 wait_ms(10); 01178 WritePxAnimation(playerScore,false,playerColour); 01179 playerScoreLED.write(playerScorePx.getBuf()); 01180 } 01181 01182 } 01183 01184 if (player == false && robot == true) { 01185 01186 for (int i = 0; i < 10; i++) { // A 01187 mainArray[0][9+i] = 0; 01188 mainArray[0][9-i] = 0; 01189 wait_ms(10); 01190 WritePxAnimation(robotScore,true,robotColour); 01191 robotScoreLED.write(robotScorePx.getBuf()); 01192 } 01193 for (int i = 0; i < 18; i++) { // B and F 01194 mainArray[0][18+i] = 0; 01195 mainArray[0][103-i] = 0; 01196 wait_ms(10); 01197 WritePxAnimation(robotScore,true,robotColour); 01198 robotScoreLED.write(robotScorePx.getBuf()); 01199 } 01200 for (int i = 0; i < 18; i++) { // G 01201 mainArray[0][104+i] = 0; 01202 } 01203 01204 WritePxAnimation(robotScore,true,robotColour); 01205 robotScoreLED.write(robotScorePx.getBuf()); 01206 01207 for (int i = 0; i < 18; i++) { // C and E 01208 mainArray[0][35+i] = 0; 01209 mainArray[0][86-i] = 0; 01210 wait_ms(10); 01211 WritePxAnimation(robotScore,true,robotColour); 01212 robotScoreLED.write(robotScorePx.getBuf()); 01213 } 01214 for (int i = 0; i < 10; i++) { // D 01215 mainArray[0][52+i] = 0; 01216 mainArray[0][70-i] = 0; 01217 wait_ms(10); 01218 WritePxAnimation(robotScore,true,robotColour); 01219 robotScoreLED.write(robotScorePx.getBuf()); 01220 } 01221 01222 } 01223 01224 } 01225 01226 void OneInAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01227 { 01228 memset(mainArray, 0, sizeof mainArray); 01229 01230 if (player == true && robot == true) { 01231 01232 for (int i = 51; i > 17; i--) { 01233 mainArray[1][i] = 1; 01234 wait_ms(10); 01235 WritePxAnimation(playerScore,false,playerColour); 01236 playerScoreLED.write(playerScorePx.getBuf()); 01237 WritePxAnimation(robotScore,true,robotColour); 01238 robotScoreLED.write(robotScorePx.getBuf()); 01239 } 01240 01241 } 01242 01243 if (player == true && robot == false) { 01244 01245 for (int i = 51; i > 17; i--) { 01246 mainArray[1][i] = 1; 01247 wait_ms(10); 01248 WritePxAnimation(playerScore,false,playerColour); 01249 playerScoreLED.write(playerScorePx.getBuf()); 01250 } 01251 01252 } 01253 01254 if (player == false && robot == true) { 01255 01256 for (int i = 51; i > 17; i--) { // B and F 01257 mainArray[1][i] = 1; 01258 wait_ms(10); 01259 WritePxAnimation(robotScore,true,robotColour); 01260 robotScoreLED.write(robotScorePx.getBuf()); 01261 } 01262 01263 } 01264 01265 } 01266 01267 void OneOutAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01268 { 01269 if (player == true && robot == true) { 01270 01271 for (int i = 18; i < 52; i++) { 01272 mainArray[1][i] = 0; 01273 wait_ms(10); 01274 WritePxAnimation(playerScore,false,playerColour); 01275 playerScoreLED.write(playerScorePx.getBuf()); 01276 WritePxAnimation(robotScore,true,robotColour); 01277 robotScoreLED.write(robotScorePx.getBuf()); 01278 } 01279 01280 } 01281 01282 if (player == true && robot == false) { 01283 01284 for (int i = 18; i < 52; i++) { 01285 mainArray[1][i] = 0; 01286 wait_ms(10); 01287 WritePxAnimation(playerScore,false,playerColour); 01288 playerScoreLED.write(playerScorePx.getBuf());; 01289 } 01290 01291 } 01292 01293 if (player == false && robot == true) { 01294 01295 for (int i = 18; i < 52; i++) { 01296 mainArray[1][i] = 0; 01297 wait_ms(10); 01298 WritePxAnimation(robotScore,true,robotColour); 01299 robotScoreLED.write(robotScorePx.getBuf()); 01300 } 01301 01302 } 01303 01304 } 01305 01306 void TwoInAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01307 { 01308 memset(mainArray, 0, sizeof mainArray); 01309 01310 if (player == true && robot == true) { 01311 01312 for (int i = 0; i < 35; i++) { 01313 mainArray[2][i] = 1; 01314 wait_ms(10); 01315 WritePxAnimation(playerScore,false,playerColour); 01316 playerScoreLED.write(playerScorePx.getBuf()); 01317 WritePxAnimation(robotScore,true,robotColour); 01318 robotScoreLED.write(robotScorePx.getBuf()); 01319 } 01320 for (int i = 121; i > 103; i--) { 01321 mainArray[2][i] = 1; 01322 wait_ms(10); 01323 WritePxAnimation(playerScore,false,playerColour); 01324 playerScoreLED.write(playerScorePx.getBuf()); 01325 WritePxAnimation(robotScore,true,robotColour); 01326 robotScoreLED.write(robotScorePx.getBuf()); 01327 } 01328 for (int i = 86; i > 51; i--) { 01329 mainArray[2][i] = 1; 01330 wait_ms(10); 01331 WritePxAnimation(playerScore,false,playerColour); 01332 playerScoreLED.write(playerScorePx.getBuf()); 01333 WritePxAnimation(robotScore,true,robotColour); 01334 robotScoreLED.write(robotScorePx.getBuf()); 01335 } 01336 01337 } 01338 01339 if (player == true && robot == false) { 01340 01341 for (int i = 0; i < 35; i++) { 01342 mainArray[2][i] = 1; 01343 wait_ms(10); 01344 WritePxAnimation(playerScore,false,playerColour); 01345 playerScoreLED.write(playerScorePx.getBuf()); 01346 } 01347 for (int i = 121; i > 103; i--) { 01348 mainArray[2][i] = 1; 01349 wait_ms(10); 01350 WritePxAnimation(playerScore,false,playerColour); 01351 playerScoreLED.write(playerScorePx.getBuf()); 01352 } 01353 for (int i = 86; i > 51; i--) { 01354 mainArray[2][i] = 1; 01355 wait_ms(10); 01356 WritePxAnimation(playerScore,false,playerColour); 01357 playerScoreLED.write(playerScorePx.getBuf()); 01358 } 01359 01360 } 01361 01362 if (player == false && robot == true) { 01363 01364 for (int i = 0; i < 35; i++) { 01365 mainArray[2][i] = 1; 01366 wait_ms(10); 01367 WritePxAnimation(robotScore,true,robotColour); 01368 robotScoreLED.write(robotScorePx.getBuf()); 01369 } 01370 for (int i = 121; i > 103; i--) { 01371 mainArray[2][i] = 1; 01372 wait_ms(10); 01373 WritePxAnimation(robotScore,true,robotColour); 01374 robotScoreLED.write(robotScorePx.getBuf()); 01375 } 01376 for (int i = 86; i > 51; i--) { 01377 mainArray[2][i] = 1; 01378 wait_ms(10); 01379 WritePxAnimation(robotScore,true,robotColour); 01380 robotScoreLED.write(robotScorePx.getBuf()); 01381 } 01382 01383 } 01384 01385 } 01386 01387 void TwoOutAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01388 { 01389 if (player == true && robot == true) { 01390 01391 for (int i = 0; i < 35; i++) { 01392 mainArray[2][i] = 0; 01393 wait_ms(10); 01394 WritePxAnimation(playerScore,false,playerColour); 01395 playerScoreLED.write(playerScorePx.getBuf()); 01396 WritePxAnimation(robotScore,true,robotColour); 01397 robotScoreLED.write(robotScorePx.getBuf()); 01398 } 01399 for (int i = 121; i > 103; i--) { 01400 mainArray[2][i] = 0; 01401 wait_ms(10); 01402 WritePxAnimation(playerScore,false,playerColour); 01403 playerScoreLED.write(playerScorePx.getBuf()); 01404 WritePxAnimation(robotScore,true,robotColour); 01405 robotScoreLED.write(robotScorePx.getBuf()); 01406 } 01407 for (int i = 86; i > 51; i--) { 01408 mainArray[2][i] = 0; 01409 wait_ms(10); 01410 WritePxAnimation(playerScore,false,playerColour); 01411 playerScoreLED.write(playerScorePx.getBuf()); 01412 WritePxAnimation(robotScore,true,robotColour); 01413 robotScoreLED.write(robotScorePx.getBuf()); 01414 } 01415 01416 } 01417 01418 if (player == true && robot == false) { 01419 01420 for (int i = 0; i < 35; i++) { 01421 mainArray[2][i] = 0; 01422 wait_ms(10); 01423 WritePxAnimation(playerScore,false,playerColour); 01424 playerScoreLED.write(playerScorePx.getBuf()); 01425 } 01426 for (int i = 121; i > 103; i--) { 01427 mainArray[2][i] = 0; 01428 wait_ms(10); 01429 WritePxAnimation(playerScore,false,playerColour); 01430 playerScoreLED.write(playerScorePx.getBuf()); 01431 } 01432 for (int i = 86; i > 51; i--) { 01433 mainArray[2][i] = 0; 01434 wait_ms(10); 01435 WritePxAnimation(playerScore,false,playerColour); 01436 playerScoreLED.write(playerScorePx.getBuf()); 01437 } 01438 01439 } 01440 01441 if (player == false && robot == true) { 01442 01443 for (int i = 0; i < 35; i++) { 01444 mainArray[2][i] = 0; 01445 wait_ms(10); 01446 WritePxAnimation(robotScore,true,robotColour); 01447 robotScoreLED.write(robotScorePx.getBuf()); 01448 } 01449 for (int i = 121; i > 103; i--) { 01450 mainArray[2][i] = 0; 01451 wait_ms(10); 01452 WritePxAnimation(robotScore,true,robotColour); 01453 robotScoreLED.write(robotScorePx.getBuf()); 01454 } 01455 for (int i = 86; i > 51; i--) { 01456 mainArray[2][i] = 0; 01457 wait_ms(10); 01458 WritePxAnimation(robotScore,true,robotColour); 01459 robotScoreLED.write(robotScorePx.getBuf()); 01460 } 01461 01462 } 01463 01464 } 01465 01466 void ThreeInAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01467 { 01468 memset(mainArray, 0, sizeof mainArray); 01469 01470 idle_button_pressed = 1; // doesn't allow button isr to change idle status 01471 01472 if (player == true && robot == true) { 01473 01474 for (int i = 0; i < 35; i++) { 01475 mainArray[3][i] = 1; 01476 wait_ms(10); 01477 WritePxAnimation(playerScore,false,playerColour); 01478 playerScoreLED.write(playerScorePx.getBuf()); 01479 WritePxAnimation(robotScore,true,robotColour); 01480 robotScoreLED.write(robotScorePx.getBuf()); 01481 } 01482 for (int i = 0; i < 17; i++) { 01483 mainArray[3][35+i] = 1; 01484 mainArray[3][121-i] = 1; 01485 wait_ms(10); 01486 WritePxAnimation(playerScore,false,playerColour); 01487 playerScoreLED.write(playerScorePx.getBuf()); 01488 WritePxAnimation(robotScore,true,robotColour); 01489 robotScoreLED.write(robotScorePx.getBuf()); 01490 } 01491 for (int i = 52; i < 70; i++) { 01492 mainArray[3][i] = 1; 01493 wait_ms(10); 01494 WritePxAnimation(playerScore,false,playerColour); 01495 playerScoreLED.write(playerScorePx.getBuf()); 01496 WritePxAnimation(robotScore,true,robotColour); 01497 robotScoreLED.write(robotScorePx.getBuf()); 01498 } 01499 01500 } 01501 01502 if (player == true && robot == false) { 01503 01504 for (int i = 0; i < 35; i++) { 01505 mainArray[3][i] = 1; 01506 wait_ms(10); 01507 WritePxAnimation(playerScore,false,playerColour); 01508 playerScoreLED.write(playerScorePx.getBuf()); 01509 } 01510 for (int i = 0; i < 17; i++) { 01511 mainArray[3][35+i] = 1; 01512 mainArray[3][121-i] = 1; 01513 wait_ms(10); 01514 WritePxAnimation(playerScore,false,playerColour); 01515 playerScoreLED.write(playerScorePx.getBuf()); 01516 } 01517 for (int i = 52; i < 70; i++) { 01518 mainArray[3][i] = 1; 01519 wait_ms(10); 01520 WritePxAnimation(playerScore,false,playerColour); 01521 playerScoreLED.write(playerScorePx.getBuf()); 01522 } 01523 01524 } 01525 01526 if (player == false && robot == true) { 01527 01528 for (int i = 0; i < 35; i++) { 01529 mainArray[3][i] = 1; 01530 wait_ms(10); 01531 WritePxAnimation(robotScore,true,robotColour); 01532 robotScoreLED.write(robotScorePx.getBuf()); 01533 } 01534 for (int i = 0; i < 18; i++) { 01535 mainArray[3][35+i] = 1; 01536 mainArray[3][121-i] = 1; 01537 wait_ms(10); 01538 WritePxAnimation(robotScore,true,robotColour); 01539 robotScoreLED.write(robotScorePx.getBuf()); 01540 } 01541 for (int i = 52; i < 70; i++) { 01542 mainArray[3][i] = 1; 01543 wait_ms(10); 01544 WritePxAnimation(robotScore,true,robotColour); 01545 robotScoreLED.write(robotScorePx.getBuf()); 01546 } 01547 01548 } 01549 01550 } 01551 01552 void ThreeOutAnimation(bool robot, bool robotColour,bool player, bool playerColour) 01553 { 01554 if (player == true && robot == true) { 01555 01556 for (int i = 0; i < 18; i++) { 01557 mainArray[3][i] = 0; 01558 mainArray[3][104+i] = 0; 01559 mainArray[3][69-i] = 0; 01560 wait_ms(10); 01561 WritePxAnimation(playerScore,false,playerColour); 01562 playerScoreLED.write(playerScorePx.getBuf()); 01563 WritePxAnimation(robotScore,true,robotColour); 01564 robotScoreLED.write(robotScorePx.getBuf()); 01565 } 01566 for (int i = 0; i < 18; i++) { 01567 mainArray[3][18+i] = 0; 01568 mainArray[3][51-i] = 0; 01569 wait_ms(10); 01570 WritePxAnimation(playerScore,false,playerColour); 01571 playerScoreLED.write(playerScorePx.getBuf()); 01572 WritePxAnimation(robotScore,true,robotColour); 01573 robotScoreLED.write(robotScorePx.getBuf()); 01574 } 01575 01576 } 01577 01578 if (player == true && robot == false) { 01579 01580 for (int i = 0; i < 18; i++) { 01581 mainArray[3][i] = 0; 01582 mainArray[3][104+i] = 0; 01583 mainArray[3][69-i] = 0; 01584 wait_ms(10); 01585 WritePxAnimation(playerScore,false,playerColour); 01586 playerScoreLED.write(playerScorePx.getBuf()); 01587 } 01588 for (int i = 0; i < 18; i++) { 01589 mainArray[3][18+i] = 0; 01590 mainArray[3][51-i] = 0; 01591 wait_ms(10); 01592 WritePxAnimation(playerScore,false,playerColour); 01593 playerScoreLED.write(playerScorePx.getBuf()); 01594 } 01595 01596 } 01597 01598 if (player == false && robot == true) { 01599 01600 for (int i = 0; i < 18; i++) { 01601 mainArray[3][i] = 0; 01602 mainArray[3][104+i] = 0; 01603 mainArray[3][69-i] = 0; 01604 wait_ms(10); 01605 WritePxAnimation(robotScore,true,robotColour); 01606 robotScoreLED.write(robotScorePx.getBuf()); 01607 } 01608 for (int i = 0; i < 18; i++) { 01609 mainArray[3][18+i] = 0; 01610 mainArray[3][51-i] = 0; 01611 wait_ms(10); 01612 WritePxAnimation(robotScore,true,robotColour); 01613 robotScoreLED.write(robotScorePx.getBuf()); 01614 } 01615 01616 } 01617 01618 } 01619 01620 void idleButtonISR() 01621 { 01622 if (idle_button_pressed == 0) { 01623 if (idle_flag == 0) { 01624 previous_state = 0; 01625 } 01626 else { 01627 previous_state = 1; 01628 } 01629 idle_flag = 1; 01630 idle_button_pressed = 1; 01631 } 01632 }
Generated on Thu Jul 14 2022 07:25:28 by 1.7.2