refactoring
This commit is contained in:
59
Valve.cpp
Normal file
59
Valve.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#include "Valve.h"
|
||||
|
||||
#include "gpio_common.h"
|
||||
|
||||
using namespace std::chrono;
|
||||
|
||||
|
||||
Valve::Valve(uint gpio_motor1, uint gpio_motor2, uint gpio_start, uint gpio_end)
|
||||
: motor1(gpio_motor1)
|
||||
, motor2(gpio_motor2)
|
||||
, start_pin(gpio_start)
|
||||
, end_pin(gpio_end) {
|
||||
gpio_init_out(motor1);
|
||||
gpio_init_out(motor2);
|
||||
gpio_init_input(start_pin);
|
||||
gpio_init_input(end_pin);
|
||||
start_time = steady_clock::now();
|
||||
}
|
||||
|
||||
|
||||
void Valve::open() {
|
||||
if (state == State::Opening) {
|
||||
return;
|
||||
}
|
||||
gpio_put(motor2, 0);
|
||||
gpio_put(motor1, 1);
|
||||
state = State::Opening;
|
||||
start_time = steady_clock::now();
|
||||
}
|
||||
|
||||
|
||||
void Valve::close() {
|
||||
if (state == State::Closing) {
|
||||
return;
|
||||
}
|
||||
gpio_put(motor1, 0);
|
||||
gpio_put(motor2, 1);
|
||||
state = State::Closing;
|
||||
start_time = steady_clock::now();
|
||||
}
|
||||
|
||||
Valve::State Valve::process() {
|
||||
if ((state == State::Opening) && (gpio_get(start_pin) == 0)) {
|
||||
gpio_put(motor1, 0);
|
||||
state = State::Opened;
|
||||
}
|
||||
if ((state == State::Closing) && (gpio_get(end_pin) == 0)) {
|
||||
gpio_put(motor2, 0);
|
||||
state = State::Closed;
|
||||
}
|
||||
if (state == State::Opening || state == State::Closing) {
|
||||
if (duration_cast<seconds>(steady_clock::now() - start_time) > timeout) {
|
||||
gpio_put(motor1, 0);
|
||||
gpio_put(motor2, 0);
|
||||
state = State::Unknown;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
Reference in New Issue
Block a user