From: Lukáš Jiřiště Date: Tue, 19 Nov 2024 14:29:30 +0000 (+0100) Subject: Add helpers.ino, fix Servomatic.h and fix a typo X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=dadf1cae98b26612561b58553a063864042bf1ea;p=Servomatic.git Add helpers.ino, fix Servomatic.h and fix a typo --- 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(); +} +