updated 7seg controls for new 7 seg boards

Dependencies:   PixelArray WS2812 mbed

Fork of frdm_pong_table_controller by Demo Team

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }