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.
Revision 16:f0176e9e4a9d, committed 2013-08-23
- Comitter:
- vsluiter
- Date:
- Fri Aug 23 13:29:11 2013 +0000
- Parent:
- 15:72c494e934c8
- Child:
- 17:c5a38d01dfbe
- Commit message:
- Added GameButton class. Not tested
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Aug 23 08:03:51 2013 +0000
+++ b/main.cpp Fri Aug 23 13:29:11 2013 +0000
@@ -14,6 +14,7 @@
void Score(uint8_t left, uint8_t right);
void DrawGamePaddle(void);
void HandleScore(uint8_t *, uint8_t *, bool, Timer *);
+void DrawLine(uint8_t start, uint8_t end, uint8_t red, uint8_t green, uint8_t blue);
uint16_t totalstrip[NUMBER_OF_PIXELS];
volatile int8_t paddlestart= 0;
SPI ledstrip(PTD2,NC,PTD1);
@@ -111,6 +112,49 @@
}
}
+class GameButton
+{
+ public:
+ GameButton(PinName pin, float time);
+ bool pushflag;
+ bool getTimeoutActive(void);
+ // void SetTimeout(float time);
+ private:
+ InterruptIn *intpin;
+ Timeout timeout;
+ float m_time;
+ bool m_timeoutactive;
+ void TimeOutHandler(void);
+ void PushHandler(void);
+};
+
+GameButton::GameButton(PinName pin, float time)
+{
+ pushflag = false;
+ intpin = new InterruptIn(pin);
+ (*intpin).mode(PullUp);
+ (*intpin).fall(this, &GameButton::PushHandler);
+ m_time = time;
+ //timeout = new Timeout(m_time);
+}
+
+void GameButton::PushHandler(void)
+{
+ pushflag = true;
+ m_timeoutactive = true;
+ timeout.attach(this, &GameButton::TimeOutHandler, m_time);
+}
+
+void GameButton::TimeOutHandler(void)
+{
+ m_timeoutactive = false;
+}
+
+bool GameButton::getTimeoutActive(void)
+{
+ return m_timeoutactive;
+}
+
void UpdateLEDstrip(void)
{
uint8_t pixelcounter;
@@ -176,6 +220,7 @@
static uint8_t naglevel1 = 0, naglevel2 = 0;
//paddle.position = 48;
//while(1);
+ DrawGamePaddle();
if(leftpushed || rightpushed)
{
if(paddle.direction == 1)
@@ -189,6 +234,7 @@
paddle.direction = 0;
paddle.setSpeed(25+(rightpushpos-(NUMBER_OF_PIXELS-1))*4);
paddle.position = NUMBER_OF_PIXELS-1;
+ DrawLine(NUMBER_OF_PIXELS-10, NUMBER_OF_PIXELS-1, 255,255,255);
}
pc.printf("\n\rright pushed. Paddle position: %d, registered: %d", paddle.position, rightpushpos);
}
@@ -204,6 +250,7 @@
paddle.direction = 1;
paddle.setSpeed(25+(-leftpushpos)*4);
paddle.position = 0;
+ DrawLine(0,9, 255,255,255);
}
pc.printf("\n\rleft pushed. Paddle position: %d, registered: %d", paddle.position, leftpushpos);
}
@@ -242,7 +289,6 @@
paddle.setSize(2);
//paddle.setSpeed(70);
}
- DrawGamePaddle();
}
}
@@ -302,24 +348,31 @@
uint8_t blue;
}ledcolor_t;
ledcolor_t rightled={0,0,0}, leftled={0,0,0};
- if(left >= right)
- {
- maxscore = left;
- leftled.green = 255;
- rightled.red = 255;
- }
- if(right >= left)
- {
- maxscore = right;
- leftled.red = 255;
- rightled.green = 255;
- }
+ left>=right?maxscore = left: maxscore = right;
for(scorecounter = 0 ; scorecounter <= maxscore ; scorecounter++)
{
uint8_t templeft,tempright;
templeft = left>scorecounter?scorecounter:left;
tempright = right>scorecounter?scorecounter:right;
uint8_t sidecounter;
+ if(scorecounter == maxscore)
+ {
+ if(left >= right)
+ {
+ leftled.green = 255;
+ rightled.red = 255;
+ }
+ if(right >= left)
+ {
+ leftled.red = 255;
+ rightled.green = 255;
+ }
+ }
+ else
+ {
+ leftled.green = leftled.red = leftled.blue = rightled.green = rightled.red = rightled.blue = 255;
+ }
+
for(ledcounter = 0; ledcounter < NUMBER_OF_PIXELS; ledcounter++)
{
write_led(&totalstrip[ledcounter], 0, 0 ,0);
@@ -332,9 +385,20 @@
{
write_led(&totalstrip[(NUMBER_OF_PIXELS-1)-(sidecounter*2)],rightled.red,rightled.green,rightled.blue);
}
- wait(0.4);
+ wait(0.2);
}
- wait(0.5);
+ wait(0.7);
+}
+
+
+//Only writes pixels that are in 'line'. Does not clear, only overwrites.
+void DrawLine(uint8_t start, uint8_t end, uint8_t red, uint8_t green, uint8_t blue)
+{
+ uint8_t ledcounter;
+ for(ledcounter = start; ledcounter < end ; ledcounter++);
+ {
+ write_led(&totalstrip[ledcounter], red, green, blue);
+ }
}
void WinLoose(float seconds, bool side)