optimize statemachine
This commit is contained in:
@@ -95,6 +95,26 @@ void handleConfig(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool getUIDvalid(String uid)
|
||||||
|
{
|
||||||
|
JsonArray array = settingsDoc["tags"].as<JsonArray>();
|
||||||
|
for (JsonVariant v : array)
|
||||||
|
{
|
||||||
|
String taguid((const char*)v["TagUID"]);
|
||||||
|
uint16_t result = uid.compareTo(taguid);
|
||||||
|
|
||||||
|
log_v("compare %s(config) with %s(read) = %d",taguid.c_str(), uid.c_str(), result);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
String filename((const char*)v["audiofile"]);
|
||||||
|
log_i("Tag found in config");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_e("taguid %s not found",uid.c_str() );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
String getConfigSong(String uid)
|
String getConfigSong(String uid)
|
||||||
{
|
{
|
||||||
JsonArray array = settingsDoc["tags"].as<JsonArray>();
|
JsonArray array = settingsDoc["tags"].as<JsonArray>();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
|
||||||
String getConfigSong(String uid);
|
String getConfigSong(String uid);
|
||||||
|
bool getUIDvalid(String uid);
|
||||||
String GetWifiPassword(String ssid);
|
String GetWifiPassword(String ssid);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,18 @@ String StateToString(GameStates gamestate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameStartPlayingSong(void)
|
||||||
|
{
|
||||||
|
// get filefrom config
|
||||||
|
String lastUID = getRFIDlastUID();
|
||||||
|
log_i("uid=%s", lastUID.c_str());
|
||||||
|
String nextSong = getConfigSong(lastUID);
|
||||||
|
log_i("nextSong=%s", nextSong.c_str());
|
||||||
|
playSong(nextSong);
|
||||||
|
setAudioState(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void handleGame(void)
|
void handleGame(void)
|
||||||
{
|
{
|
||||||
switch (gameState)
|
switch (gameState)
|
||||||
@@ -66,14 +78,12 @@ void handleGame(void)
|
|||||||
setLedBlink(true);
|
setLedBlink(true);
|
||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
// log_i("activeState = Init");
|
|
||||||
// newState = false;
|
|
||||||
handleNewState();
|
handleNewState();
|
||||||
}
|
}
|
||||||
if (getSensorInitStatus() && getAudioInitStatus() && getRFIDInitStatus())
|
if (getSensorInitStatus() && getAudioInitStatus() && getRFIDInitStatus())
|
||||||
{
|
{
|
||||||
|
log_i("All systems init OK, Game ready");
|
||||||
setGameState(stateIdle);
|
setGameState(stateIdle);
|
||||||
//log_i("nextState = idle");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -84,13 +94,19 @@ void handleGame(void)
|
|||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
handleNewState();
|
handleNewState();
|
||||||
|
setRFIDscanState(false);
|
||||||
idleTime = millis();
|
idleTime = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getRFIDlastUID() == "")
|
if (!getRFIDlastUIDValid())
|
||||||
{
|
{
|
||||||
|
// no UID found, go RFID scanning
|
||||||
setGameState(stateScanning);
|
setGameState(stateScanning);
|
||||||
//log_i("nextState = Scanning");
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// valid RFID found arm system
|
||||||
|
setGameState(stateArmed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -101,19 +117,18 @@ void handleGame(void)
|
|||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
handleNewState();
|
handleNewState();
|
||||||
//log_i("activeState = RFID scanning");
|
|
||||||
setRFIDscanState(true);
|
setRFIDscanState(true);
|
||||||
//newState = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getRFIDlastUID() != "")
|
if (getRFIDlastUIDValid())
|
||||||
{
|
{
|
||||||
setGameState(stateArmed);
|
// valid RFID found arm system
|
||||||
setRFIDscanState(false);
|
setRFIDscanState(false);
|
||||||
//log_i("nextState = Armed");
|
setGameState(stateArmed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case stateArmed:
|
case stateArmed:
|
||||||
{
|
{
|
||||||
SetLedColor(CRGB::Green);
|
SetLedColor(CRGB::Green);
|
||||||
@@ -121,44 +136,37 @@ void handleGame(void)
|
|||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
handleNewState();
|
handleNewState();
|
||||||
// log_i("activeState = Game Armed");
|
|
||||||
setRFIDscanState(true);
|
setRFIDscanState(true);
|
||||||
// newState = false;
|
|
||||||
idleTime = millis();
|
idleTime = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hallIsIdle())
|
if (!hallIsIdle())
|
||||||
{
|
{
|
||||||
|
// hall has detected movement, start playing
|
||||||
setGameState(stateStartPlaying);
|
setGameState(stateStartPlaying);
|
||||||
//log_i("nextState = Start playing");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
if(now - idleTime > TIMEOUT_ARMED)
|
if(now - idleTime > TIMEOUT_ARMED)
|
||||||
{
|
{
|
||||||
setGameState(stateIdle);
|
log_i("Armed timed-out, clear current UID and go back to Idle");
|
||||||
setRFIDscanState(false);
|
|
||||||
clearRFIDlastUID();
|
clearRFIDlastUID();
|
||||||
//log_i("nextState = idle");
|
setGameState(stateIdle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case stateStartPlaying:
|
case stateStartPlaying:
|
||||||
{
|
{
|
||||||
SetLedColor(CRGB::Pink);
|
SetLedColor(CRGB::Pink);
|
||||||
setLedBlink(true);
|
setLedBlink(true);
|
||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
//log_i("activeState = startPlaying");
|
|
||||||
//newState = false;
|
|
||||||
handleNewState();
|
handleNewState();
|
||||||
setRFIDscanState(false);
|
setRFIDscanState(false);
|
||||||
PowerKeepAlive();
|
PowerKeepAlive();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hallIsIdle())
|
if (hallIsIdle())
|
||||||
@@ -167,15 +175,8 @@ void handleGame(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// get filefrom config
|
GameStartPlayingSong();
|
||||||
String lastUID = getRFIDlastUID();
|
|
||||||
log_i("uid=%s", lastUID.c_str());
|
|
||||||
String nextSong = getConfigSong(lastUID);
|
|
||||||
log_i("nextSong=%s", nextSong.c_str());
|
|
||||||
playSong(nextSong);
|
|
||||||
setAudioState(true);
|
|
||||||
setGameState(statePlaying);
|
setGameState(statePlaying);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -186,13 +187,10 @@ void handleGame(void)
|
|||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
handleNewState();
|
handleNewState();
|
||||||
// log_i("activeState = Playing");
|
|
||||||
// newState = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hallIsIdle())
|
if (hallIsIdle())
|
||||||
{
|
{
|
||||||
setAudioState(false);
|
|
||||||
setGameState(stateStopPlaying);
|
setGameState(stateStopPlaying);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -204,12 +202,11 @@ void handleGame(void)
|
|||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
handleNewState();
|
handleNewState();
|
||||||
// log_i("activeState = stopPlaying");
|
|
||||||
// newState = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getAudioState())
|
if (!getAudioState())
|
||||||
{
|
{
|
||||||
|
setAudioState(false);
|
||||||
setGameState(stateStopped);
|
setGameState(stateStopped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,10 +217,9 @@ void handleGame(void)
|
|||||||
setLedBlink(false);
|
setLedBlink(false);
|
||||||
if (newState)
|
if (newState)
|
||||||
{
|
{
|
||||||
// log_i("activeState = stopped");
|
|
||||||
// newState = false;
|
|
||||||
handleNewState();
|
handleNewState();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getAudioState())
|
if (!getAudioState())
|
||||||
{
|
{
|
||||||
setGameState(stateIdle);
|
setGameState(stateIdle);
|
||||||
@@ -232,6 +228,8 @@ void handleGame(void)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
log_w("Unknown state go to Idle");
|
||||||
|
setGameState(stateIdle);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,11 +48,11 @@ String getRFIDlastUID(void)
|
|||||||
|
|
||||||
bool getRFIDlastUIDValid(void)
|
bool getRFIDlastUIDValid(void)
|
||||||
{
|
{
|
||||||
if(getRFIDlastUID() != "")
|
if(lastUid == "")
|
||||||
{
|
{
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return (getUIDvalid(lastUid));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setRFIDscanState(bool state)
|
void setRFIDscanState(bool state)
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ void handleRfid(void);
|
|||||||
bool getRFIDInitStatus(void);
|
bool getRFIDInitStatus(void);
|
||||||
String getRFIDlastUID(void);
|
String getRFIDlastUID(void);
|
||||||
void setRFIDscanState(bool state);
|
void setRFIDscanState(bool state);
|
||||||
|
bool getRFIDlastUIDValid(void);
|
||||||
void clearRFIDlastUID(void);
|
void clearRFIDlastUID(void);
|
||||||
Reference in New Issue
Block a user