summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usb-i2c-sl018/limits.c18
-rw-r--r--usb-i2c-sl018/statemachine.c17
-rw-r--r--usb-i2c-sl018/tuer-rfid.c3
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();