From c50c3354fbf985c9d511e8ec6eba6d5816d38794 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Mon, 22 Jul 2019 15:21:56 +0300 Subject: [PATCH] cleanup power handling code --- Firmware/EggbotWireless/include/Executor.h | 2 +- Firmware/EggbotWireless/include/Globals.h | 5 ----- Firmware/EggbotWireless/include/Power.h | 8 ++++++++ Firmware/EggbotWireless/src/Executor.cpp | 2 ++ Firmware/EggbotWireless/src/Globals.cpp | 1 + Firmware/EggbotWireless/src/Power.cpp | 16 ++++++++++++++++ Firmware/EggbotWireless/src/main.cpp | 8 ++------ 7 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 Firmware/EggbotWireless/src/Globals.cpp diff --git a/Firmware/EggbotWireless/include/Executor.h b/Firmware/EggbotWireless/include/Executor.h index 4239926..235a059 100644 --- a/Firmware/EggbotWireless/include/Executor.h +++ b/Firmware/EggbotWireless/include/Executor.h @@ -17,6 +17,6 @@ public: I2CStatusMsg status(); }; - +extern Executor executor; #endif \ No newline at end of file diff --git a/Firmware/EggbotWireless/include/Globals.h b/Firmware/EggbotWireless/include/Globals.h index 0e9658a..4d5db96 100644 --- a/Firmware/EggbotWireless/include/Globals.h +++ b/Firmware/EggbotWireless/include/Globals.h @@ -2,10 +2,5 @@ #define GLOBALS_H #include -#include "Power.h" -#include "Executor.h" - -Power power; -Executor executor; #endif // GLOBALS_H \ No newline at end of file diff --git a/Firmware/EggbotWireless/include/Power.h b/Firmware/EggbotWireless/include/Power.h index 2d6a85e..47ad47e 100644 --- a/Firmware/EggbotWireless/include/Power.h +++ b/Firmware/EggbotWireless/include/Power.h @@ -2,18 +2,26 @@ #define POWER_H #include +#include +#include #include "Config.h" class Power { private: bool enabled12v = false; + unsigned long lastCmdTime = 0; + void tickerRoutine(); + Ticker ticker; public: Power(); void disable12v(); void enable12v(); bool isEnabled12v(); + void commandHook(); }; +extern Power power; + #endif // POWER_H \ No newline at end of file diff --git a/Firmware/EggbotWireless/src/Executor.cpp b/Firmware/EggbotWireless/src/Executor.cpp index 788f296..636080c 100644 --- a/Firmware/EggbotWireless/src/Executor.cpp +++ b/Firmware/EggbotWireless/src/Executor.cpp @@ -1,5 +1,7 @@ #include "Executor.h" +Executor executor; + Executor::Executor() {} void Executor::execCommand(Command command) { diff --git a/Firmware/EggbotWireless/src/Globals.cpp b/Firmware/EggbotWireless/src/Globals.cpp new file mode 100644 index 0000000..3fb64a5 --- /dev/null +++ b/Firmware/EggbotWireless/src/Globals.cpp @@ -0,0 +1 @@ +#include "Globals.h" diff --git a/Firmware/EggbotWireless/src/Power.cpp b/Firmware/EggbotWireless/src/Power.cpp index bb9e8f0..cfbd1f9 100644 --- a/Firmware/EggbotWireless/src/Power.cpp +++ b/Firmware/EggbotWireless/src/Power.cpp @@ -1,8 +1,20 @@ #include "Power.h" +#include "Globals.h" + +Power power; + +constexpr unsigned long commandTimeout = 20000; Power::Power() { pinMode(pin12v, OUTPUT); disable12v(); + ticker.attach(0.1, std::bind(&Power::tickerRoutine, this)); +} + +void Power::tickerRoutine() { + if (millis() - lastCmdTime > commandTimeout) { + disable12v(); + } } void Power::disable12v() { @@ -17,4 +29,8 @@ void Power::enable12v() { bool Power::isEnabled12v() { return enabled12v; +} + +void Power::commandHook() { + lastCmdTime = millis(); } \ No newline at end of file diff --git a/Firmware/EggbotWireless/src/main.cpp b/Firmware/EggbotWireless/src/main.cpp index 462408e..fe48f1a 100644 --- a/Firmware/EggbotWireless/src/main.cpp +++ b/Firmware/EggbotWireless/src/main.cpp @@ -4,6 +4,7 @@ #include #include "GCodeParser.h" #include "Globals.h" +#include "Executor.h" #include "Power.h" #include "common/Commands.h" @@ -15,13 +16,8 @@ void setup() { power.enable12v(); } -unsigned long commandTime = 0; -constexpr unsigned long commandTimeout = 20000; void loop() { - if (millis() - commandTime > commandTimeout) { - power.disable12v(); - } while (Serial.available() > 0) { char inChar = Serial.read(); inString += inChar; @@ -32,8 +28,8 @@ void loop() { power.enable12v(); delay(100); } + power.commandHook(); executor.execCommand(parseGCode(inString)); - commandTime = millis(); I2CStatusMsg response; do { response = executor.status();