Compare commits
4 Commits
master
...
2e5caea417
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e5caea417 | |||
| 56c3f749e1 | |||
| 4cc0c33cce | |||
| 48a1126a1c |
@@ -19,6 +19,9 @@ lib_ldf_mode = deep+
|
|||||||
board = nucleo_l031K6
|
board = nucleo_l031K6
|
||||||
build_flags =
|
build_flags =
|
||||||
-DHARDWAREVERSION=11
|
-DHARDWAREVERSION=11
|
||||||
|
; -fexceptions
|
||||||
|
; build_unflags =
|
||||||
|
; -fno-exceptions
|
||||||
|
|
||||||
; [env:LedBoardV10]
|
; [env:LedBoardV10]
|
||||||
; board = STM32L031K6
|
; board = STM32L031K6
|
||||||
|
|||||||
@@ -16,55 +16,118 @@ void c_chaingame::nextPattern(void)
|
|||||||
|
|
||||||
void c_chaingame::runGame(void)
|
void c_chaingame::runGame(void)
|
||||||
{
|
{
|
||||||
if (!patternFlag && !cheatButtonFlag)
|
switch (state)
|
||||||
{
|
{
|
||||||
if (buttonIsPressed(ledpattern[patternIndex]))
|
case cg_reset:
|
||||||
{
|
{
|
||||||
//pattern button pressed, turn on LED, set flag
|
// clear all vars
|
||||||
turnOnLed(ledpattern[patternIndex]);
|
turnOnAllLed();
|
||||||
patternFlag = true;
|
|
||||||
cheatbutton = 0;
|
cheatbutton = 0;
|
||||||
|
playNextTimer = 0;
|
||||||
|
patternIndex = 0;
|
||||||
|
state = cg_idle;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case cg_idle:
|
||||||
|
{
|
||||||
|
updateCheatButton();
|
||||||
|
turnOffAllLed();
|
||||||
|
// wait for button
|
||||||
|
|
||||||
|
if (buttonIsPressed(ledpattern[patternIndex]) && (cheatbutton == 0))
|
||||||
|
{
|
||||||
|
state = cg_play;
|
||||||
|
}
|
||||||
|
// -> cg_cheat
|
||||||
else if (buttonIsPressed(cheatbutton))
|
else if (buttonIsPressed(cheatbutton))
|
||||||
{
|
{
|
||||||
// cheatbutton pressed, turn on cheat led, set flag
|
state = cg_cheat;
|
||||||
turnOnLed(cheatbutton);
|
|
||||||
cheatButtonFlag = true;
|
|
||||||
}
|
}
|
||||||
else if (anybutton())
|
}
|
||||||
|
break;
|
||||||
|
case cg_play:
|
||||||
{
|
{
|
||||||
// if any other button is pressed, clear cheat button
|
// enable pattern LED and wait for all switches OFF
|
||||||
//cheatbutton = 0;
|
if (buttonIsPressed(ledpattern[patternIndex]))
|
||||||
}
|
{
|
||||||
}
|
turnOnLed(ledpattern[patternIndex]);
|
||||||
|
}
|
||||||
if (!buttonIsPressed(ledpattern[patternIndex]))
|
else
|
||||||
{
|
{
|
||||||
// pattern switch is open, turn off pattern LED
|
|
||||||
turnOffLed(ledpattern[patternIndex]);
|
turnOffLed(ledpattern[patternIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!buttonIsPressed(cheatbutton) && cheatButtonFlag)
|
|
||||||
{
|
|
||||||
// cheat switch is open, turn of cheat LED
|
|
||||||
turnOffLed(cheatbutton);
|
|
||||||
cheatButtonFlag = false;
|
|
||||||
cheatbutton = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anybutton())
|
if (!anybutton())
|
||||||
{
|
{
|
||||||
//all switches are open, turn off all LEDs
|
// -> cg_play_next
|
||||||
turnOffAllLed();
|
turnOffAllLed();
|
||||||
if (patternFlag)
|
playNextTimer = millis();
|
||||||
|
state = cg_play_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cg_play_next:
|
||||||
{
|
{
|
||||||
// pattern LED was triggerd, reset flag, move to next pattern
|
uint32_t timeNow = millis();
|
||||||
patternFlag = false;
|
if (anybutton())
|
||||||
|
{
|
||||||
|
// switched on again, return to cg_play state
|
||||||
|
state = cg_play;
|
||||||
|
}
|
||||||
|
if (timeNow - playNextTimer > PLAYNEXTTIMEOUT)
|
||||||
|
{
|
||||||
|
// increase patterm counter after 3sec timeout -> cg_idle
|
||||||
nextPattern();
|
nextPattern();
|
||||||
|
state = cg_idle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case cg_cheat:
|
||||||
|
{
|
||||||
|
// enable CHEAT LED on
|
||||||
|
if (buttonIsPressed(cheatbutton))
|
||||||
|
{
|
||||||
|
turnOnLed(cheatbutton);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
turnOffLed(cheatbutton);
|
||||||
|
}
|
||||||
|
if (!anybutton())
|
||||||
|
{
|
||||||
|
turnOffAllLed();
|
||||||
|
playNextTimer = millis();
|
||||||
|
state = cg_cheat_next;
|
||||||
|
}
|
||||||
|
// wait for all switches off
|
||||||
|
// -> cg_idle
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cg_cheat_next:
|
||||||
|
{
|
||||||
|
uint32_t timeNow = millis();
|
||||||
|
if (anybutton())
|
||||||
|
{
|
||||||
|
// switched on again, return to cg_play state
|
||||||
|
state = cg_cheat;
|
||||||
|
}
|
||||||
|
if (timeNow - playNextTimer > PLAYNEXTTIMEOUT)
|
||||||
|
{
|
||||||
|
// increase patterm counter after 3sec timeout -> cg_idle
|
||||||
|
cheatbutton = 0;
|
||||||
|
state = cg_idle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
state = cg_reset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//check cheatbuttons
|
void c_chaingame::updateCheatButton(void)
|
||||||
|
{
|
||||||
|
// check cheatbuttons
|
||||||
if (buttonIsPressed(4) && (cheatbutton == 0))
|
if (buttonIsPressed(4) && (cheatbutton == 0))
|
||||||
{
|
{
|
||||||
// cheatbutton 4 (momentary 1) was closed, set cheatbutton to 1
|
// cheatbutton 4 (momentary 1) was closed, set cheatbutton to 1
|
||||||
@@ -81,12 +144,13 @@ void c_chaingame::runGame(void)
|
|||||||
cheatbutton = 3;
|
cheatbutton = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool c_chaingame::initGame(void)
|
bool c_chaingame::initGame(void)
|
||||||
{
|
{
|
||||||
patternIndex = 0;
|
// patternFlag = false;
|
||||||
patternFlag = false;
|
// cheatbutton = 0;
|
||||||
cheatbutton = 0;
|
// cheatButtonFlag = false;
|
||||||
cheatButtonFlag = false;
|
state = cg_reset;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void c_chaingame::resetGame(void)
|
void c_chaingame::resetGame(void)
|
||||||
|
|||||||
@@ -5,20 +5,35 @@
|
|||||||
#include "buttons.h"
|
#include "buttons.h"
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
|
#define PLAYNEXTTIMEOUT 1500 // 3sec * 1000ms
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
cg_idle,
|
||||||
|
cg_play,
|
||||||
|
cg_play_next,
|
||||||
|
cg_cheat,
|
||||||
|
cg_cheat_next,
|
||||||
|
cg_reset
|
||||||
|
} cg_states;
|
||||||
|
|
||||||
class c_chaingame : public c_game
|
class c_chaingame : public c_game
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
uint8_t patternIndex;
|
uint8_t patternIndex;
|
||||||
bool patternFlag = false;
|
//bool patternFlag = false;
|
||||||
uint16_t cheatbutton = 0;
|
uint16_t cheatbutton = 0;
|
||||||
bool cheatButtonFlag = false;
|
//bool cheatButtonFlag = false;
|
||||||
uint16_t ledpattern[4] = {1, 3, 1, 2};
|
uint16_t ledpattern[4] = {1, 3, 1, 2};
|
||||||
int patternlength = sizeof(ledpattern) / sizeof(ledpattern[0]);
|
int patternlength = sizeof(ledpattern) / sizeof(ledpattern[0]);
|
||||||
|
cg_states state = cg_reset;
|
||||||
|
uint32_t playNextTimer=0;
|
||||||
|
|
||||||
void nextPattern(void);
|
void nextPattern(void);
|
||||||
|
void updateCheatButton(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
c_chaingame(e_ledcolor gamecolor): c_game{chaingame, gamecolor} {}
|
c_chaingame(e_ledcolor gamecolor) : c_game{chaingame, gamecolor} {}
|
||||||
void runGame(void);
|
void runGame(void);
|
||||||
bool initGame(void);
|
bool initGame(void);
|
||||||
void resetGame(void);
|
void resetGame(void);
|
||||||
@@ -27,5 +42,4 @@ public:
|
|||||||
// void HandleChainGame( bool newstate );
|
// void HandleChainGame( bool newstate );
|
||||||
// void ResetChainGame(void);
|
// void ResetChainGame(void);
|
||||||
|
|
||||||
|
#endif // CHAINGAMEH
|
||||||
#endif //CHAINGAMEH
|
|
||||||
72
src/led.cpp
72
src/led.cpp
@@ -71,6 +71,78 @@ void setAllLeds( bool state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t lasttime = 0;
|
||||||
|
bool laststate = false;
|
||||||
|
|
||||||
|
void blinkAllLeds(void)
|
||||||
|
{
|
||||||
|
uint32_t timeNow = millis();
|
||||||
|
if(timeNow - lasttime > BLINKINTERVAL)
|
||||||
|
{
|
||||||
|
if(laststate)
|
||||||
|
{
|
||||||
|
turnOnAllLed();
|
||||||
|
laststate = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
turnOffAllLed();
|
||||||
|
laststate = true;
|
||||||
|
}
|
||||||
|
lasttime = timeNow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void blinkLed(e_ledcolor blinkled)
|
||||||
|
{
|
||||||
|
uint32_t timeNow = millis();
|
||||||
|
if(timeNow - lasttime > BLINKINTERVAL)
|
||||||
|
{
|
||||||
|
if(laststate)
|
||||||
|
{
|
||||||
|
turnOnLed(blinkled);
|
||||||
|
laststate = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
turnOffLed(blinkled);
|
||||||
|
laststate = true;
|
||||||
|
}
|
||||||
|
lasttime = timeNow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//e_ledcolor lastLed = e_ledcolor::YELLOW;
|
||||||
|
|
||||||
|
// void runningLeds(void)
|
||||||
|
// {
|
||||||
|
// uint32_t timeNow = millis();
|
||||||
|
// if(timeNow - lasttime > BLINKINTERVAL)
|
||||||
|
// {
|
||||||
|
// switch (lastLed)
|
||||||
|
// {
|
||||||
|
// case e_ledcolor::YELLOW:
|
||||||
|
// turnOffAllLed();
|
||||||
|
// turnOnLed(YELLOW);
|
||||||
|
// lastLed = e_ledcolor::RED;
|
||||||
|
// break;
|
||||||
|
// case e_ledcolor::RED:
|
||||||
|
// turnOffAllLed();
|
||||||
|
// turnOnLed(RED);
|
||||||
|
// lastLed = e_ledcolor::GREEN;
|
||||||
|
// break;
|
||||||
|
// case e_ledcolor::GREEN:
|
||||||
|
// turnOffAllLed();
|
||||||
|
// turnOnLed(GREEN);
|
||||||
|
// lastLed = e_ledcolor::YELLOW;
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// lasttime = timeNow;
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
//#############################################
|
//#############################################
|
||||||
//# leds functions #
|
//# leds functions #
|
||||||
//#############################################
|
//#############################################
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
#include "vector"
|
#include "vector"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
|
||||||
|
#define BLINKINTERVAL 200
|
||||||
|
|
||||||
enum e_ledcolor
|
enum e_ledcolor
|
||||||
{
|
{
|
||||||
YELLOW,
|
YELLOW,
|
||||||
@@ -97,6 +99,8 @@ void turnOnLed(uint16_t index);
|
|||||||
void turnOffAllLed(void);
|
void turnOffAllLed(void);
|
||||||
void turnOnAllLed(void);
|
void turnOnAllLed(void);
|
||||||
void setAllLeds( bool state);
|
void setAllLeds( bool state);
|
||||||
|
void blinkAllLeds(void);
|
||||||
|
void blinkLed(e_ledcolor blinkled);
|
||||||
|
|
||||||
|
|
||||||
#endif //LEDH
|
#endif //LEDH
|
||||||
|
|||||||
Reference in New Issue
Block a user