updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
main.cpp
- Committer:
- DanGibbons
- Date:
- 2017-07-11
- Revision:
- 8:66dac2e00cce
- Parent:
- 7:dc6f1f105c52
- Child:
- 9:f3f194982bb3
File content as of revision 8:66dac2e00cce:
#include "main.h" int main() { Setup(); pc.printf("\nIDLE"); while(1) { if (idle_flag == 0) { if (idle_button_pressed == 1) { // button just pressed pc.printf("\nIDLE"); idle_button_pressed = 0; PlayToIdleTransition(); } CircleAnimation(true,true,true,true,1); wait(0.02); } if (idle_flag == 1) { if (idle_button_pressed == 1) { // button just pressed pc.printf("\nPLAY"); idle_button_pressed = 0; IdleToPlayTransition(); } double rbbValue = robotBreakBeam; // Read Robot Break beam double pbbValue = playerBreakBeam; // Read Player Break beam // IF PLAYER HAS SCORED A GOAL if (((prevRbbValue - rbbValue)>0.03)|| (PB1==0)) { //pc.printf("Player has scored a goal \n\r"); HandleGoal(false); } // IF ROBOT HAS SCORED A GOAL if (((prevPbbValue - pbbValue) > 0.03)|| (PB2==0)) { //pc.printf("Robot has scored a goal \n\r"); HandleGoal(true); } prevRbbValue = rbbValue; prevPbbValue = pbbValue; //pc.printf("PlayerGoal: %f, RobotGoal: %f \r\n",pbbValue,rbbValue); //pc.printf("Player: %i v %i : Robot \r\n",playerScore,robotScore); wait(0.02); } } } void Setup() { // Turn on green LED led_green = 0; // enable the internal pull-down resistor on idleButton idleButton.mode(PullDown); // attach idle button isr to rising edge of button press idleButton.rise(&idleButtonISR); // Set brightness of the 4 LED strips robotScoreLED.setII(0xB0); robotScoreLED.useII(WS2812::GLOBAL); playerScoreLED.setII(0xB0); playerScoreLED.useII(WS2812::GLOBAL); // Set scores to 0 robotScore = 0; playerScore = 0; numFlashes = 0; memset(mainArray, 0, sizeof mainArray); // Turn off green LED led_green = 1; } void IdleToPlayTransition() { robotScore = 0; playerScore = 0; memset(mainArray, 0, sizeof mainArray); for (int i = 9; i < 115; i++) { // loop to set LEDs around the circle from start of segment A to end of Segment F if (i < 104) { mainArray[0][i] = 1; } if (i > 103) { mainArray[0][i-104] = 1; } if (i < 19) { mainArray[1][18-i] = 1; } if (i > 18) { mainArray[1][122-i] = 1; } wait_ms(10); WritePxAnimation(0,false,true); playerScoreLED.write(playerScorePx.getBuf()); WritePxAnimation(1,true,true); robotScoreLED.write(robotScorePx.getBuf()); } DrainAnimation(true,true,robotScore,true,true,playerScore); wait(1); WriteScores(); idleButton.enable_irq(); } void PlayToIdleTransition() { robotScore = 0; playerScore = 0; memset(mainArray, 0, sizeof mainArray); wait(1); idleButton.enable_irq(); } // set segment number patterns void SetNumberPatterns() { for (int num = 0; num < 11; num++) { switch (num) { case 0 : // 0 seg1A = 1; seg1B = 1; seg1C = 1; seg1D = 1; seg1E = 1; seg1F = 1; seg1G = 0; SetLEDArray(0); break; case 1 : // 1 seg1A = 0; seg1B = 1; seg1C = 1; seg1D = 0; seg1E = 0; seg1F = 0; seg1G = 0; SetLEDArray(1); break; case 2 : // 2 seg1A = 1; seg1B = 1; seg1C = 0; seg1D = 1; seg1E = 1; seg1F = 0; seg1G = 1; SetLEDArray(2); break; case 3 : // 3 seg1A = 1; seg1B = 1; seg1C = 1; seg1D = 1; seg1E = 0; seg1F = 0; seg1G = 1; SetLEDArray(3); break; case 4: // 4 seg1A = 0; seg1B = 1; seg1C = 1; seg1D = 0; seg1E = 0; seg1F = 1; seg1G = 1; SetLEDArray(4); break; case 5: // 5 seg1A = 1; seg1B = 0; seg1C = 1; seg1D = 1; seg1E = 0; seg1F = 1; seg1G = 1; SetLEDArray(5); break; case 6: // 6 seg1A = 1; seg1B = 0; seg1C = 1; seg1D = 1; seg1E = 1; seg1F = 1; seg1G = 1; SetLEDArray(6); break; case 7: // 7 seg1A = 1; seg1B = 1; seg1C = 1; seg1D = 0; seg1E = 0; seg1F = 0; seg1G = 0; SetLEDArray(7); break; case 8: // 8 seg1A = 1; seg1B = 1; seg1C = 1; seg1D = 1; seg1E = 1; seg1F = 1; seg1G = 1; SetLEDArray(8); break; case 9: // 9 seg1A = 1; seg1B = 1; seg1C = 1; seg1D = 0; seg1E = 0; seg1F = 1; seg1G = 1; SetLEDArray(9); break; case 10: // OFF seg1A = 0; seg1B = 0; seg1C = 0; seg1D = 0; seg1E = 0; seg1F = 0; seg1G = 0; SetLEDArray(10); break; default : break; } } } // Write segment config to main array void SetLEDArray(int x) { for (int i = 0; i < WS2812_BUF; i++) { if (i < 18) { mainArray[x][i] = seg1A; } if ( i >= 18 && i < 35) { mainArray[x][i] = seg1B; } if (i >= 35 && i < 52) { mainArray[x][i] = seg1C; } if (i >= 52 && i < 70) { mainArray[x][i]= seg1D; } if ( i >= 70 && i < 87) { mainArray[x][i] = seg1E; } if (i >= 87 && i < 104) { mainArray[x][i] = seg1F; } if ( i >= 104 && i < 122) { mainArray[x][i] = seg1G; } } } // Update both Score LEDs with the current score void WriteScores() { SetNumberPatterns(); WritePxAnimation(playerScore,false,false); playerScoreLED.write(playerScorePx.getBuf()); wait(0.01); WritePxAnimation(robotScore,true,false); robotScoreLED.write(robotScorePx.getBuf()); } // Write Pixel array with either random colour pattern or in standard blue void WritePxAnimation(int line_num,bool isRobot,bool colour) { if (colour == true) { // random colours 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]); } } } 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]); } } } } 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,BLUE); } } } } } // Handle behaviour for the goal scored event void HandleGoal(bool hasRobotScored) { GoalAnimation(hasRobotScored); // If either player reaches the score limit, then call HandleWin(). If not, then turn goal LEDs off if(robotScore == scoreLimit || playerScore == scoreLimit) { HandleWin(); } } // Handle behaviour when either the player or robot has won a game. void HandleWin() { // Initalise variable as true bool isRobotWinner = true; // Decide if the robot is the winner. If not, then change isRobotWinner to false if(playerScore == scoreLimit) { isRobotWinner = false; pc.printf("Player won!"); WinAnimation(isRobotWinner); } else { pc.printf("Robot won!"); WinAnimation(isRobotWinner); } // Reset scores then write to LEDs robotScore = 0; playerScore = 0; idle_flag = 0; memset(mainArray, 0, sizeof mainArray); } // 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++; wait_ms(250); 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++; wait_ms(250); 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; } } } // animation when player or robot win the game void WinAnimation(bool isRobotWinner) { if(isRobotWinner == 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); } 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 { // 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); } 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(3); } void CircleAnimation(bool robot, bool robotColour, bool player, bool playerColour, int numberOfRepititions) { for (int loops = 0; loops < numberOfRepititions; loops++) { for (int i = 9; i < 115; i++) { // loop to set LEDs around the circle from start of segment A to end of Segment F 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 10 LEDs long mainArray[0][j] = 0; } } if (i > 103) { mainArray[0][i-104] = 1; for (int j = 90; j < i-10; j++) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long mainArray[0][j] = 0; } } if (i < 19) { mainArray[1][18-i] = 1; for (int j = 17; j > 25-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long mainArray[1][j] = 0; } } if (i > 18) { mainArray[1][122-i] = 1; if (i < 29) { for (int j = 9; j > 27-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long mainArray[1][j] = 0; } } if (i > 28) { for (int j = 103; j > 131-i; j--) { // Loop to clear previously set LEDs so that the chain that animates round the display is 10 LEDs long mainArray[1][j] = 0; } } } wait_ms(10); if (player == true) { WritePxAnimation(0,false,playerColour); playerScoreLED.write(playerScorePx.getBuf()); } if (robot == true) { WritePxAnimation(1,true,robotColour); robotScoreLED.write(robotScorePx.getBuf()); } } } } // 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) { SetNumberPatterns(); 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()); } 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); if (player == true){ WritePxAnimation(playerScore,false,playerColour); playerScoreLED.write(playerScorePx.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; } 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()); } } memset(mainArray, 0, sizeof mainArray); } 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[0][35+i] = 1; mainArray[0][86-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 < 10; i++) { // D 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); 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()); } } 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(); } void ZeroOutAnimation(bool robot, bool robotColour, bool player, bool playerColour) { if (player == true && robot == true) { 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()); 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[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[0][104+i] = 0; } WritePxAnimation(playerScore,false,playerColour); playerScoreLED.write(playerScorePx.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()); } 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()); } } if (player == false && robot == true) { for (int i = 0; i < 10; i++) { // A 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[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[0][104+i] = 0; } 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(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(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(); } 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; idle_button_pressed = 1; pc.printf("\nidle flag = %d",idle_flag); idleButton.disable_irq(); }