diff --git a/sufst-dash/.idea/misc.xml b/sufst-dash/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..28a804d8932aba40f168fd757a74cb718a955a1a --- /dev/null +++ b/sufst-dash/.idea/misc.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="JavaScriptSettings"> + <option name="languageLevel" value="ES6" /> + </component> +</project> \ No newline at end of file diff --git a/sufst-dash/.idea/modules.xml b/sufst-dash/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..c5ab9562d702ad1361104936fc43be8db271da6f --- /dev/null +++ b/sufst-dash/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/sufst-dash.iml" filepath="$PROJECT_DIR$/.idea/sufst-dash.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/sufst-dash/.idea/sufst-dash.iml b/sufst-dash/.idea/sufst-dash.iml new file mode 100644 index 0000000000000000000000000000000000000000..bc2cd87409057301f546d83bd548111b9a241cb1 --- /dev/null +++ b/sufst-dash/.idea/sufst-dash.iml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="CPP_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/sufst-dash/.idea/vcs.xml b/sufst-dash/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c0b8635858dc7ad44b93df54b762707ce49eefc --- /dev/null +++ b/sufst-dash/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/sufst-dash/.idea/workspace.xml b/sufst-dash/.idea/workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..e860881343f4e36f8fc93ff2b470a6b2bd3f71e4 --- /dev/null +++ b/sufst-dash/.idea/workspace.xml @@ -0,0 +1,198 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true"> + <generated /> + </component> + <component name="CMakeSettings"> + <configurations> + <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> + </configurations> + </component> + <component name="ChangeListManager"> + <list default="true" id="d82c796c-eb6b-44b1-bc58-6a762ff3ba9a" name="Default Changelist" comment=""> + <change afterPath="$PROJECT_DIR$/../sufst-controller/daq.cpp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../sufst-controller/daq.h" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../sufst-controller/sd.cpp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../sufst-controller/sd.h" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-can-sd-xbee/sufst-can-sd-xbee.ino" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/dashController.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-controller/dashController.cpp" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/ecuCan.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-controller/ecuCan.cpp" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/ecuOpenloggerTags.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/openLoggerController.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/openLoggerController.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-controller/sufst-controller.ino" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-controller/sufst-controller.ino" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/sufst-dash.ino" beforeDir="false" afterPath="$PROJECT_DIR$/sufst-dash.ino" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/codeStyles/Project.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/codeStyles/codeStyleConfig.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/misc.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/modules.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/sufst-openlogger.iml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/vcs.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/workspace.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/buffer.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/buffer.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/openLogger.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/openLogger.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger/sufst-openlogger.ino" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/codeStyles/Project.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/codeStyles/codeStyleConfig.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/misc.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/modules.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/sufst-openlogger_controller.iml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/vcs.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/workspace.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/buffer.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/buffer.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/can.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/can.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/ecuCan.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/ecuCan.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/ecuOpenloggerTags.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.cpp" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.h" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/sufst-openlogger_controller.ino" beforeDir="false" /> + </list> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="ClangdSettings"> + <option name="formatViaClangd" value="false" /> + </component> + <component name="FileEditorManager"> + <leaf> + <file pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/sufst-dash.ino"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="172"> + <caret line="271" column="22" selection-start-line="271" selection-start-column="22" selection-end-line="271" selection-end-column="22" /> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/sufst-dash.ino" /> + </list> + </option> + </component> + <component name="ProjectConfigurationFiles"> + <option name="files"> + <list> + <option value="$PROJECT_DIR$/.idea/sufst-dash.iml" /> + <option value="$PROJECT_DIR$/.idea/misc.xml" /> + <option value="$PROJECT_DIR$/.idea/vcs.xml" /> + <option value="$PROJECT_DIR$/.idea/modules.xml" /> + </list> + </option> + </component> + <component name="ProjectFrameBounds" extendedState="6"> + <option name="width" value="960" /> + <option name="height" value="1030" /> + </component> + <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> + <component name="ProjectView"> + <navigator proportions="" version="1"> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="sufst-dash" type="b2602c69:ProjectViewProjectNode" /> + <item name="sufst-dash" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Scope" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> + <property name="WebServerToolWindowFactoryState" value="false" /> + <property name="node.js.detected.package.eslint" value="true" /> + <property name="node.js.detected.package.tslint" value="true" /> + <property name="node.js.path.for.package.eslint" value="project" /> + <property name="node.js.path.for.package.tslint" value="project" /> + <property name="node.js.selected.package.eslint" value="(autodetect)" /> + <property name="node.js.selected.package.tslint" value="(autodetect)" /> + <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> + <property name="nodejs_npm_path_reset_for_default_project" value="true" /> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="d82c796c-eb6b-44b1-bc58-6a762ff3ba9a" name="Default Changelist" comment="" /> + <created>1564151489030</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1564151489030</updated> + <workItem from="1564151490369" duration="1208000" /> + </task> + <servers /> + </component> + <component name="TimeTrackingManager"> + <option name="totallyTimeSpent" value="1208000" /> + </component> + <component name="ToolWindowManager"> + <frame x="-7" y="-7" width="1550" height="838" extended-state="6" /> + <editor active="true" /> + <layout> + <window_info id="Favorites" side_tool="true" /> + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.118791945" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> + <window_info anchor="bottom" id="Database Changes" /> + <window_info anchor="bottom" id="Version Control" /> + <window_info anchor="bottom" id="Terminal" /> + <window_info anchor="bottom" id="Event Log" side_tool="true" /> + <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Find" order="1" /> + <window_info anchor="bottom" id="Run" order="2" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info anchor="bottom" id="TODO" order="6" /> + <window_info anchor="right" id="Database" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + </layout> + </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="version" value="1" /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/sufst-dash.ino"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="172"> + <caret line="271" column="22" selection-start-line="271" selection-start-column="22" selection-end-line="271" selection-end-column="22" /> + </state> + </provider> + </entry> + </component> +</project> \ No newline at end of file diff --git a/sufst-dash/checksum.h b/sufst-dash/checksum.h new file mode 100644 index 0000000000000000000000000000000000000000..ec2b71af7231117e6a09d864dbf8203f188ed324 --- /dev/null +++ b/sufst-dash/checksum.h @@ -0,0 +1,62 @@ +/* + * Library: libcrc + * File: include/checksum.h + * Author: Lammert Bies + * + * This file is licensed under the MIT License as stated below + * + * Copyright (c) 1999-2016 Lammert Bies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Description + * ----------- + * The headerfile include/checksum.h contains the definitions and prototypes + * for routines that can be used to calculate several kinds of checksums. + */ + +#ifndef DEF_LIBCRC_CHECKSUM_H +#define DEF_LIBCRC_CHECKSUM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "Arduino.h" + +/* + * #define CRC_START_xxxx + * + * The constants of the form CRC_START_xxxx define the values that are used for + * initialization of a CRC value for common used calculation methods. + */ + +#define CRC_START_8 0x00 + +/* + * Prototype list of global functions + */ + +uint8_t crc_8(const unsigned char *input_str, unsigned char num_bytes); + +#ifdef __cplusplus +} +#endif + +#endif // DEF_LIBCRC_CHECKSUM_H diff --git a/sufst-dash/crc8.c b/sufst-dash/crc8.c new file mode 100644 index 0000000000000000000000000000000000000000..6174e7093fb15e30fbc1d8d2049c975d99702384 --- /dev/null +++ b/sufst-dash/crc8.c @@ -0,0 +1,106 @@ +/* + * Library: libcrc + * File: src/crc8.c + * Author: Lammert Bies + * + * This file is licensed under the MIT License as stated below + * + * Copyright (c) 1999-2016 Lammert Bies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Description + * ----------- + * The source file src/crc8.c contains routines for the calculation of 8 bit + * CRC values according to the calculation rules used in the SHT1x and SHT7x + * series of temperature and humidity sensors. + */ + +#include "checksum.h" + +/* + * static uint8_t sht75_crc_table[]; + * + * The SHT75 humidity sensor is capable of calculating an 8 bit CRC checksum to + * ensure data integrity. The lookup table crc_table[] is used to recalculate + * the CRC. + */ + +static uint8_t sht75_crc_table[] = { + + 0, 49, 98, 83, 196, 245, 166, 151, 185, 136, 219, 234, 125, 76, 31, 46, + 67, 114, 33, 16, 135, 182, 229, 212, 250, 203, 152, 169, 62, 15, 92, 109, + 134, 183, 228, 213, 66, 115, 32, 17, 63, 14, 93, 108, 251, 202, 153, 168, + 197, 244, 167, 150, 1, 48, 99, 82, 124, 77, 30, 47, 184, 137, 218, 235, + 61, 12, 95, 110, 249, 200, 155, 170, 132, 181, 230, 215, 64, 113, 34, 19, + 126, 79, 28, 45, 186, 139, 216, 233, 199, 246, 165, 148, 3, 50, 97, 80, + 187, 138, 217, 232, 127, 78, 29, 44, 2, 51, 96, 81, 198, 247, 164, 149, + 248, 201, 154, 171, 60, 13, 94, 111, 65, 112, 35, 18, 133, 180, 231, 214, + 122, 75, 24, 41, 190, 143, 220, 237, 195, 242, 161, 144, 7, 54, 101, 84, + 57, 8, 91, 106, 253, 204, 159, 174, 128, 177, 226, 211, 68, 117, 38, 23, + 252, 205, 158, 175, 56, 9, 90, 107, 69, 116, 39, 22, 129, 176, 227, 210, + 191, 142, 221, 236, 123, 74, 25, 40, 6, 55, 100, 85, 194, 243, 160, 145, + 71, 118, 37, 20, 131, 178, 225, 208, 254, 207, 156, 173, 58, 11, 88, 105, + 4, 53, 102, 87, 192, 241, 162, 147, 189, 140, 223, 238, 121, 72, 27, 42, + 193, 240, 163, 146, 5, 52, 103, 86, 120, 73, 26, 43, 188, 141, 222, 239, + 130, 179, 224, 209, 70, 119, 36, 21, 59, 10, 89, 104, 255, 206, 157, 172 +}; + +/* + * uint8_t crc_8( const unsigned char *input_str, size_t num_bytes ); + * + * The function crc_8() calculates the 8 bit wide CRC of an input string of a + * given length. + */ + +uint8_t crc_8(const unsigned char *input_str, unsigned char num_bytes) +{ + + size_t a; + uint8_t crc; + const unsigned char *ptr; + + crc = CRC_START_8; + ptr = input_str; + + if (ptr != NULL) + for (a = 0; a < num_bytes; a++) { + + crc = sht75_crc_table[(*ptr) ^ crc]; + ptr++; + } + + return crc; + +} /* crc_8 */ + +/* + * uint8_t update_crc_8( unsigned char crc, unsigned char val ); + * + * Given a databyte and the previous value of the CRC value, the function + * update_crc_8() calculates and returns the new actual CRC value of the data + * comming in. + */ + +uint8_t update_crc_8(unsigned char crc, unsigned char val) +{ + + return sht75_crc_table[val ^ crc]; + +} /* update_crc_8 */ diff --git a/sufst-dash/sufst-dash.ino b/sufst-dash/sufst-dash.ino index a554bfe34abb3258caa370cca4b0342d49766342..9bb6b5635eaf1d2353e5618f324344bd657594a9 100644 --- a/sufst-dash/sufst-dash.ino +++ b/sufst-dash/sufst-dash.ino @@ -1,3 +1,5 @@ +#include "checksum.h" + #define DASH_RPM_LED_RED_1_PIN 2 #define DASH_RPM_LED_RED_2_PIN 4 #define DASH_RPM_LED_GREEN_1_PIN 6 @@ -28,263 +30,287 @@ #define DASH_RPM_THRESHOLD_SHIFT 13500 #define DASH_WATER_C_THRESHOLD 100 - + void dashRpmLedsBegin(); void dashRpmLedsProcess(); bool gShiftFlashState = true; -enum DashSerialState { - checkStart = 0, - checkRpm, - checkWaterTemp, - startError +enum DashSerialState +{ + checkStart = 0, + checkRpm, + checkWaterTemp, + checkCrc, + startError }; DashSerialState dashSerialState = checkStart; uint16_t gDashRpm = 0; + uint16_t gDashWaterTemp = 0; -void setup() { - // put your setup code here, to run once: +void setup() +{ + // put your setup code here, to run once: - Serial.begin(57600); + Serial.begin(57600); - dashRpmLedsBegin(); - dashWaterLedBegin(); + dashRpmLedsBegin(); + dashWaterLedBegin(); } -void loop() { - // put your main code here, to run repeatedly: +void loop() +{ + // put your main code here, to run repeatedly: - serialProcess(); - dashRpmLedsProcess(); - dashWaterLedProcess(); + serialProcess(); + dashRpmLedsProcess(); + dashWaterLedProcess(); } void dashWaterLedBegin() { - pinMode(DASH_WATER_LED_PIN, OUTPUT); + pinMode(DASH_WATER_LED_PIN, OUTPUT); - digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_NON_ACTIVE); + digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_NON_ACTIVE); } void dashRpmLedsBegin() { - pinMode(DASH_RPM_LED_RED_1_PIN, OUTPUT); - pinMode(DASH_RPM_LED_RED_2_PIN, OUTPUT); - pinMode(DASH_RPM_LED_GREEN_1_PIN, OUTPUT); - pinMode(DASH_RPM_LED_GREEN_2_PIN, OUTPUT); - pinMode(DASH_RPM_LED_GREEN_3_PIN, OUTPUT); - pinMode(DASH_RPM_LED_1_BLUE_PIN, OUTPUT); - pinMode(DASH_RPM_LED_2_BLUE_PIN, OUTPUT); - pinMode(DASH_RPM_LED_3_BLUE_PIN, OUTPUT); - pinMode(DASH_RPM_LED_4_BLUE_PIN, OUTPUT); - pinMode(DASH_RPM_LED_5_BLUE_PIN, OUTPUT); - - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + pinMode(DASH_RPM_LED_RED_1_PIN, OUTPUT); + pinMode(DASH_RPM_LED_RED_2_PIN, OUTPUT); + pinMode(DASH_RPM_LED_GREEN_1_PIN, OUTPUT); + pinMode(DASH_RPM_LED_GREEN_2_PIN, OUTPUT); + pinMode(DASH_RPM_LED_GREEN_3_PIN, OUTPUT); + pinMode(DASH_RPM_LED_1_BLUE_PIN, OUTPUT); + pinMode(DASH_RPM_LED_2_BLUE_PIN, OUTPUT); + pinMode(DASH_RPM_LED_3_BLUE_PIN, OUTPUT); + pinMode(DASH_RPM_LED_4_BLUE_PIN, OUTPUT); + pinMode(DASH_RPM_LED_5_BLUE_PIN, OUTPUT); + + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold0() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold1() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold2() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold3() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold4() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThreshold5() { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); } void dashRpmLedsThresholdShift() { - uint32_t currentMs = millis(); + uint32_t currentMs = millis(); - static uint32_t dashShiftLastFlashMs = 0; + static uint32_t dashShiftLastFlashMs = 0; - if ((currentMs - dashShiftLastFlashMs) >= DASH_RPM_SHIFT_FLASH_SWITCH_MS) { - gShiftFlashState = !gShiftFlashState; + if ((currentMs - dashShiftLastFlashMs) >= DASH_RPM_SHIFT_FLASH_SWITCH_MS) { + gShiftFlashState = !gShiftFlashState; - dashShiftLastFlashMs = millis(); - } + dashShiftLastFlashMs = millis(); + } - if (gShiftFlashState) { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_ACTIVE); - } - else { - digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); - } + if (gShiftFlashState) { + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_ACTIVE); + } + else { + digitalWrite(DASH_RPM_LED_RED_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_RED_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_1_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_2_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_GREEN_3_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_1_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_2_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_3_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_4_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + digitalWrite(DASH_RPM_LED_5_BLUE_PIN, DASH_RPM_LED_NON_ACTIVE); + } } -void dashRpmLedsProcess() +void dashRpmLedsProcess() { - if (gDashRpm < DASH_RPM_THRESHOLD_1) { - dashRpmLedsThreshold0(); - } - else if (gDashRpm < DASH_RPM_THRESHOLD_2) { - dashRpmLedsThreshold1(); - } - else if (gDashRpm < DASH_RPM_THRESHOLD_3) { - dashRpmLedsThreshold2(); - } - else if (gDashRpm < DASH_RPM_THRESHOLD_4) { - dashRpmLedsThreshold3(); - } - else if (gDashRpm < DASH_RPM_THRESHOLD_5) { - dashRpmLedsThreshold4(); - } - else if (gDashRpm < DASH_RPM_THRESHOLD_SHIFT) { - dashRpmLedsThreshold5(); - } - else { - dashRpmLedsThresholdShift(); - } + if (gDashRpm < DASH_RPM_THRESHOLD_1) { + dashRpmLedsThreshold0(); + } + else if (gDashRpm < DASH_RPM_THRESHOLD_2) { + dashRpmLedsThreshold1(); + } + else if (gDashRpm < DASH_RPM_THRESHOLD_3) { + dashRpmLedsThreshold2(); + } + else if (gDashRpm < DASH_RPM_THRESHOLD_4) { + dashRpmLedsThreshold3(); + } + else if (gDashRpm < DASH_RPM_THRESHOLD_5) { + dashRpmLedsThreshold4(); + } + else if (gDashRpm < DASH_RPM_THRESHOLD_SHIFT) { + dashRpmLedsThreshold5(); + } + else { + dashRpmLedsThresholdShift(); + } } void dashWaterLedProcess() { - if (gDashWaterTemp >= DASH_WATER_C_THRESHOLD) { - digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_ACTIVE); - } - else { - digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_NON_ACTIVE); - } + if (gDashWaterTemp >= DASH_WATER_C_THRESHOLD) { + digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_ACTIVE); + } + else { + digitalWrite(DASH_WATER_LED_PIN, DASH_WATER_LED_NON_ACTIVE); + } } void serialProcess() -{ - - while(Serial.available() > 0) { +{ + static union + { + struct + { + uint16_t waterTempC; + uint16_t rpm; + }; + uint8_t data[4]; + } receivedData; - switch (dashSerialState) { - case checkStart: case startError: - if (Serial.read() == DASH_SERIAL_START_BYTE) { - dashSerialState = checkWaterTemp; - } - else { - dashSerialState = startError; - } + while (Serial.available() > 0) { - break; + switch (dashSerialState) { + case checkStart: + case startError: + if (Serial.read() == DASH_SERIAL_START_BYTE) { + dashSerialState = checkWaterTemp; + } + else { + dashSerialState = startError; + } - case checkWaterTemp: + break; - Serial.readBytes((uint8_t *)(&gDashWaterTemp), 2); + case checkWaterTemp: - dashSerialState = checkRpm; + Serial.readBytes((uint8_t * )(&receivedData.waterTempC), 2); + dashSerialState = checkRpm; - break; + break; - case checkRpm: + case checkRpm: - Serial.readBytes((uint8_t *)(&gDashRpm), 2); - - dashSerialState = checkStart; + Serial.readBytes((uint8_t * )(&receivedData.rpm), 2); + dashSerialState = checkCrc; - break; + break; + + case checkCrc: + + if (Serial.read() == crc_8(receivedData.data, 4)) { + gDashWaterTemp = receivedData.waterTempC; + gDashRpm = receivedData.rpm; + } + + dashSerialState = checkStart; + + break; + } } - } }