aboutsummaryrefslogtreecommitdiff
path: root/Arduino/ems/Pump.h
diff options
context:
space:
mode:
authorDonald Delmar Davis <don@suspectdevices.com>2017-10-20 10:46:30 -0700
committerDonald Delmar Davis <don@suspectdevices.com>2017-10-20 10:46:30 -0700
commit261ac02efc8361ac1e55d9be72cfab1c8ea55237 (patch)
tree4fbe0b23659cbd7c5f50c9e10f65d0441e6fee7c /Arduino/ems/Pump.h
Let's do this
Diffstat (limited to 'Arduino/ems/Pump.h')
-rwxr-xr-xArduino/ems/Pump.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/Arduino/ems/Pump.h b/Arduino/ems/Pump.h
new file mode 100755
index 0000000..c8293dd
--- /dev/null
+++ b/Arduino/ems/Pump.h
@@ -0,0 +1,200 @@
+/*************************************
+ * Pump.h - Manage the hydraulic pump.
+ */
+#ifndef PUMP_H
+#define PUMP_H
+
+#include "Common.h"
+#include "TaskScheduler.h"
+#include "Monitor.h"
+#include "Machine.h"
+#include "Clock.h"
+
+// move to common
+#define PUMP_ON HIGH
+#define PUMP_OFF LOW
+#define MAX_PUMP_RUN_SECONDS 5
+#define GOING_UP LOW
+#define GOING_DOWN HIGH
+#define SOLENOID_OFF LOW
+
+static void runThePump();
+static void readPumpPressure();
+
+static void PMS (uint8_t kwIndex, uint8_t verb,char *args);
+static void MUP (uint8_t kwIndex, uint8_t verb,char *args);
+static void MDN (uint8_t kwIndex, uint8_t verb,char *args);
+
+static void PS1 (uint8_t kwIndex, uint8_t verb,char *args);
+static void SOL (uint8_t kwIndex, uint8_t verb,char *args);
+
+class Pump {
+private:
+ Task checkPressure;
+ Task runPump;
+ bool wereWeGoingDown;
+ bool wasTheMotorOn;
+ long int startedAt;
+ bool motorOn;
+ bool goingDown;
+public:
+ int pressure;
+ bool pressureChanged;
+
+ void motor(bool state) {
+
+ motorOn=state;
+
+ if((motorOn==PUMP_ON) && (wasTheMotorOn==PUMP_OFF))
+ {
+ startedAt=clock.second();
+
+ }
+ digitalWrite(PUMP_PIN, motorOn?PUMP_ON:PUMP_OFF);
+ if (motorOn != wasTheMotorOn) {
+ monitor.update("PMS", "%d", motorOn);
+ }
+ wasTheMotorOn=motorOn;
+ }
+
+ bool isMotorOn() {return motorOn;}
+
+ bool areWeGoingDown() {return goingDown;}
+
+
+ void solenoid(bool state) {
+ goingDown=state;
+ digitalWrite(SOLENOID_PIN, goingDown?GOING_DOWN:GOING_UP);
+ if (goingDown != wereWeGoingDown) {
+ monitor.update("SOL", "%d", goingDown);
+ }
+ goingDown = wereWeGoingDown;
+
+
+ }
+
+ void init() {
+
+
+ pinMode(PUMP_PIN, OUTPUT);
+ digitalWrite(PUMP_PIN, PUMP_OFF);
+ pinMode(SOLENOID_PIN, OUTPUT);
+ digitalWrite(SOLENOID_PIN, GOING_UP);
+ StopPump();
+ // register monitor commands
+ monitor.registerAction(_PMS_, &PMS);
+ monitor.registerAction(_PS1_, &PS1);
+ monitor.registerAction(_SOL_, &SOL);
+ monitor.registerAction(_MUP_, &MUP);
+ monitor.registerAction(_MDN_, &MDN);
+
+ checkPressure.set(100L, TASK_FOREVER, &readPumpPressure);
+ machine.todolist.addTask(checkPressure);
+ checkPressure.enable();
+
+ runPump.set(100L, TASK_FOREVER, &runThePump);
+ machine.todolist.addTask(runPump);
+ runPump.enable();
+
+ }
+
+ void Press() {
+ solenoid(GOING_UP);
+ motor(PUMP_ON);
+ CheckPump(); // ??
+ }
+
+ void Release() {
+ solenoid(GOING_DOWN);
+ motor(PUMP_ON);
+ CheckPump();
+
+ }
+
+ void CheckPump() {
+ if((motorOn) && ((clock.second()-startedAt) > MAX_PUMP_RUN_SECONDS)){
+ monitor.debug("Motor run timed out");
+ motor(PUMP_OFF);
+ }
+
+ // check here for the home switch.
+
+ }
+
+ void StopPump() {
+ motor(PUMP_OFF);
+ solenoid(SOLENOID_OFF);
+ }
+
+// 'accessors'
+ bool updatePressure() {
+ int tol = 50; // number foo bad move to macro
+
+ int thisReading = analogRead(PS1_APIN);
+ if (thisReading < 224) {
+ pressure=0;
+ } else {
+ pressure=(thisReading-200)*10;
+ }
+ pressureChanged = abs(pressure - pressure) >= tol;
+ if (pressureChanged)
+ pressure = pressure;
+ return pressureChanged;
+ }
+
+ void setPressureChanged(bool v) {
+ pressureChanged = v;
+ }
+};
+
+
+Pump pump;
+
+static void runThePump() {
+ pump.CheckPump();
+}
+
+static void readPumpPressure() {
+ if (pump.updatePressure()) {
+ monitor.update("PS1", "%d", pump.pressure);
+ pump.setPressureChanged(false);
+ }
+}
+
+// should also take on as a value
+
+static void PMS (uint8_t kwIndex, uint8_t verb,char *args) {
+ if (verb == '!') {
+ pump.motor((bool) atoi(args));
+ } else {
+ monitor.update("PMS", "%d", pump.isMotorOn());
+ }
+}
+
+// should also take on as a value
+static void SOL (uint8_t kwIndex, uint8_t verb,char *args) {
+ if (verb == '!') {
+ pump.solenoid((bool)atoi(args));
+ } else {
+ monitor.update("SOL", "%d", pump.areWeGoingDown());
+ }
+}
+
+static void MUP (uint8_t kwIndex, uint8_t verb,char *args) {
+ monitor.update("ACK","Going up");
+ pump.Press();
+}
+
+static void MDN (uint8_t kwIndex, uint8_t verb,char *args) {
+ monitor.update("ACK", "Going down");
+ pump.Release();
+}
+
+
+static void PS1 (uint8_t kwIndex, uint8_t verb,char *args) {
+ monitor.update("PS1", "%d", pump.pressure);
+}
+
+
+#endif // PUMP_H
+