#define CMD_OPEN 'o'
#define CMD_CLOSE 'c'
+#define CMD_TOGGLE 't'
#define CMD_STATUS 's'
#define CMD_RESET 'r'
stop_timer();
reset_stepper();
current_state = IDLE;
+ Serial.print("Status: ");
+ if(is_opened())
+ Serial.print("opened");
+ else if(is_closed())
+ Serial.print("closed");
+ Serial.println(", idle");
return;
}
else if(current_state == ERROR) {
void start_open()
{
- if(is_opened()) {
- Serial.println("Already open");
- return;
- }
-
reset_stepper();
reset_leds();
leds_green();
current_state = OPENING;
start_step_timer();
- Serial.println("Ok");
}
void start_close()
{
- if(is_closed()) {
- Serial.println("Already closed");
- return;
- }
-
reset_stepper();
reset_leds();
leds_red();
current_state = CLOSING;
start_step_timer();
- Serial.println("Ok");
}
void print_status()
char command = Serial.read();
if(current_state == ERROR && command != CMD_RESET) {
- Serial.println("Error: last open/close operation took to long!");
+ Serial.println("Error: last open/close operation took too long!");
}
else if (command == CMD_RESET) {
reset_after_error();
}
else if (command == CMD_OPEN) {
- if(current_state == IDLE)
- start_open();
+ if(current_state == IDLE) {
+ if(is_opened())
+ Serial.println("Already open");
+ else {
+ start_open();
+ Serial.println("Ok");
+ }
+ }
else
Serial.println("Error: Operation in progress");
}
else if (command == CMD_CLOSE) {
- if(current_state == IDLE)
- start_close();
+ if(current_state == IDLE) {
+ if(is_closed())
+ Serial.println("Already closed");
+ else {
+ start_close();
+ Serial.println("Ok");
+ }
+ }
+ else
+ Serial.println("Error: Operation in progress");
+ }
+ else if (command == CMD_TOGGLE) {
+ if(current_state == IDLE) {
+ if(is_closed())
+ start_open();
+ else
+ start_close();
+ Serial.println("Ok");
+ }
else
Serial.println("Error: Operation in progress");
}
else
Serial.println("Error: unknown command");
}
- if(manual_open() && !is_opened() && current_state == IDLE) {
+ if(manual_open() && !is_opened() && (current_state == IDLE || current_state == ERROR)) {
Serial.println("open forced manually");
start_open();
}
- if(manual_close() && !is_closed() && current_state == IDLE) {
+ if(manual_close() && !is_closed() && (current_state == IDLE || current_state == ERROR)) {
Serial.println("close forced manually");
start_close();
}