updated 7seg controls for new 7 seg boards

Dependencies:   PixelArray WS2812 mbed

Fork of frdm_pong_table_controller by Demo Team

Files at this revision

API Documentation at this revision

Comitter:
DanGibbons
Date:
Mon Jul 10 11:05:06 2017 +0000
Parent:
5:2d439ccefc7d
Child:
7:dc6f1f105c52
Commit message:
All animations added. ; Prior version to adding start/idle button

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
--- 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;
+}
--- a/main.h	Thu Jul 06 16:16:36 2017 +0000
+++ b/main.h	Mon Jul 10 11:05:06 2017 +0000
@@ -32,6 +32,7 @@
 //K64F On-board Switches
 DigitalIn PB1(PTC6);
 DigitalIn PB2(PTA4);
+InterruptIn idleButton(PTB2);
 
 // SERIAL
 Serial pc(USBTX, USBRX); // tx, rx
@@ -47,7 +48,6 @@
 
 // LED Variables
 bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G;
-//int seg1Array[122];
 int mainArray[11][122];
 int rand_colors[] = {0x00FF00, 0x7FFF00, 0xFFFF00, 0xFF7F00, 0xFF0000, 0xFE00FF, 0x7F00FF, 0x0000FF, 0x007FFF, 0x00FFFE, 0x00FF7F};
 
@@ -59,27 +59,40 @@
 int endFlashes = 3;
 int numFlashes;
 
+// Flags
+volatile int idle_flag = 0;
+
 // Robot Bream Beam value
 double prevRbbValue; // Previous Robot break beam value
 double prevPbbValue; // Previous player break beam value
 
 // FUNCTION DECLERATIONS
-void Setup();
-void SetNumberPatterns();
-void SetFigureOf8Pattern();
-void SetCirclePattern();
-void SetLEDArray(int x);
-void WriteScores();
-void HandleGoal(bool hasRobotScored);
-void WritePxScores(int line_num, bool isRobot);
-void WritePxAnimation(int line_num,bool isRobot);
-void WritePxScoresRandomColours(int line_num,bool isRobot);
-void WritePxGoal(unsigned int colour,bool isRobot);
+void Setup(); // initial pattern
+void SetNumberPatterns(); // sets segment patterns for numbers
+void SetLEDArray(int x); // sets segment patterns in mainArray
+void WriteAnimation(); // writes scores to the LEDs
+void WritePxAnimation(int line_num,bool isRobot,bool colour); // writes mainArray to either LED buffer in blue or random colours
+
+void HandleGoal(bool hasRobotScored); 
 void HandleWin();
+
 void GoalAnimation(bool hasRobotScored);
 void WinAnimation(bool isRobotWinner);
-void FigureOf8Animation(bool robot, bool player, int numberOfRepitions);
-void CircleAnimation(bool robot, bool player, int numberOfRepitions);
+
+void CircleAnimation(bool robot, bool robotColour,bool player, bool playerColour, int numberOfRepitions);
 void DrainAnimation(bool robot, bool robotColour, int robotScore, bool player, bool playerColour, int playerScore);
 
+void ZeroInAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void ZeroOutAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void OneInAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void OneOutAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void TwoInAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void TwoOutAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void ThreeInAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+void ThreeOutAnimation(bool robot, bool robotColour,bool player, bool playerColour);
+
+// ISRs
+void idleButtonISR();
+
+
 #endif
\ No newline at end of file