diff --git a/meterBusClient.cpp b/meterBusClient.cpp index 4dda8b7..cca01f2 100644 --- a/meterBusClient.cpp +++ b/meterBusClient.cpp @@ -187,7 +187,8 @@ void MeterBusClient::handleFrame() { typedef enum { - STATE_START, STATE_IDLE, STATE_SHORT_FRAME, STATE_LONG_CTRL_FRAME, STATE_HANDLE, STATE_INVALID, STATE_DONE + STATE_START, STATE_IDLE, STATE_SHORT_FRAME, STATE_LONG_CTRL_FRAME, STATE_HANDLE, STATE_INVALID, STATE_DONE, + STATE_DELAYED_HANDLE, STATE_DELAY } e_meterBusClientState; typedef enum { @@ -200,6 +201,7 @@ void MeterBusClient::exec() { static e_meterBusClientState state = STATE_IDLE; static e_meterBusClientSubState subState = SUBSTATE_LENGTH; static unsigned char userDataCnt = 0; + static unsigned long receivedDoneTimestamp; int chi = Serial3.read(); char ch = (char) chi; @@ -315,6 +317,17 @@ void MeterBusClient::exec() { break; case STATE_HANDLE: + state = STATE_DELAY; + receivedDoneTimestamp = millis(); + break; + + case STATE_DELAY: + if ((receivedDoneTimestamp + RESPONSE_DELAY) < millis()) { + state = STATE_DELAYED_HANDLE; + } + break; + + case STATE_DELAYED_HANDLE: if (m_frame.valid) { handleFrame(); } else { diff --git a/meterBusClient.h b/meterBusClient.h index 4ba04ca..2e092a6 100644 --- a/meterBusClient.h +++ b/meterBusClient.h @@ -15,6 +15,10 @@ #include "Resources.h" #include "Thermometer.h" + +const unsigned long RESPONSE_DELAY = 50; + + class MeterBusClient;