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:
benswindell
Date:
Mon Feb 27 16:38:51 2017 +0000
Child:
1:24bc4d8ed2ae
Commit message:
Added in trace;

Changed in this revision

PixelArray.lib Show annotated file Show diff for this revision Revisions of this file
WS2812.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PixelArray.lib	Mon Feb 27 16:38:51 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/chris/code/PixelArray/#b45a70faaa83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WS2812.lib	Mon Feb 27 16:38:51 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/bridadan/code/WS2812/#6e647820f587
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Feb 27 16:38:51 2017 +0000
@@ -0,0 +1,407 @@
+#include "mbed.h"
+#include "WS2812.h"
+#include "PixelArray.h"
+
+#define WS2812_BUF 112
+#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 0xffffff
+#define ARMBLUE 0x128BAB
+#define PURPLE 0xff0055 // Player has conceded a goal
+
+// GPIO
+AnalogIn robotBreakBeam(A0);
+AnalogIn playerBreakBeam(A1);
+DigitalOut led_green(LED_GREEN, 1);
+
+// 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(D9, WS2812_BUF, 0, 5, 5, 0);
+WS2812 playerScoreLED(D8,WS2812_BUF, 0, 5, 5, 0);
+WS2812 robotGoalLED(D7,WS2812_BUF, 0, 5, 5, 0);
+WS2812 playerGoalLED(D6,WS2812_BUF, 0, 5, 5, 0);
+
+// LED Variables
+bool seg1A, seg1B, seg1C, seg1D, seg1E, seg1F, seg1G;
+int seg1Array[112];
+int mainArray[11][122];
+PixelArray px(WS2812_BUF);
+
+// Score counters
+int robotScore;
+int playerScore;
+int scoreLimit = 3;
+bool finishedGame = false;
+int endFlashes = 0;
+int numFlashes;
+
+// Robot Bream Beam value
+double prevRbbValue; // Previous Robot break beam value
+double prevPbbValue; // Previous player break beam value
+
+// FUNCTION DECLERATIONS
+void Write7Seg(int num);
+void SetLEDArray(int x);
+void WriteRobotGoal(bool scored);
+void WritePlayerGoal(bool scored);
+void WriteScores();
+void HandleGoal(bool hasRobotScored);
+void WritePxScores(int line_num);
+void WritePxGoal(unsigned int colour);
+
+
+void setup()
+{
+    // Set brightness of the 4 LED strips
+    robotScoreLED.setII(0xFF);
+    robotScoreLED.useII(WS2812::GLOBAL);
+    playerScoreLED.setII(0xFF);
+    playerScoreLED.useII(WS2812::GLOBAL);
+    robotGoalLED.setII(0xFF);
+    robotGoalLED.useII(WS2812::GLOBAL);
+    playerGoalLED.setII(0xFF);
+    playerGoalLED.useII(WS2812::GLOBAL);
+
+    // Turn on green LED
+    led_green = 0;
+
+    // Fills 2D array with data
+    for(int i=0; i<10; i++) {
+        Write7Seg(i);
+    }
+
+    // Set scores to 0
+    robotScore = 0;
+    playerScore = 0;
+    numFlashes = 0;
+
+    // Set LEDS to start values
+    WriteScores();
+    wait(0.01);
+    WritePlayerGoal(true);
+    wait(0.01);
+    WriteRobotGoal(true);
+    
+    // Turn off green LED
+    led_green = 1;
+}
+
+// Set segment variables
+void Write7Seg(int num)
+{
+    switch (num) {
+        case 0 :
+            // Off
+            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 < 16) {
+            mainArray[x][i] = seg1A;
+        }
+
+        if ( i >= 16 && i < 32) {
+            mainArray[x][i] = seg1B;
+        }
+
+        if (i >= 32 && i < 48) {
+            mainArray[x][i] = seg1C;
+        }
+
+        if (i >= 48 && i < 64) {
+            mainArray[x][i]= seg1D;
+        }
+
+        if ( i >= 64 && i < 80) {
+            mainArray[x][i] = seg1E;
+        }
+
+        if (i >= 80 && i < 96) {
+            mainArray[x][i] = seg1F;
+        }
+
+        if ( i >= 96 && i < 112) {
+            mainArray[x][i] = seg1G;
+        }
+    }// FOR LOOP
+}
+
+// Write to player 1 LED (ROBOT)
+void WriteRobotGoal(bool scored)
+{
+    if(scored == true)
+    {
+        WritePxGoal(BLUE);
+    } else {
+        WritePxGoal(PURPLE);    
+    }
+    robotGoalLED.write(px.getBuf());
+}
+
+// Write to player 1 LED (ROBOT)
+void WritePlayerGoal(bool scored)
+{
+    if(scored == true)
+    {
+        WritePxGoal(BLUE);
+    } else {
+        WritePxGoal(PURPLE);    
+    }
+    playerGoalLED.write(px.getBuf());
+}
+
+void WriteGoalsOff()
+{
+    WritePxGoal(OFF);
+    robotGoalLED.write(px.getBuf());
+    WritePxGoal(OFF);
+    playerGoalLED.write(px.getBuf());    
+}
+
+void WriteScores()
+{
+    WritePxScores(playerScore);
+    playerScoreLED.write(px.getBuf());
+    wait(0.01);
+    WritePxScores(robotScore);
+    robotScoreLED.write(px.getBuf());
+}
+
+// Write pixel array
+void WritePxScores(int line_num)
+{
+    for (int i = 0; i < WS2812_BUF; i++) {
+        if (mainArray[line_num][i] == 0) {
+            px.Set(i,OFF);
+        }
+
+        if (mainArray[line_num][i] == 1) {
+            px.Set(i,LIGHTBLUE);
+        }
+    }
+}
+
+void WritePxGoal(unsigned int colour)
+{
+    for (int i = 0; i < WS2812_BUF; i++) {
+        px.Set(i,colour);
+    }
+}
+
+void HandleGoal(bool hasRobotScored)
+{
+    if(hasRobotScored == true) {
+        robotScore++;
+        WriteRobotGoal(true);
+        wait(0.01);
+        WritePlayerGoal(false);
+        wait(0.01);
+        WriteScores();
+    } else {
+        playerScore++;
+        WriteRobotGoal(false);
+        wait(0.01);
+        WritePlayerGoal(true);
+        wait(0.01);
+        WriteScores();
+    }
+    
+    wait(5);
+    WriteGoalsOff();
+}
+
+int main()
+{
+    while(1) {
+        double rbbValue = robotBreakBeam; // Read Robot Break beam
+        double pbbValue = playerBreakBeam; // Read Player Break beam
+
+        // IF PLAYER HAS SCORED A GOAL
+        if ((prevRbbValue - rbbValue)>0.01) {
+            pc.printf("Player has scored a goal \n\r");
+            HandleGoal(false);
+        }
+
+        // IF ROBOT HAS SCORED A GOAL
+        if ((prevPbbValue - pbbValue) > 0.01) {
+            pc.printf("Robot has scored a goal \n\r");
+            HandleGoal(true);
+        }
+        
+        prevRbbValue = rbbValue;
+        prevPbbValue = pbbValue;
+        
+        pc.printf("PlayerGoal: %f, RobotGoal: %f",pbbValue,rbbValue);
+        pc.printf("Player: %i v %i : Robot",playerScore,robotScore);
+        wait(0.01);
+
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Feb 27 16:38:51 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/ef9c61f8c49f
\ No newline at end of file