updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
Diff: main.cpp
- Revision:
- 4:2e80bd814f57
- Parent:
- 3:51604b5710f1
- Child:
- 5:2d439ccefc7d
--- a/main.cpp Wed Jul 05 11:10:38 2017 +0000 +++ b/main.cpp Wed Jul 05 15:23:44 2017 +0000 @@ -1,74 +1,38 @@ -#include "mbed.h" -#include "WS2812.h" -#include "PixelArray.h" +#include "main.h" -#define WS2812_BUF 122 -#define NUM_COLORS 6 -#define NUM_LEDS_PER_COLOR 1 +int main() +{ + Setup(); -//-------- Colours ----------- -#define RED 0x2f0000 -#define YELLOW 0x2f2f00 -#define GREEN 0x002f00 -#define LIGHTBLUE 0x002f2f -#define DARKBLUE 0x00002f -#define BLUE 0x0000ff // Player scored a goal -#define PINK 0x2f002f -#define OFF 0x000000 -#define WHITE 0xffffaa -#define ARMBLUE 0x128BAB -#define PURPLE 0xff0055 // Player has conceded a goal + while(1) { + + double rbbValue = robotBreakBeam; // Read Robot Break beam + double pbbValue = playerBreakBeam; // Read Player Break beam -// GPIO -AnalogIn robotBreakBeam(A0); -AnalogIn playerBreakBeam(A1); -DigitalOut led_green(LED_GREEN, 1); -DigitalIn PB1(PTC6); -DigitalIn PB2(PTA4); - -// SERIAL -Serial pc(USBTX, USBRX); // tx, rx + // IF PLAYER HAS SCORED A GOAL + if (((prevRbbValue - rbbValue)>0.03)|| (PB1==0)) { + pc.printf("Player has scored a goal \n\r"); + HandleGoal(false); + } -// LED STRIPS -// See the program page for information on the timing numbers -// The given numbers are for the K64F -WS2812 robotScoreLED(D3, WS2812_BUF, 0, 5, 5, 0); -WS2812 playerScoreLED(D5,WS2812_BUF, 0, 5, 5, 0); + // IF ROBOT HAS SCORED A GOAL + if (((prevPbbValue - pbbValue) > 0.03)|| (PB2==0)) { + pc.printf("Robot has scored a goal \n\r"); + HandleGoal(true); + } -// LED Variables -bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G; -int seg1Array[122]; -int mainArray[11][122]; -PixelArray robotScorePx(WS2812_BUF); -PixelArray playerScorePx(WS2812_BUF); + prevRbbValue = rbbValue; + prevPbbValue = pbbValue; -// Score counters -int robotScore; -int playerScore; -int scoreLimit = 3; -bool finishedGame = false; -int endFlashes = 3; -int numFlashes; - -// Robot Bream Beam value -double prevRbbValue; // Previous Robot break beam value -double prevPbbValue; // Previous player break beam value + pc.printf("PlayerGoal: %f, RobotGoal: %f \r\n",pbbValue,rbbValue); + pc.printf("Player: %i v %i : Robot \r\n",playerScore,robotScore); + wait(0.02); -// FUNCTION DECLERATIONS -void Write7Seg(int num); -void SetLEDArray(int x); + } +} -void WriteScores(); -void HandleGoal(bool hasRobotScored); -void WritePxScores(int line_num, bool isRobot); -void WritePxGoal(unsigned int colour,bool isRobot); -void HandleWin(); - - - -void setup() +void Setup() { - // Turn on green LED led_green = 0; @@ -77,13 +41,14 @@ robotScoreLED.useII(WS2812::GLOBAL); playerScoreLED.setII(0xB0); playerScoreLED.useII(WS2812::GLOBAL); - - - // Fills 2D array with data - for(int i=0; i<10; i++) { - Write7Seg(i); - } - + + SetFigureOf8Pattern(); + + FigureOf8Animation(); + + // Fills 2D main array with data + SetNumberPatterns(); + // Set scores to 0 robotScore = 0; playerScore = 0; @@ -92,172 +57,280 @@ // Set LEDS to start values WriteScores(); - wait(1); - // Turn off green LED led_green = 1; } // Set segment variables -void Write7Seg(int num) +void SetNumberPatterns() { - switch (num) { - case 0 : - // 0 - seg1A = 1; - seg1B = 1; - seg1C = 1; - seg1D = 1; - seg1E = 1; - seg1F = 1; - seg1G = 0; + for (int num = 0; num < 11; num++) { - SetLEDArray(0); + switch (num) { + case 0 : + // 0 + seg1A = 1; + seg1B = 1; + seg1C = 1; + seg1D = 1; + seg1E = 1; + seg1F = 1; + seg1G = 0; - break; + SetLEDArray(0); + break; - case 1 : - // 1 - seg1A = 0; - seg1B = 1; - seg1C = 1; - seg1D = 0; - seg1E = 0; - seg1F = 0; - seg1G = 0; + case 1 : + // 1 + seg1A = 0; + seg1B = 1; + seg1C = 1; + seg1D = 0; + seg1E = 0; + seg1F = 0; + seg1G = 0; - SetLEDArray(1); - break; + SetLEDArray(1); + break; - case 2 : - // 2 - seg1A = 1; - seg1B = 1; - seg1C = 0; - seg1D = 1; - seg1E = 1; - seg1F = 0; - seg1G = 1; + case 2 : + // 2 + seg1A = 1; + seg1B = 1; + seg1C = 0; + seg1D = 1; + seg1E = 1; + seg1F = 0; + seg1G = 1; - SetLEDArray(2); - - break; + SetLEDArray(2); + break; - case 3 : - // 3 - seg1A = 1; - seg1B = 1; - seg1C = 1; - seg1D = 1; - seg1E = 0; - seg1F = 0; - seg1G = 1; + case 3 : + // 3 + seg1A = 1; + seg1B = 1; + seg1C = 1; + seg1D = 1; + seg1E = 0; + seg1F = 0; + seg1G = 1; - SetLEDArray(3); - break; + SetLEDArray(3); + break; - case 4: - // 4 - seg1A = 0; - seg1B = 1; - seg1C = 1; - seg1D = 0; - seg1E = 0; - seg1F = 1; - seg1G = 1; + case 4: + // 4 + seg1A = 0; + seg1B = 1; + seg1C = 1; + seg1D = 0; + seg1E = 0; + seg1F = 1; + seg1G = 1; - SetLEDArray(4); - - break; + SetLEDArray(4); + break; - case 5: - // 5 - seg1A = 1; - seg1B = 0; - seg1C = 1; - seg1D = 1; - seg1E = 0; - seg1F = 1; - seg1G = 1; + case 5: + // 5 + seg1A = 1; + seg1B = 0; + seg1C = 1; + seg1D = 1; + seg1E = 0; + seg1F = 1; + seg1G = 1; - SetLEDArray(5); - - break; + SetLEDArray(5); + break; - case 6: - // 6 - seg1A = 1; - seg1B = 0; - seg1C = 1; - seg1D = 1; - seg1E = 1; - seg1F = 1; - seg1G = 1; + case 6: + // 6 + seg1A = 1; + seg1B = 0; + seg1C = 1; + seg1D = 1; + seg1E = 1; + seg1F = 1; + seg1G = 1; - SetLEDArray(6); - - break; + SetLEDArray(6); + break; - case 7: - // 7 - seg1A = 1; - seg1B = 1; - seg1C = 1; - seg1D = 0; - seg1E = 0; - seg1F = 0; - seg1G = 0; + case 7: + // 7 + seg1A = 1; + seg1B = 1; + seg1C = 1; + seg1D = 0; + seg1E = 0; + seg1F = 0; + seg1G = 0; - SetLEDArray(7); - - break; + SetLEDArray(7); + break; - case 8: - // 8 - seg1A = 1; - seg1B = 1; - seg1C = 1; - seg1D = 1; - seg1E = 1; - seg1F = 1; - seg1G = 1; + case 8: + // 8 + seg1A = 1; + seg1B = 1; + seg1C = 1; + seg1D = 1; + seg1E = 1; + seg1F = 1; + seg1G = 1; - SetLEDArray(8); - break; + SetLEDArray(8); + break; - case 9: - // 9 - seg1A = 1; - seg1B = 1; - seg1C = 1; - seg1D = 0; - seg1E = 0; - seg1F = 1; - seg1G = 1; + case 9: + // 9 + seg1A = 1; + seg1B = 1; + seg1C = 1; + seg1D = 0; + seg1E = 0; + seg1F = 1; + seg1G = 1; - SetLEDArray(9); - break; + SetLEDArray(9); + break; - case 10: - // OFF - seg1A = 0; - seg1B = 0; - seg1C = 0; - seg1D = 0; - seg1E = 0; - seg1F = 0; - seg1G = 0; + case 10: + // OFF + seg1A = 0; + seg1B = 0; + seg1C = 0; + seg1D = 0; + seg1E = 0; + seg1F = 0; + seg1G = 0; - SetLEDArray(10); - break; + SetLEDArray(10); + break; - default : + default : - break; + break; + + } } + +} + +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; + + } + + } + } // Write segment config to main array @@ -291,7 +364,7 @@ if ( i >= 104 && i < 122) { mainArray[x][i] = seg1G; } - }// FOR LOOP + } } // Update both Score LEDs with the current score @@ -340,26 +413,7 @@ // void HandleGoal(bool hasRobotScored) { - if(hasRobotScored == true) { - robotScore++; - WriteScores(); - - // ADD GOAL PATTERN FOR ROBOT - FLASH??? - /*wait(1); - robotScorePx.SetAll(0); - wait(1); - WriteScores();*/ - - } else { - playerScore++; - WriteScores(); - - // ADD GOAL PATTERN FOR PLAYER - FLASH??? - /*wait(1); - playerScorePx.SetAll(0); - wait(1); - WriteScores();*/ - } + GoalAnimation(hasRobotScored); wait(1); @@ -377,19 +431,16 @@ // Decide if the robot is the winner. If not, then change isRobotWinner to false if(playerScore == scoreLimit) { + isRobotWinner = false; pc.printf("Player won!"); - - // ADD WINNING PATTERN FOR PLAYER - - + WinAnimation(isRobotWinner); } else { + pc.printf("Robot won!"); + WinAnimation(isRobotWinner); - // ADD WINNING PATTERN FOR ROBOT - - } // Reset scores then write to LEDs @@ -398,32 +449,56 @@ WriteScores(); } -int main() +void GoalAnimation(bool hasRobotScored) { - setup(); - - while(1) { - double rbbValue = robotBreakBeam; // Read Robot Break beam - double pbbValue = playerBreakBeam; // Read Player Break beam + if(hasRobotScored == true) { + robotScore++; + wait(0.5); + WriteScores(); + wait(0.5); + robotScorePx.SetAll(0); + robotScoreLED.write(robotScorePx.getBuf()); + wait(0.5); + WriteScores(); + + } else { + playerScore++; + wait(0.5); + WriteScores(); + wait(0.5); + playerScorePx.SetAll(0); + playerScoreLED.write(playerScorePx.getBuf()); + wait(0.5); + WriteScores(); + } + +} - // IF PLAYER HAS SCORED A GOAL - if (((prevRbbValue - rbbValue)>0.03)|| (PB1==0)) { - pc.printf("Player has scored a goal \n\r"); - HandleGoal(false); - } +void WinAnimation(bool isRobotWinner) +{ + if(isRobotWinner == 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); + } else { + + } -} \ No newline at end of file + +} + +void FigureOf8Animation() +{ + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 8; j++) { + + WritePxScores(j,false); + playerScoreLED.write(playerScorePx.getBuf()); + WritePxScores(j,true); + robotScoreLED.write(robotScorePx.getBuf()); + wait_ms(100); + + } + } +} \ No newline at end of file