Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: PixelArray WS2812 mbed
Fork of frdm_pong_table_controller by
Diff: main.cpp
- Revision:
- 8:66dac2e00cce
- Parent:
- 7:dc6f1f105c52
- Child:
- 9:f3f194982bb3
--- a/main.cpp Mon Jul 10 16:06:14 2017 +0000
+++ b/main.cpp Tue Jul 11 08:51:23 2017 +0000
@@ -21,8 +21,6 @@
}
CircleAnimation(true,true,true,true,1);
-
- idleButton.enable_irq();
wait(0.02);
@@ -37,8 +35,6 @@
idle_button_pressed = 0;
IdleToPlayTransition();
-
- idleButton.enable_irq();
}
@@ -75,12 +71,12 @@
// 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);
- // enable the internal pull-down resistor on idleButton
- idleButton.mode(PullDown);
-
// Set brightness of the 4 LED strips
robotScoreLED.setII(0xB0);
robotScoreLED.useII(WS2812::GLOBAL);
@@ -106,27 +102,37 @@
memset(mainArray, 0, sizeof mainArray);
- for (int i = 0; i < 104; i++) {
+ for (int i = 9; i < 115; i++) { // loop to set LEDs around the circle from start of segment A to end of Segment F
- mainArray[0][i] = 1;
+ 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(playerScore,false,true);
+ WritePxAnimation(0,false,true);
playerScoreLED.write(playerScorePx.getBuf());
-
- WritePxAnimation(robotScore,true,true);
+ WritePxAnimation(1,true,true);
robotScoreLED.write(robotScorePx.getBuf());
-
+
}
- SetNumberPatterns();
-
DrainAnimation(true,true,robotScore,true,true,playerScore);
wait(1);
- WriteAnimation();
+ WriteScores();
+
+ idleButton.enable_irq();
}
@@ -136,6 +142,10 @@
playerScore = 0;
memset(mainArray, 0, sizeof mainArray);
+ wait(1);
+
+ idleButton.enable_irq();
+
}
@@ -333,8 +343,9 @@
}
// Update both Score LEDs with the current score
-void WriteAnimation()
+void WriteScores()
{
+ SetNumberPatterns();
WritePxAnimation(playerScore,false,false);
playerScoreLED.write(playerScorePx.getBuf());
wait(0.01);
@@ -567,17 +578,37 @@
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) {
+ 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 9 LEDs long
+ 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 > 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 9 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;
+ }
}
}
@@ -588,20 +619,21 @@
playerScoreLED.write(playerScorePx.getBuf());
}
if (robot == true) {
- WritePxAnimation(0,true,robotColour);
+ 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;
@@ -693,7 +725,7 @@
}
- SetNumberPatterns();
+ memset(mainArray, 0, sizeof mainArray);
}
