diff --git a/.travis.yml b/.travis.yml index ec78eb2..d2ab01f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,6 @@ env: - BUILD_CONFIG=feedc0de_usb - BUILD_CONFIG=greyhash_usb - BUILD_CONFIG=aveexy_usb - - BUILD_CONFIG=testbench_usb - BUILD_CONFIG=mickdermack_usb - BUILD_CONFIG=peter_usb diff --git a/README.md b/README.md index ee725b7..fc12886 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,11 @@ platformio run --environment bobbycar_usb --target upload ![Wiring diagram](/img/wiring.png) -### -DFEATURE_3WIRESW -![3 wire switches](/img/3wiresw.png) - ### -DFEATURE_DPAD ![dpad switches with 5 wires](/img/dpadsw.png) +### -DFEATURE_DPAD_3WIRESW +![3 wire switches](/img/3wiresw.png) + ### -DFEATURE_ROTARY ![rotary encoder](/img/rotary.png) diff --git a/platformio.ini b/platformio.ini index bffa15b..eaa2082 100644 --- a/platformio.ini +++ b/platformio.ini @@ -51,8 +51,6 @@ build_flags = -DTFT_DC=12 -DTFT_RST=2 -DSPI_FREQUENCY=27000000 - -DSPI_READ_FREQUENCY=20000000 - -DSPI_TOUCH_FREQUENCY=2500000 -DDEFAULT_SWAPSCREENBYTES=false -DPINS_RX1=4 -DPINS_TX1=5 @@ -84,10 +82,10 @@ build_flags = ${default_limits.build_flags} -DDEVICE_PREFIX=bobbyquad -DFEATURE_WEBSERVER - -DFEATURE_3WIRESW - -DPINS_3WIRESW_OUT=0 - -DPINS_3WIRESW_IN1=16 - -DPINS_3WIRESW_IN2=27 + -DFEATURE_DPAD_3WIRESW + -DPINS_DPAD_3WIRESW_OUT=0 + -DPINS_DPAD_3WIRESW_IN1=16 + -DPINS_DPAD_3WIRESW_IN2=27 ; -DFEATURE_ROTARY ; -DPINS_ROTARY_CLK=16 ; -DPINS_ROTARY_DT=27 @@ -194,19 +192,11 @@ build_flags = ${default_limits.build_flags} -DDEVICE_PREFIX=bobbyquad -DFEATURE_WEBSERVER -; -DFEATURE_3WIRESW -; -DPINS_3WIRESW_OUT=0 -; -DPINS_3WIRESW_IN1=16 -; -DPINS_3WIRESW_IN2=27 -DFEATURE_DPAD -DPINS_DPAD_UP=32 -DPINS_DPAD_DOWN=22 -DPINS_DPAD_CONFIRM=23 -DPINS_DPAD_BACK=27 -; -DFEATURE_ROTARY -; -DPINS_ROTARY_CLK=16 -; -DPINS_ROTARY_DT=27 -; -DPINS_ROTARY_SW=0 -DDEFAULT_GASMIN=800 -DDEFAULT_GASMAX=3700 -DDEFAULT_BREMSMIN=1300 @@ -214,54 +204,6 @@ build_flags = -[env:testbench_usb] -platform = ${common_env_data.platform} -board = ${common_env_data.board} -framework = ${common_env_data.framework} -board_build.partitions = bobbycar_noota.csv -lib_deps = ${common_env_data.lib_deps} -lib_compat_mode = ${common_env_data.lib_compat_mode} -build_unflags = ${common_env_data.build_unflags} - -upload_port = /dev/ttyUSB* -upload_speed = 921600 - -build_flags = - ${common_env_data.build_flags} - -DDEVICE_PREFIX=testbench - -DFEATURE_WEBSERVER - -DILI9341_DRIVER=1 - -DTFT_MOSI=22 - -DTFT_SCLK=21 - -DTFT_CS=27 - -DTFT_DC=32 - -DTFT_RST=25 - -DSPI_FREQUENCY=27000000 - -DSPI_READ_FREQUENCY=20000000 - -DSPI_TOUCH_FREQUENCY=2500000 - -DDEFAULT_SWAPSCREENBYTES=false - -DPINS_RX1=18 - -DPINS_TX1=19 - -DPINS_RX2=23 - -DPINS_TX2=34 - -DPINS_GAS=35 - -DPINS_BREMS=33 -; -DFEATURE_3WIRESW -; -DPINS_3WIRESW_OUT=17 -; -DPINS_3WIRESW_IN1=4 -; -DPINS_3WIRESW_IN2=16 -; -DFEATURE_ROTARY -; -DPINS_ROTARY_CLK=4 -; -DPINS_ROTARY_DT=16 -; -DPINS_ROTARY_SW=17 - ${default_limits.build_flags} - -DDEFAULT_GASMIN=0 - -DDEFAULT_GASMAX=4095 - -DDEFAULT_BREMSMIN=0 - -DDEFAULT_BREMSMAX=4095 - - - [env:mickdermack_usb] platform = ${common_env_data.platform} board = ${common_env_data.board} @@ -279,7 +221,6 @@ build_flags = -DDEVICE_PREFIX=bobbyquad -DFEATURE_WEBSERVER ${default_limits.build_flags} - -DUSER_SETUP_LOADED=1 -DRPI_DISPLAY_TYPE -DILI9486_DRIVER ; TODO: TFT_MISO (touch MISO?) @@ -301,14 +242,6 @@ build_flags = -DPINS_TX2=34 -DPINS_GAS=35 -DPINS_BREMS=33 -; -DFEATURE_3WIRESW -; -DPINS_3WIRESW_OUT=17 -; -DPINS_3WIRESW_IN1=4 -; -DPINS_3WIRESW_IN2=16 -; -DFEATURE_ROTARY -; -DPINS_ROTARY_CLK=4 -; -DPINS_ROTARY_DT=16 -; -DPINS_ROTARY_SW=17 -DDEFAULT_GASMIN=0 -DDEFAULT_GASMAX=4095 -DDEFAULT_BREMSMIN=0 diff --git a/src/dpad.h b/src/dpad.h index 29b4c37..85d98c7 100644 --- a/src/dpad.h +++ b/src/dpad.h @@ -7,19 +7,21 @@ #include "globals.h" namespace { -using DPadState = std::tuple; +namespace dpad +{ +using State = std::tuple; template -class DPadHelper +class Helper { public: void begin(); - DPadState read(); + State read(); }; template -void DPadHelper::begin() +void Helper::begin() { pinMode(IN1, INPUT_PULLUP); pinMode(IN2, INPUT_PULLUP); @@ -28,7 +30,7 @@ void DPadHelper::begin() } template -DPadState DPadHelper::read() +State Helper::read() { const bool result0 = digitalRead(IN1); const bool result1 = digitalRead(IN2); @@ -39,44 +41,48 @@ DPadState DPadHelper::read() } #ifdef FEATURE_DPAD -DPadHelper dpad; +Helper helper; +State lastState; -DPadState dpadLastState; -void updateDpad() +void init() { - const auto state = dpad.read(); + helper.begin(); +} + +void update() +{ + const auto state = helper.read(); enum { - ButtonUp = 0 + ButtonUp = 0, ButtonDown = 1, ButtonConfirm = 2, - ButtonBack = 3, + ButtonBack = 3 }; - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { if (std::get(state)) InputDispatcher::rotate(-1); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { if (std::get(state)) InputDispatcher::rotate(1); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { InputDispatcher::confirmButton(std::get(state)); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { InputDispatcher::backButton(std::get(state)); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - - dpadLastState = state; } #endif } +} diff --git a/src/dpadHack.h b/src/dpad3wire.h similarity index 57% rename from src/dpadHack.h rename to src/dpad3wire.h index ff71a31..be434a2 100644 --- a/src/dpadHack.h +++ b/src/dpad3wire.h @@ -1,7 +1,5 @@ #pragma once -#include - #include #include "globals.h" @@ -9,9 +7,10 @@ #include "dpad.h" namespace { - +namespace dpad3wire +{ template -class DPadHackHelper +class Helper { public: static constexpr auto OutPin = OUT; @@ -20,17 +19,17 @@ public: void begin(); - DPadState read(); + dpad::State read(); }; template -void DPadHackHelper::begin() +void Helper::begin() { pinMode(OUT, OUTPUT); } template -DPadState DPadHackHelper::read() +dpad::State Helper::read() { digitalWrite(OUT, LOW); @@ -55,13 +54,19 @@ DPadState DPadHackHelper::read() return std::make_tuple(result0, result1, result2, result3); } -#ifdef FEATURE_3WIRESW -DPadHackHelper dpadHack; +#ifdef FEATURE_DPAD_3WIRESW +Helper helper; +dpad::State lastState; -DPadState dpadHackLastState; -void updateDpadHack() +void init() { - const auto state = dpadHack.read(); + helper.begin(); +} + +void update() +{ + const auto state = helper.read(); + const auto now = millis(); enum { ButtonUp = 3, @@ -70,30 +75,31 @@ void updateDpadHack() ButtonBack = 2 }; - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { if (std::get(state)) InputDispatcher::rotate(-1); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { if (std::get(state)) InputDispatcher::rotate(1); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { InputDispatcher::confirmButton(std::get(state)); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - if (std::get(dpadHackLastState) != std::get(state)) + if (std::get(lastState) != std::get(state)) { InputDispatcher::backButton(std::get(state)); - std::get(dpadHackLastState) = std::get(state); + std::get(lastState) = std::get(state); } - dpadHackLastState = state; + lastState = state; } #endif } +} diff --git a/src/main.cpp b/src/main.cpp index 4e865e4..3d2305d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,7 +12,7 @@ #include "modes/tempomatmode.h" #include "screens.h" #include "dpad.h" -#include "dpadHack.h" +#include "dpad3wire.h" #include "rotary.h" #include "serialhandler.h" #include "ota.h" @@ -46,11 +46,11 @@ void setup() initScreen(); #ifdef FEATURE_DPAD - dpad.begin(); + dpad::init(); #endif -#ifdef FEATURE_3WIRESW - dpadHack.begin(); +#ifdef FEATURE_DPAD_3WIRESW + dpad3wire::init(); #endif #ifdef FEATURE_ROTARY @@ -139,11 +139,11 @@ void loop() const auto now = millis(); #ifdef FEATURE_DPAD - updateDpad(); + dpad::update(); #endif -#ifdef FEATURE_3WIRESW - updateDpadHack(); +#ifdef FEATURE_DPAD_3WIRESW + dpad3wire::update(); #endif if (!lastModeUpdate)