diff options
-rw-r--r-- | usb-i2c-sl018/limits.c | 18 | ||||
-rw-r--r-- | usb-i2c-sl018/statemachine.c | 17 | ||||
-rw-r--r-- | usb-i2c-sl018/tuer-rfid.c | 3 |
3 files changed, 23 insertions, 15 deletions
diff --git a/usb-i2c-sl018/limits.c b/usb-i2c-sl018/limits.c index 471f894..8b75024 100644 --- a/usb-i2c-sl018/limits.c +++ b/usb-i2c-sl018/limits.c @@ -32,17 +32,21 @@ void init_limits(void) { - LIMITS_DDR = LIMITS_PORT & ~(1<<LIMITS_OPEN | 1<<LIMITS_CLOSE); + LIMITS_DDR = LIMITS_DDR & ~(1<<LIMITS_OPEN | 1<<LIMITS_CLOSE); LIMITS_PORT |= (1<<LIMITS_OPEN | 1<<LIMITS_CLOSE); } limits_t limits_get(void) { - limits_t state = moving; - - uint8_t tmp = LIMITS_PORT & (1<<LIMITS_OPEN | 1<<LIMITS_CLOSE); - + uint8_t tmp = LIMITS_PIN & (1<<LIMITS_OPEN | 1<<LIMITS_CLOSE); + if(!(tmp & 1<<LIMITS_OPEN)) { + if(tmp & 1<<LIMITS_CLOSE) + return open; + else + return both; + } + else if(!(tmp & 1<<LIMITS_CLOSE)) + return close; - return state; + return moving; } - diff --git a/usb-i2c-sl018/statemachine.c b/usb-i2c-sl018/statemachine.c index 659749d..c2f75ca 100644 --- a/usb-i2c-sl018/statemachine.c +++ b/usb-i2c-sl018/statemachine.c @@ -26,6 +26,7 @@ #include "stepper.h" #include "eventqueue.h" #include "limits.h" +#include "ledmatrix.h" #include <stdio.h> typedef enum state_enum {reset, closed, closing, opened, opening, timeout_after_open, timeout_after_close, error, manual_movement} state_t; @@ -39,14 +40,14 @@ void change_state(state_t new_state) switch(new_state) { case reset: break; - case closed: - case closing: - case opened: - case opening: - case timeout_after_open: - case timeout_after_close: - case error: - case manual_movement: + case closed: ledmatrix(red); break; + case closing: ledmatrix(red_moving); break; + case opened: ledmatrix(green); break; + case opening: ledmatrix(green_moving); break; + case timeout_after_open: ledmatrix(green_blink); break; + case timeout_after_close: ledmatrix(red_blink); break; + case error: ledmatrix(rg_blink); break; + case manual_movement: ledmatrix(rg_moving); break; break; } state = new_state; diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c index f08549e..5b56650 100644 --- a/usb-i2c-sl018/tuer-rfid.c +++ b/usb-i2c-sl018/tuer-rfid.c @@ -43,6 +43,8 @@ #include "statemachine.h" #include "eventqueue.h" +#include "limits.h" + void handle_stdio(uint8_t cmd) { switch(cmd) { @@ -119,6 +121,7 @@ int main(void) init_stepper(); init_ledmatrix(); init_eventqueue(); + init_limits(); sei(); sl018_reset(); |