updated 7seg controls for new 7 seg boards
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
Revision 4:2e80bd814f57, committed 2017-07-05
- 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
