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:
Wed Jul 05 15:23:44 2017 +0000
Parent:
3:51604b5710f1
Child:
5:2d439ccefc7d
Commit message:
Added main.h; Added figure of 8 animation

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	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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Wed Jul 05 15:23:44 2017 +0000
@@ -0,0 +1,74 @@
+#include "mbed.h"
+#include "WS2812.h"
+#include "PixelArray.h"
+
+#define WS2812_BUF 122
+#define NUM_COLORS 6
+#define NUM_LEDS_PER_COLOR 1
+
+//-------- 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
+
+// Goal Sensors
+AnalogIn robotBreakBeam(A0);
+AnalogIn playerBreakBeam(A1);
+
+// K64F On-board LED
+DigitalOut led_green(LED_GREEN, 1);
+
+//K64F On-board Switches
+DigitalIn PB1(PTC6);
+DigitalIn PB2(PTA4);
+
+// SERIAL
+Serial pc(USBTX, USBRX); // tx, rx
+
+// 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);
+PixelArray robotScorePx(WS2812_BUF);
+PixelArray playerScorePx(WS2812_BUF);
+
+
+// LED Variables
+bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G;
+//int seg1Array[122];
+int mainArray[11][122];
+
+// 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
+
+// FUNCTION DECLERATIONS
+void Setup();
+void SetNumberPatterns();
+void SetFigureOf8Pattern();
+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 GoalAnimation(bool hasRobotScored);
+void WinAnimation(bool isRobotWinner);
+void FigureOf8Animation();
\ No newline at end of file