diff --git a/platformio.ini b/platformio.ini index 294f1c3..3701960 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,6 +12,7 @@ platform = atmelavr board = uno framework = arduino +monitor_speed = 19200 lib_deps = evert-arias/EasyButton@^2.0.1 olikraus/U8g2@^2.34.4 diff --git a/src/EecIv.cpp b/src/EecIv.cpp index ec36e29..9d0b4a4 100644 --- a/src/EecIv.cpp +++ b/src/EecIv.cpp @@ -78,10 +78,17 @@ void EecIv::setModeLiveData() { int EecIv::mainLoop() { switch(currentState) { case IDLE: + startMessageCounter = 0; break; case SEND_START_MESSAGE: + if(startMessageCounter >= startMessageCounterMax) { + onStartMessageTimeout(); + currentState = IDLE; + break; + } sendStartMessage(); + startMessageCounter++; debugPrint("Send start message"); currentState = ENABLE_READING_FAST_SYNC; break; @@ -92,6 +99,7 @@ int EecIv::mainLoop() { currentState = WAIT_FAST_SYNC; case WAIT_FAST_SYNC: if (waitSyncLoop()) { + startMessageCounter = 0; currentState = ANSWER_FAST_SYNC; } else { if(exceededTimeout()) { diff --git a/src/EecIv.h b/src/EecIv.h index adfeb20..0c4383e 100644 --- a/src/EecIv.h +++ b/src/EecIv.h @@ -26,6 +26,7 @@ class EecIv { callback_t onFaultCodeFinished; callback_t onKoeoReadCode; callback_empty_t onKoeoFinished; + callback_empty_t onStartMessageTimeout; enum OperationMode { READ_FAULTS, @@ -72,6 +73,8 @@ class EecIv { int koeoCounter = 0; unsigned long timeoutTimer = 0L; const unsigned long timeoutMax = 2000UL; + unsigned short startMessageCounter = 0; + const unsigned short startMessageCounterMax = 5; char out_buf[90]; diff --git a/src/EecIvReader.cpp b/src/EecIvReader.cpp index 719a4e7..4d4450b 100644 --- a/src/EecIvReader.cpp +++ b/src/EecIvReader.cpp @@ -48,6 +48,7 @@ void onFaultCodeFinished(char message[]); void onKoeoReadCode(char message[]); void onKoeoFinished(); void onFaultCodeFinished(char message[]); +void onStartMessageTimeout(); void onButtonUp(); void onButtonDown(); @@ -69,6 +70,7 @@ int mode = FAULT_CODE; enum SCREEN_MODE { SELECT_MODE, + START_MESSAGE_TIMEOUT, READING_FAULT_CODE, RESULT_FAULT_CODE, RUNNING_KOEO, @@ -99,6 +101,8 @@ void setup() { eecIv.onFaultCodeFinished = &onFaultCodeFinished; eecIv.onKoeoReadCode = &onKoeoReadCode; eecIv.onKoeoFinished = &onKoeoFinished; + eecIv.onStartMessageTimeout = &onStartMessageTimeout; + eecIv.setup(); initSelectMode(); @@ -162,6 +166,7 @@ void onButtonSelect() { case SELECT_MODE: selectMode(); break; + case START_MESSAGE_TIMEOUT: case RESULT_KOEO: case RESULT_FAULT_CODE: initSelectMode(); @@ -217,6 +222,11 @@ void onKoeoReadCode(char message[]) { koeo_counter++; } +void onStartMessageTimeout() { + screenMode = RESULT_FAULT_CODE; + drawMenuScreen(BACK_SIGN, NO_SIGN, NO_SIGN, "Timeout Error", "Is the igni-", "tion on?", ""); +} + void onKoeoFinished() { koeo_counter = 0; koeo_code = 0;