updated 7seg controls for new 7 seg boards

Dependencies:   PixelArray WS2812 mbed

Fork of frdm_pong_table_controller by Demo Team

Revision:
6:5e8e2645cd93
Parent:
5:2d439ccefc7d
Child:
7:dc6f1f105c52
--- a/main.cpp	Thu Jul 06 16:16:36 2017 +0000
+++ b/main.cpp	Mon Jul 10 11:05:06 2017 +0000
@@ -29,12 +29,19 @@
         wait(0.02);
 
     }
+    
 }
 
 void Setup()
 {
     // Turn on green LED
     led_green = 0;
+    
+    // attach idle button isr to rising edge of button press
+    idleButton.rise(&idleButtonISR);
+
+    // enable the internal pull-down resistor on idleButton
+    idleButton.mode(PullDown);
 
     // Set brightness of the 4 LED strips
     robotScoreLED.setII(0xB0);
@@ -47,12 +54,14 @@
     playerScore = 0;
     numFlashes = 0;
     
-    FigureOf8Animation(true,true,2); // run animation 2 times for both robot and player scores
+    CircleAnimation(true,true,true,true,2);
+    SetNumberPatterns();
+    
     DrainAnimation(true,true,robotScore,true,true,playerScore); // run animation for both scores with random colour pattern 
     
-    SetNumberPatterns();
+    wait(1.5);
     
-    WriteScores();
+    ZeroInAnimation(true,false,true,false);
 
     // Turn off green LED
     led_green = 1;
@@ -217,206 +226,6 @@
 
 }
 
-// segment pattern for figure of 8 animation
-void SetFigureOf8Pattern()
-{
-    for(int seg = 0; seg < 8; seg++) {
-
-        switch (seg) {
-            case 0 :
-                seg1A = 1;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(0);
-                break;
-
-            case 1 :
-                seg1A = 0;
-                seg1B = 1;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(1);
-                break;
-
-            case 2 :
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 1;
-
-                SetLEDArray(2);
-                break;
-
-            case 3 :
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 1;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(3);
-                break;
-
-            case 4:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 1;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(4);
-                break;
-
-            case 5:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 1;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(5);
-                break;
-
-            case 6:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 1;
-
-                SetLEDArray(6);
-                break;
-
-            case 7:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 1;
-                seg1G = 0;
-
-                SetLEDArray(7);
-                break;
-
-            default :
-
-                break;
-
-        }
-        
-    }
-
-}
-
-// Segment Pattern for circle animation
-void SetCirclePattern()
-{
-    for(int seg = 0; seg < 6; seg++) {
-
-        switch (seg) {
-            case 0 :
-                seg1A = 1;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(0);
-                break;
-
-            case 1 :
-                seg1A = 0;
-                seg1B = 1;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(1);
-                break;
-
-            case 2 :
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 1;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(2);
-                break;
-
-            case 3 :
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 1;
-                seg1E = 0;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(3);
-                break;
-
-            case 4:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 1;
-                seg1F = 0;
-                seg1G = 0;
-
-                SetLEDArray(4);
-                break;
-
-            case 5:
-                seg1A = 0;
-                seg1B = 0;
-                seg1C = 0;
-                seg1D = 0;
-                seg1E = 0;
-                seg1F = 1;
-                seg1G = 0;
-
-                SetLEDArray(5);
-                break;
-
-            default :
-
-                break;
-
-        }
-        
-    }
-
-}
-
 // Write segment config to main array
 void SetLEDArray(int x)
 {
@@ -452,108 +261,73 @@
 }
 
 // Update both Score LEDs with the current score
-void WriteScores()
+void WriteAnimation()
 {
-    WritePxScores(playerScore,false);
+    WritePxAnimation(playerScore,false,false);
     playerScoreLED.write(playerScorePx.getBuf());
     wait(0.01);
-    WritePxScores(robotScore,true);
+    WritePxAnimation(robotScore,true,false);
     robotScoreLED.write(robotScorePx.getBuf());
 }
 
-// Write pixel array for Numbers (drawing animation
-void WritePxScores(int line_num,bool isRobot)
+// Write Pixel array with either random colour pattern or in standard blue
+void WritePxAnimation(int line_num,bool isRobot,bool colour)
 {
-    if(isRobot == true) {
-
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                robotScorePx.Set(i,OFF);
-            }
+    if (colour == true) { // random colours
+        if(isRobot == true) {
 
-            if (mainArray[line_num][i] == 1) {
-                robotScorePx.Set(i,BLUE);
-                robotScoreLED.write(robotScorePx.getBuf());
-            }
-        }
-    } else {
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                playerScorePx.Set(i,OFF);
-            }
+            for (int i = 0; i < WS2812_BUF; i++) {
+                if (mainArray[line_num][i] == 0) {
+                    robotScorePx.Set(i,OFF);
+                }
 
-            if (mainArray[line_num][i] == 1) {
-                playerScorePx.Set(i,BLUE);
-                robotScoreLED.write(robotScorePx.getBuf());
+                if (mainArray[line_num][i] == 1) {
+                    robotScorePx.Set(i,rand_colors[rand() % 10]);
+                }
             }
-        }
-    }
-
-}
+        } else {
+            for (int i = 0; i < WS2812_BUF; i++) { 
+                if (mainArray[line_num][i] == 0) {
+                    playerScorePx.Set(i,OFF);
+                }
 
-// Write Pixel array with random colour pattern
-void WritePxScoresRandomColours(int line_num,bool isRobot)
-{
-    if(isRobot == true) {
-
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                robotScorePx.Set(i,OFF);
-            }
-
-            if (mainArray[line_num][i] == 1) {
-                robotScorePx.Set(i,rand_colors[rand() % 10]);
+                if (mainArray[line_num][i] == 1) {
+                    playerScorePx.Set(i,rand_colors[rand() % 10]);
+                }
             }
         }
-    } else {
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                playerScorePx.Set(i,OFF);
+    } else { // blue
+        if(isRobot == true) {
+
+            for (int i = 0; i < WS2812_BUF; i++) {
+                if (mainArray[line_num][i] == 0) {
+                    robotScorePx.Set(i,OFF);
+                }
+
+                if (mainArray[line_num][i] == 1) {
+                    robotScorePx.Set(i,BLUE);
+                }
             }
+        } else {
+            for (int i = 0; i < WS2812_BUF; i++) {
+                if (mainArray[line_num][i] == 0) {
+                    playerScorePx.Set(i,OFF);
+                }
 
-            if (mainArray[line_num][i] == 1) {
-                playerScorePx.Set(i,rand_colors[rand() % 10]);
+                if (mainArray[line_num][i] == 1) {
+                    playerScorePx.Set(i,BLUE);
+                }
             }
         }
-    }
-
-}
-
-// Write Pixel array with standard colour 
-void WritePxAnimation(int line_num,bool isRobot)
-{
-    if(isRobot == true) {
-
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                robotScorePx.Set(i,OFF);
-            }
 
-            if (mainArray[line_num][i] == 1) {
-                robotScorePx.Set(i,BLUE);
-            }
-        }
-    } else {
-        for (int i = 0; i < WS2812_BUF; i++) {
-            if (mainArray[line_num][i] == 0) {
-                playerScorePx.Set(i,OFF);
-            }
+    }
+}    
 
-            if (mainArray[line_num][i] == 1) {
-                playerScorePx.Set(i,BLUE);
-            }
-        }
-    }
-
-}
-
-// Handle behaviour for when a goal scored event
+// Handle behaviour for the goal scored event
 void HandleGoal(bool hasRobotScored)
 {
     GoalAnimation(hasRobotScored);
 
-    wait(1);
-
     // If either player reaches the score limit, then call HandleWin(). If not, then turn goal LEDs off
     if(robotScore == scoreLimit || playerScore == scoreLimit) {
         HandleWin();
@@ -574,7 +348,6 @@
         WinAnimation(isRobotWinner);
 
     } else {
-        
         pc.printf("Robot won!");
         WinAnimation(isRobotWinner);
 
@@ -584,30 +357,89 @@
     robotScore = 0;
     playerScore = 0;
     
-    FigureOf8Animation(true,true,2);
-    DrainAnimation(true,true,0,true,true,0);
+    CircleAnimation(true,true,true,true,2);
+    DrainAnimation(true,true,robotScore,true,true,playerScore);
     
-    WriteScores();
+    wait(2);
+    
+    ZeroInAnimation(true,false,true,false);
 }
 
 // animation for when a goal is scored
 void GoalAnimation(bool hasRobotScored)
 {
     if(hasRobotScored == true) {
+        
+        switch (robotScore) {
+            case 0:   
+                ZeroOutAnimation(true,false,false,false);
+                break;
+            case 1: 
+                OneOutAnimation(true,false,false,false);
+                break;
+            case 2: 
+                TwoOutAnimation(true,false,false,false);
+                break;
+            case 3: 
+                ThreeOutAnimation(true,false,false,false);
+            default : 
+                break;   
+        }
+
         robotScore++;
-        robotScorePx.SetAll(0);
-        robotScoreLED.write(robotScorePx.getBuf());
         wait_ms(250);
-        FigureOf8Animation(true,false,1);
-        WriteScores();
+        
+        switch (robotScore) {
+            case 0: 
+                ZeroInAnimation(true,false,false,false);
+                break;
+            case 1: 
+                OneInAnimation(true,false,false,false);
+                break;
+            case 2: 
+                TwoInAnimation(true,false,false,false);
+                break;
+            case 3: 
+                ThreeInAnimation(true,true,false,false);
+            default : 
+                break;   
+        }
         
     } else {
+        
+        switch (playerScore) {
+            case 0: 
+                ZeroOutAnimation(false,false,true,false);
+                break;
+            case 1: 
+                OneOutAnimation(false,false,true,false);
+                break;
+            case 2: 
+                TwoOutAnimation(false,false,true,false);
+                break;
+            case 3: 
+                ThreeOutAnimation(false,false ,true,false);
+            default : 
+                break;   
+        }
         playerScore++;
-        playerScorePx.SetAll(0);
-        playerScoreLED.write(playerScorePx.getBuf());
         wait_ms(250);
-        FigureOf8Animation(false,true,1);
-        WriteScores();
+        
+        switch (playerScore) {
+            case 0: 
+                ZeroInAnimation(false,false,true,false);
+                break;
+            case 1: 
+                OneInAnimation(false,false,true,false);
+                break;
+            case 2: 
+                TwoInAnimation(false,false,true,false);
+                break;
+            case 3: 
+                ThreeInAnimation(false,false,true,true);
+            default : 
+                break;   
+        }
     }
     
 }
@@ -617,238 +449,872 @@
 {
     if(isRobotWinner == false) {
         
-        //robotScoreLED.setII(0x10);
-        
-        for (int i = 0; i < 80; i++) { // A
-            WritePxScoresRandomColours(playerScore,false);
+        // dim brightness of the robot score because it lost
+        robotScoreLED.setII(0x20);
+        robotScoreLED.useII(WS2812::GLOBAL);
+        robotScoreLED.write(robotScorePx.getBuf()); // rewrite buffer to change brightness
+                
+        for (int i = 0; i < 80; i++) { // flash player score with changing random colours
+            WritePxAnimation(playerScore,false,true);
             playerScoreLED.write(playerScorePx.getBuf());
-            wait_ms(50);            
+            wait_ms(50);
         }     
         
-        DrainAnimation(true,false,robotScore,true,true,playerScore);
+        DrainAnimation(true,false,robotScore,true,true,playerScore); // drain both scores away with the player score in random colours
+        
+        // reset robot score brightness
+        robotScoreLED.setII(0xB0);
+        robotScoreLED.useII(WS2812::GLOBAL);
     
     } else {
-         
-        //playerScoreLED.setII(0x10);
         
-        for (int i = 0; i < 80; i++) { // A
-            WritePxScoresRandomColours(robotScore,true);
+        // dim brightness of the player score because they lost
+        playerScoreLED.setII(0x20);
+        playerScoreLED.useII(WS2812::GLOBAL);
+        playerScoreLED.write(playerScorePx.getBuf()); // rewrite buffer to change brightness
+        
+        for (int i = 0; i < 80; i++) { // flash robot score with changing random colours
+            WritePxAnimation(robotScore,true,true);
             robotScoreLED.write(robotScorePx.getBuf());
-            wait_ms(50);            
+            wait_ms(50);                 
         }
         
-        DrainAnimation(true,true,robotScore,true,false,playerScore);
+        DrainAnimation(true,true,robotScore,true,false,playerScore); // drain both scores away with the robot score in random colours
+        
+        // reset player score brightness
+        playerScoreLED.setII(0xB0);
+        playerScoreLED.useII(WS2812::GLOBAL);
     }
     
-    
-    wait(2);
-    
-    playerScorePx.SetAll(0);
-    playerScoreLED.write(playerScorePx.getBuf());
-    robotScorePx.SetAll(0);
-    robotScoreLED.write(robotScorePx.getBuf());
-    
     wait(3);
     
 } 
 
-// figure of 8 animation
-void FigureOf8Animation(bool robot, bool player, int numberOfRepetitions)
+
+void CircleAnimation(bool robot, bool robotColour, bool player, bool playerColour, int numberOfRepititions)
 {
-    SetFigureOf8Pattern();
-    
-    for (int i = 0; i < numberOfRepetitions; i++) {
-        
-        for (int j = 0; j < 8; j++) {
+     memset(mainArray, 0, sizeof mainArray);
+     
+    for (int loops = 0; loops < numberOfRepititions; loops++) {
+
+        for (int i = 0; i < 115; i++) { // loop to set LEDs around the circle from start of segment A to end of Segment F
             
-            if(robot == true && player == true) {
-                WritePxAnimation(j,false);
-                playerScoreLED.write(playerScorePx.getBuf());
-                WritePxAnimation(j,true);
-                robotScoreLED.write(robotScorePx.getBuf());
-            } else if(robot == true && player == false) {
-                WritePxAnimation(j,true);
-                robotScoreLED.write(robotScorePx.getBuf());
-            } else if(robot == false && player == true) {
-                WritePxAnimation(j,false);
+            if ( i < 104) {
+                mainArray[0][i] = 1;
+            }
+            
+            for (int j = 0; j < i-10; j++) { // Loop to clear previously set LEDs so that the chain that animates round the display is 9 LEDs long
+                mainArray[0][j] = 0;
+            }
+
+            wait_ms(10);
+
+            if (player == true) {
+                WritePxAnimation(playerScore,false,playerColour);
                 playerScoreLED.write(playerScorePx.getBuf());
             }
-            
-            wait_ms(20);
+            if (robot == true) {
+                WritePxAnimation(robotScore,true,robotColour);
+                robotScoreLED.write(robotScorePx.getBuf());
+            }
+        }
+
+    }
+    
+    for (int i = 0; i < 104; i++) {
+
+        mainArray[0][i] = 1;
 
+        wait_ms(10);
+
+        if (player == true) {
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
         }
+        if (robot == true) {
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
     }
     
     SetNumberPatterns();
     
 }  
 
-// circle animation
-void CircleAnimation(bool robot, bool player, int numberOfRepetitions)
-{
-    SetCirclePattern();
-    
-    for (int i = 0; i < numberOfRepetitions; i++) {
-        
-        for (int j = 0; j < 6; j++) {
-            
-            if(robot == true && player == true) {
-                WritePxScores(j,false);
-                playerScoreLED.write(playerScorePx.getBuf());
-                WritePxScores(j,true);
-                robotScoreLED.write(robotScorePx.getBuf());
-            } else if(robot == true && player == false) {
-                WritePxScores(j,true);
-                robotScoreLED.write(robotScorePx.getBuf());
-            } else if(robot == false && player == true) {
-                WritePxScores(j,false);
-                playerScoreLED.write(playerScorePx.getBuf());
-            }
-            
-            wait_ms(10);
 
-        }
-    }
-    
-    SetNumberPatterns();
-    
-}
 
 // animation that drains the display from the top segment A to the bottom segment D
 void DrainAnimation(bool robot, bool robotColour, int robotScore, bool player, bool playerColour, int playerScore)
 {
-    if (player == true && robot == true) {
-        for (int i = 0; i < 10; i++) { // A
-            mainArray[robotScore][9+i] = 0;
-            mainArray[robotScore][9-i] = 0;
-            mainArray[playerScore][9+i] = 0;
-            mainArray[playerScore][9-i] = 0;
-            wait_ms(30);
-            WritePxScoresRandomColours(playerScore,false);
+    for (int i = 0; i < 10; i++) { // A
+        mainArray[robotScore][9+i] = 0;
+        mainArray[robotScore][9-i] = 0;
+        mainArray[playerScore][9+i] = 0;
+        mainArray[playerScore][9-i] = 0;
+        wait_ms(30);
+        if (player == true){
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-            WritePxScoresRandomColours(robotScore,true);
-            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        if (robot == true) {
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
         }
-        for (int i = 0; i < 18; i++) { // B and F
-            mainArray[robotScore][18+i] = 0;
-            mainArray[robotScore][103-i] = 0;
-            mainArray[playerScore][18+i] = 0;
-            mainArray[playerScore][103-i] = 0;
-            wait_ms(30);
-            WritePxScoresRandomColours(playerScore,false);
+    }
+    for (int i = 0; i < 18; i++) { // B and F
+        mainArray[robotScore][18+i] = 0;
+        mainArray[robotScore][103-i] = 0;
+        mainArray[playerScore][18+i] = 0;
+        mainArray[playerScore][103-i] = 0;
+        wait_ms(30);
+        if (player == true){
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-            WritePxScoresRandomColours(robotScore,true);
-            robotScoreLED.write(robotScorePx.getBuf());
-        }  
+        }
+        if (robot == true) {
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
+        }
+    }
+    if (robotScore != 0 | playerScore != 0) { // endgame - at least one score is three
+
+        for (int i = 0; i < 18; i++) { // G
+            mainArray[robotScore][104+i] = 0;
+            mainArray[playerScore][104+i] = 0;
+            if (player == true) {
+                WritePxAnimation(playerScore,false,playerColour);
+                playerScoreLED.write(playerScorePx.getBuf());
+            }
+            if (robot == true) {
+                WritePxAnimation(robotScore,true,robotColour);
+                robotScoreLED.write(robotScorePx.getBuf());
+            }
+        }
+    } else { // start of game - both scores are 0
         for (int i = 0; i < 18; i++) { // G
             mainArray[robotScore][104+i] = 0;
             mainArray[playerScore][104+i] = 0;
-        }    
-        
-        WritePxScoresRandomColours(playerScore,false);
-        playerScoreLED.write(playerScorePx.getBuf());
-        WritePxScoresRandomColours(robotScore,true);
+        }
+        if (player == true) {
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        if (robot == true) {
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+    }
+
+    for (int i = 0; i < 18; i++) { // C and E
+        mainArray[robotScore][35+i] = 0;
+        mainArray[robotScore][86-i] = 0;
+        mainArray[playerScore][35+i] = 0;
+        mainArray[playerScore][86-i] = 0;
+        wait_ms(30);
+        if (player == true){
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        if (robot == true) {
+        WritePxAnimation(robotScore,true,robotColour);
         robotScoreLED.write(robotScorePx.getBuf());
-        
+        }
+    }
+    for (int i = 0; i < 10; i++) { // D
+        mainArray[robotScore][52+i] = 0;
+        mainArray[robotScore][70-i] = 0;
+        mainArray[playerScore][52+i] = 0;
+        mainArray[playerScore][70-i] = 0;
+        wait_ms(30);
+        if (player == true){
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        if (robot == true) {
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
+        }
+    }
+    
+
+    SetNumberPatterns();
+
+} 
+
+void ZeroInAnimation(bool robot, bool robotColour, bool player, bool playerColour)
+{
+     memset(mainArray, 0, sizeof mainArray);
+     
+     if (player == true && robot == true) {
+
+        for (int i = 0; i < 10; i++) { // A
+            mainArray[0][9+i] = 1;
+            mainArray[0][9-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // B and F
+            mainArray[0][18+i] = 1;
+            mainArray[0][103-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
         for (int i = 0; i < 18; i++) { // C and E
-            mainArray[robotScore][35+i] = 0;
-            mainArray[robotScore][86-i] = 0;
-            mainArray[playerScore][35+i] = 0;
-            mainArray[playerScore][86-i] = 0;
-            wait_ms(30);
-            WritePxScoresRandomColours(playerScore,false);
+            mainArray[0][35+i] = 1;
+            mainArray[0][86-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-            WritePxScoresRandomColours(robotScore,true);
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
-        }   
+        }
         for (int i = 0; i < 10; i++) { // D
-            mainArray[robotScore][52+i] = 0;
-            mainArray[robotScore][70-i] = 0;
-            mainArray[playerScore][52+i] = 0;
-            mainArray[playerScore][70-i] = 0;
+            mainArray[0][52+i] = 1;
+            mainArray[0][70-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 10; i++) { // A
+            mainArray[0][9+i] = 1;
+            mainArray[0][9-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // B and F
+            mainArray[0][18+i] = 1;
+            mainArray[0][103-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // G
+            mainArray[0][104+i] = 1;
+        }
+
+        WritePxAnimation(playerScore,false,playerColour);
+        playerScoreLED.write(playerScorePx.getBuf());
+
+        for (int i = 0; i < 18; i++) { // C and E
+            mainArray[0][35+i] = 1;
+            mainArray[0][86-i] = 1;
             wait_ms(30);
-            WritePxScoresRandomColours(playerScore,false);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 0; i < 10; i++) { // D
+            mainArray[0][52+i] = 1;
+            mainArray[0][70-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-            WritePxScoresRandomColours(robotScore,true);
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 0; i < 10; i++) { // A
+            mainArray[0][9+i] = 1;
+            mainArray[0][9-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // B and F
+            mainArray[0][18+i] = 1;
+            mainArray[0][103-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
-        }     
-    }  
+        }
+        for (int i = 0; i < 18; i++) { // G
+            mainArray[0][104+i] = 1;
+        }
+
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
+
+        for (int i = 0; i < 18; i++) { // C and E
+            mainArray[0][35+i] = 1;
+            mainArray[0][86-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 10; i++) { // D
+            mainArray[0][52+i] = 1;
+            mainArray[0][70-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
     
-    if (player == true && robot == false) {
+    
+}  
+
+void ZeroOutAnimation(bool robot, bool robotColour, bool player, bool playerColour)
+{
+     if (player == true && robot == true) {
+
         for (int i = 0; i < 10; i++) { // A
-            mainArray[playerScore][9+i] = 0;
-            mainArray[playerScore][9-i] = 0;
-            wait_ms(30);
-            WritePxScores(playerScore,false);
+            mainArray[0][9+i] = 0;
+            mainArray[0][9-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // B and F
+            mainArray[0][18+i] = 0;
+            mainArray[0][103-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) { // G
+            mainArray[0][104+i] = 0;
+        }
+
+        WritePxAnimation(playerScore,false,playerColour);
+        playerScoreLED.write(playerScorePx.getBuf());
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
+
+        for (int i = 0; i < 18; i++) { // C and E
+            mainArray[0][35+i] = 0;
+            mainArray[0][86-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 10; i++) { // D
+            mainArray[0][52+i] = 0;
+            mainArray[0][70-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 10; i++) { // A
+            mainArray[0][9+i] = 0;
+            mainArray[0][9-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
         }
         for (int i = 0; i < 18; i++) { // B and F
-            mainArray[playerScore][18+i] = 0;
-            mainArray[playerScore][103-i] = 0;
-            wait_ms(30);
-            WritePxScores(playerScore,false);
+            mainArray[0][18+i] = 0;
+            mainArray[0][103-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-        }  
+        }
         for (int i = 0; i < 18; i++) { // G
-            mainArray[playerScore][104+i] = 0;
-            wait_ms(30);
-            WritePxScores(playerScore,false);
-            playerScoreLED.write(playerScorePx.getBuf());
-        }    
+            mainArray[0][104+i] = 0;
+        }
+
+        WritePxAnimation(playerScore,false,playerColour);
+        playerScoreLED.write(playerScorePx.getBuf());
+
         for (int i = 0; i < 18; i++) { // C and E
-            mainArray[playerScore][35+i] = 0;
-            mainArray[playerScore][86-i] = 0;
-            wait_ms(30);
-            WritePxScores(playerScore,false);
+            mainArray[0][35+i] = 0;
+            mainArray[0][86-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-        }   
+        }
         for (int i = 0; i < 10; i++) { // D
-            mainArray[playerScore][52+i] = 0;
-            mainArray[playerScore][70-i] = 0;
-            wait_ms(30);
-            WritePxScores(playerScore,false);
+            mainArray[0][52+i] = 0;
+            mainArray[0][70-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
             playerScoreLED.write(playerScorePx.getBuf());
-        }     
-    }  
-    
+        }
+        
+    }
+
     if (player == false && robot == true) {
+
         for (int i = 0; i < 10; i++) { // A
-            mainArray[robotScore][9+i] = 0;
-            mainArray[robotScore][9-i] = 0;
-            wait_ms(30);
-            WritePxScores(robotScore,true);
+            mainArray[0][9+i] = 0;
+            mainArray[0][9-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
         }
         for (int i = 0; i < 18; i++) { // B and F
-            mainArray[robotScore][18+i] = 0;
-            mainArray[robotScore][103-i] = 0;
-            wait_ms(30);
-            WritePxScores(robotScore,true);
+            mainArray[0][18+i] = 0;
+            mainArray[0][103-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
-        }  
+        }
         for (int i = 0; i < 18; i++) { // G
-            mainArray[robotScore][104+i] = 0;
-            wait_ms(30);
-            WritePxScores(robotScore,true);
-            robotScoreLED.write(robotScorePx.getBuf());
-        }    
+            mainArray[0][104+i] = 0;
+        }
+
+        WritePxAnimation(robotScore,true,robotColour);
+        robotScoreLED.write(robotScorePx.getBuf());
+
         for (int i = 0; i < 18; i++) { // C and E
-            mainArray[robotScore][35+i] = 0;
-            mainArray[robotScore][86-i] = 0;
-            wait_ms(30);
-            WritePxScores(robotScore,true);
+            mainArray[0][35+i] = 0;
+            mainArray[0][86-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
-        }   
+        }
         for (int i = 0; i < 10; i++) { // D
-            mainArray[robotScore][52+i] = 0;
-            mainArray[robotScore][70-i] = 0;
-            wait_ms(30);
-            WritePxScores(robotScore,true);
+            mainArray[0][52+i] = 0;
+            mainArray[0][70-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+    
+}  
+
+void OneInAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+     memset(mainArray, 0, sizeof mainArray);
+     
+     if (player == true && robot == true) {
+
+        for (int i = 51; i > 17; i--) {
+            mainArray[1][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 51; i > 17; i--) { 
+            mainArray[1][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 51; i > 17; i--) { // B and F
+            mainArray[1][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+    
+}   
+ 
+void OneOutAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+    if (player == true && robot == true) {
+
+        for (int i = 18; i < 52; i++) {
+            mainArray[1][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
             robotScoreLED.write(robotScorePx.getBuf());
-        }     
-    }  
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 18; i < 52; i++) {
+            mainArray[1][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());;
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 18; i < 52; i++) {
+            mainArray[1][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+}
+
+void TwoInAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+    memset(mainArray, 0, sizeof mainArray);
     
+    if (player == true && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
     SetNumberPatterns();
     
-} 
-   
\ No newline at end of file
+}
+
+void TwoOutAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+    if (player == true && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 121; i > 103; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 86; i > 51; i--) {
+            mainArray[2][i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+}
+
+void ThreeInAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+    memset(mainArray, 0, sizeof mainArray);
+    
+    if (player == true && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 17; i++) {
+            mainArray[3][35+i] = 1;
+            mainArray[3][121-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 52; i < 70; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 35; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 0; i < 17; i++) {
+            mainArray[3][35+i] = 1;
+            mainArray[3][121-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 52; i < 70; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+          
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 0; i < 35; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][35+i] = 1;
+            mainArray[3][121-i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 52; i < 70; i++) {
+            mainArray[3][i] = 1;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+}
+
+void ThreeOutAnimation(bool robot, bool robotColour,bool player, bool playerColour)
+{
+    if (player == true && robot == true) {
+
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][i] = 0;
+            mainArray[3][104+i] = 0;
+            mainArray[3][69-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][18+i] = 0;
+            mainArray[3][51-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+
+    }
+
+    if (player == true && robot == false) {
+        
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][i] = 0;
+            mainArray[3][104+i] = 0;
+            mainArray[3][69-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][18+i] = 0;
+            mainArray[3][51-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(playerScore,false,playerColour);
+            playerScoreLED.write(playerScorePx.getBuf());
+        }
+        
+    }
+
+    if (player == false && robot == true) {
+
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][i] = 0;
+            mainArray[3][104+i] = 0;
+            mainArray[3][69-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        for (int i = 0; i < 18; i++) {
+            mainArray[3][18+i] = 0;
+            mainArray[3][51-i] = 0;
+            wait_ms(10);
+            WritePxAnimation(robotScore,true,robotColour);
+            robotScoreLED.write(robotScorePx.getBuf());
+        }
+        
+    }
+
+    SetNumberPatterns();
+    
+}
+
+void idleButtonISR()
+{
+    idle_flag = !idle_flag;
+}