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)
|
||||
{
|
||||
JsonArray array = settingsDoc["tags"].as<JsonArray>();
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "Arduino.h"
|
||||
|
||||
String getConfigSong(String uid);
|
||||
bool getUIDvalid(String uid);
|
||||
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)
|
||||
{
|
||||
switch (gameState)
|
||||
@@ -66,14 +78,12 @@ void handleGame(void)
|
||||
setLedBlink(true);
|
||||
if (newState)
|
||||
{
|
||||
// log_i("activeState = Init");
|
||||
// newState = false;
|
||||
handleNewState();
|
||||
}
|
||||
if (getSensorInitStatus() && getAudioInitStatus() && getRFIDInitStatus())
|
||||
{
|
||||
log_i("All systems init OK, Game ready");
|
||||
setGameState(stateIdle);
|
||||
//log_i("nextState = idle");
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -84,13 +94,19 @@ void handleGame(void)
|
||||
if (newState)
|
||||
{
|
||||
handleNewState();
|
||||
setRFIDscanState(false);
|
||||
idleTime = millis();
|
||||
}
|
||||
|
||||
if (getRFIDlastUID() == "")
|
||||
if (!getRFIDlastUIDValid())
|
||||
{
|
||||
// no UID found, go RFID scanning
|
||||
setGameState(stateScanning);
|
||||
//log_i("nextState = Scanning");
|
||||
}
|
||||
else
|
||||
{
|
||||
// valid RFID found arm system
|
||||
setGameState(stateArmed);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -101,19 +117,18 @@ void handleGame(void)
|
||||
if (newState)
|
||||
{
|
||||
handleNewState();
|
||||
//log_i("activeState = RFID scanning");
|
||||
setRFIDscanState(true);
|
||||
//newState = false;
|
||||
}
|
||||
|
||||
if (getRFIDlastUID() != "")
|
||||
if (getRFIDlastUIDValid())
|
||||
{
|
||||
setGameState(stateArmed);
|
||||
// valid RFID found arm system
|
||||
setRFIDscanState(false);
|
||||
//log_i("nextState = Armed");
|
||||
setGameState(stateArmed);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case stateArmed:
|
||||
{
|
||||
SetLedColor(CRGB::Green);
|
||||
@@ -121,44 +136,37 @@ void handleGame(void)
|
||||
if (newState)
|
||||
{
|
||||
handleNewState();
|
||||
// log_i("activeState = Game Armed");
|
||||
setRFIDscanState(true);
|
||||
// newState = false;
|
||||
idleTime = millis();
|
||||
}
|
||||
|
||||
if (!hallIsIdle())
|
||||
{
|
||||
// hall has detected movement, start playing
|
||||
setGameState(stateStartPlaying);
|
||||
//log_i("nextState = Start playing");
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t now = millis();
|
||||
if(now - idleTime > TIMEOUT_ARMED)
|
||||
{
|
||||
setGameState(stateIdle);
|
||||
setRFIDscanState(false);
|
||||
log_i("Armed timed-out, clear current UID and go back to Idle");
|
||||
clearRFIDlastUID();
|
||||
//log_i("nextState = idle");
|
||||
setGameState(stateIdle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case stateStartPlaying:
|
||||
{
|
||||
SetLedColor(CRGB::Pink);
|
||||
setLedBlink(true);
|
||||
if (newState)
|
||||
{
|
||||
//log_i("activeState = startPlaying");
|
||||
//newState = false;
|
||||
handleNewState();
|
||||
setRFIDscanState(false);
|
||||
PowerKeepAlive();
|
||||
|
||||
}
|
||||
|
||||
if (hallIsIdle())
|
||||
@@ -167,15 +175,8 @@ void handleGame(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// 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);
|
||||
GameStartPlayingSong();
|
||||
setGameState(statePlaying);
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -186,13 +187,10 @@ void handleGame(void)
|
||||
if (newState)
|
||||
{
|
||||
handleNewState();
|
||||
// log_i("activeState = Playing");
|
||||
// newState = false;
|
||||
}
|
||||
|
||||
if (hallIsIdle())
|
||||
{
|
||||
setAudioState(false);
|
||||
setGameState(stateStopPlaying);
|
||||
}
|
||||
}
|
||||
@@ -204,12 +202,11 @@ void handleGame(void)
|
||||
if (newState)
|
||||
{
|
||||
handleNewState();
|
||||
// log_i("activeState = stopPlaying");
|
||||
// newState = false;
|
||||
}
|
||||
|
||||
if (!getAudioState())
|
||||
{
|
||||
setAudioState(false);
|
||||
setGameState(stateStopped);
|
||||
}
|
||||
}
|
||||
@@ -220,10 +217,9 @@ void handleGame(void)
|
||||
setLedBlink(false);
|
||||
if (newState)
|
||||
{
|
||||
// log_i("activeState = stopped");
|
||||
// newState = false;
|
||||
handleNewState();
|
||||
}
|
||||
|
||||
if (!getAudioState())
|
||||
{
|
||||
setGameState(stateIdle);
|
||||
@@ -232,6 +228,8 @@ void handleGame(void)
|
||||
break;
|
||||
default:
|
||||
{
|
||||
log_w("Unknown state go to Idle");
|
||||
setGameState(stateIdle);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -48,11 +48,11 @@ String getRFIDlastUID(void)
|
||||
|
||||
bool getRFIDlastUIDValid(void)
|
||||
{
|
||||
if(getRFIDlastUID() != "")
|
||||
if(lastUid == "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return (getUIDvalid(lastUid));
|
||||
}
|
||||
|
||||
void setRFIDscanState(bool state)
|
||||
|
||||
@@ -16,4 +16,5 @@ void handleRfid(void);
|
||||
bool getRFIDInitStatus(void);
|
||||
String getRFIDlastUID(void);
|
||||
void setRFIDscanState(bool state);
|
||||
bool getRFIDlastUIDValid(void);
|
||||
void clearRFIDlastUID(void);
|
||||
Reference in New Issue
Block a user