updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
Diff: main.cpp
- 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; +}