From dadf1cae98b26612561b58553a063864042bf1ea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Tue, 19 Nov 2024 15:29:30 +0100 Subject: [PATCH] Add helpers.ino, fix Servomatic.h and fix a typo --- Makefile | 1 + Measurement.ino | 2 +- Servomatic.h | 6 +++++- Servomatic.ino | 42 +----------------------------------------- helpers.ino | 43 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 43 deletions(-) create mode 100644 helpers.ino diff --git a/Makefile b/Makefile index 97a5eea..cdf5fb4 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,7 @@ SRCS := Servomatic.ino \ Valve.ino \ CellValve.ino \ Measurement.ino \ + helpers.ino \ NAME := Servomatic diff --git a/Measurement.ino b/Measurement.ino index 3107f4b..01259d2 100644 --- a/Measurement.ino +++ b/Measurement.ino @@ -77,7 +77,7 @@ int Measurement::wait_for_equilibrium(float threshold = 0.01) while (m_size < 20 || threshold < calc_equilibrium_dist()) { get_measurement(); - if (interuptable_delay(m_interval_ms)) + if (interruptable_delay(m_interval_ms)) return (1); } return (0); diff --git a/Servomatic.h b/Servomatic.h index 763cd4c..c371f80 100644 --- a/Servomatic.h +++ b/Servomatic.h @@ -1,6 +1,10 @@ #ifndef SERVOMATIC_H # define SERVOMATIC_H -int interuptable_delay(unsigned long ms); +extern volatile int interrupt_happened; + +int interruptable_delay(unsigned long ms); +void signal_going_to_sleep(); +void sleep(); #endif // SERVOMATIC_H diff --git a/Servomatic.ino b/Servomatic.ino index a1d97da..688b007 100644 --- a/Servomatic.ino +++ b/Servomatic.ino @@ -1,3 +1,4 @@ +#include "Servomatic.h" #include "PressureSensor.h" #include "Valve.h" #include "CellValve.h" @@ -15,47 +16,6 @@ static const int CELL_VALVE_PIN = 10; static const int PRESSURE_SENSOR_VALVE_PIN = 11; static const int VACUUM_VALVE_PIN = 12; -static volatile int interrupt_happened{0}; - -void interrupt_routine() -{ - interrupt_happened = 1; -} - -int interruptable_delay(unsigned long ms) -{ - const unsigned int start_time{millis()}; - - while (ms > millis() - start_time) - if (interrupt_happened == 1) - return (1); - return (0); -} - -void signal_going_to_sleep() -{ - delay(300); - digitalWrite(SWITCH_PIN, HIGH); - pinMode(SWITCH_PIN, OUTPUT); - delay(100); - pinMode(SWITCH_PIN, INPUT); -} - -void sleep() -{ - noInterrupts(); - if (digitalRead(SWITCH_PIN) == LOW) - { - set_sleep_mode(SLEEP_MODE_PWR_DOWN); - sleep_enable(); - interrupts(); - sleep_cpu(); - sleep_disable(); - } - else - interrupts(); -} - void main_loop() { PressureSensor sensor_1{PRESSURE_SENSOR1_PIN, 10}; diff --git a/helpers.ino b/helpers.ino new file mode 100644 index 0000000..30c1ec8 --- /dev/null +++ b/helpers.ino @@ -0,0 +1,43 @@ +#include "Servomatic.h" + +volatile int interrupt_happened{0}; + +static void interrupt_routine() +{ + interrupt_happened = 1; +} + +int interruptable_delay(unsigned long ms) +{ + const unsigned int start_time{millis()}; + + while (ms > millis() - start_time) + if (interrupt_happened == 1) + return (1); + return (0); +} + +void signal_going_to_sleep() +{ + delay(300); + digitalWrite(SWITCH_PIN, HIGH); + pinMode(SWITCH_PIN, OUTPUT); + delay(100); + pinMode(SWITCH_PIN, INPUT); +} + +void sleep() +{ + noInterrupts(); + if (digitalRead(SWITCH_PIN) == LOW) + { + set_sleep_mode(SLEEP_MODE_PWR_DOWN); + sleep_enable(); + interrupts(); + sleep_cpu(); + sleep_disable(); + } + else + interrupts(); +} + -- 2.30.2