summaryrefslogtreecommitdiff
path: root/c/elevator/elevator.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/elevator/elevator.c')
-rw-r--r--c/elevator/elevator.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/c/elevator/elevator.c b/c/elevator/elevator.c
index 15737fc..c73f170 100644
--- a/c/elevator/elevator.c
+++ b/c/elevator/elevator.c
@@ -19,7 +19,12 @@ int direction = DIRECTION_UP;
int timer;
char channelbuf[16];
-char msgbuf[64];
+char msgbuf[8];
+
+char uplanternon[] = "55ff55";
+char uplanternoff[] = "003300";
+char downlanternon[] = "ff5555";
+char downlanternoff[] = "330000";
bool streq(char *a, char *b) {
for (int i=0;a[i] != 0 || b[i] != 0;i++) {
@@ -46,13 +51,13 @@ void sendSensorGetMessages(void) {
void processDigilinesMessages(void) {
while (digiline_bufferlevel() > 0) {
- digiline_receive(channelbuf,16,msgbuf,64);
+ digiline_receive(channelbuf,16,msgbuf,8);
if (streq(channelbuf,"sensor1")) {
- sensor1state = (streq(msgbuf,"mesecons_movestones:movestone_vertical"));
+ sensor1state = (streq(msgbuf,"mesecon"));
} else if (streq(channelbuf,"sensor2")) {
- sensor2state = (streq(msgbuf,"mesecons_movestones:movestone_vertical"));
+ sensor2state = (streq(msgbuf,"mesecon"));
} else if (streq(channelbuf,"sensor3")) {
- sensor3state = (streq(msgbuf,"mesecons_movestones:movestone_vertical"));
+ sensor3state = (streq(msgbuf,"mesecon"));
} else if (streq(channelbuf,"button1") && (state != STATE_TIMING_1) && (state != STATE_IDLE_1)) {
call1state = true;
digiline_send("button1","light_on");
@@ -82,6 +87,10 @@ void main(void) {
digiline_send("button1","light_off");
digiline_send("button2","light_off");
digiline_send("button3","light_off");
+ digiline_send("lantern1up",uplanternoff);
+ digiline_send("lantern2up",uplanternoff);
+ digiline_send("lantern2down",downlanternoff);
+ digiline_send("lantern3down",downlanternoff);
printstr("\nBottom Floor Demand");
state = STATE_BOTTOM_FLOOR_DEMAND;
break;
@@ -92,6 +101,8 @@ void main(void) {
digiline_send("door1","retract_sticky");
state = STATE_TIMING_1;
timer = 5;
+ digiline_send("lantern1up",uplanternon);
+ digiline_send("chime1","celevator_chime_up");
}
break;
case STATE_TIMING_1:
@@ -123,6 +134,7 @@ void main(void) {
digiline_send("door1","extend");
digiline_send("sel","retract_sticky");
digiline_send("up","extend");
+ digiline_send("lantern1up",uplanternoff);
} else if (call3state) {
direction = DIRECTION_UP;
printstr("\nMoving to 3");
@@ -130,6 +142,7 @@ void main(void) {
digiline_send("door1","extend");
digiline_send("sel","extend");
digiline_send("up","extend");
+ digiline_send("lantern1up",uplanternoff);
}
break;
case STATE_IDLE_2:
@@ -141,6 +154,8 @@ void main(void) {
digiline_send("door2","extend");
digiline_send("sel","extend");
digiline_send("up","extend");
+ digiline_send("lantern2up",uplanternoff);
+ digiline_send("lantern2down",downlanternoff);
} else if (call1state) {
direction = DIRECTION_DOWN;
printstr("\nMoving to 1");
@@ -148,6 +163,8 @@ void main(void) {
digiline_send("door2","extend");
digiline_send("sel","extend");
digiline_send("down","extend");
+ digiline_send("lantern2up",uplanternoff);
+ digiline_send("lantern2down",downlanternoff);
}
} else {
if (call1state) {
@@ -157,6 +174,8 @@ void main(void) {
digiline_send("door2","extend");
digiline_send("sel","extend");
digiline_send("down","extend");
+ digiline_send("lantern2up",uplanternoff);
+ digiline_send("lantern2down",downlanternoff);
} else if (call3state) {
direction = DIRECTION_UP;
printstr("\nMoving to 3");
@@ -164,6 +183,8 @@ void main(void) {
digiline_send("door2","extend");
digiline_send("sel","extend");
digiline_send("up","extend");
+ digiline_send("lantern2up",uplanternoff);
+ digiline_send("lantern2down",downlanternoff);
}
}
break;
@@ -175,6 +196,7 @@ void main(void) {
digiline_send("door3","extend");
digiline_send("sel","retract_sticky");
digiline_send("down","extend");
+ digiline_send("lantern3down",downlanternoff);
} else if (call1state) {
direction = DIRECTION_DOWN;
printstr("\nMoving to 1");
@@ -182,6 +204,7 @@ void main(void) {
digiline_send("door3","extend");
digiline_send("sel","extend");
digiline_send("down","extend");
+ digiline_send("lantern3down",downlanternoff);
}
break;
case STATE_MOVING_1:
@@ -191,6 +214,8 @@ void main(void) {
direction = DIRECTION_UP;
digiline_send("down","retract_sticky");
digiline_send("door1","retract_sticky");
+ digiline_send("lantern1up",uplanternon);
+ digiline_send("chime1","celevator_chime_up");
timer = 5;
state = STATE_TIMING_1;
call1state = false;
@@ -203,6 +228,13 @@ void main(void) {
digiline_send("up","retract_sticky");
digiline_send("down","retract_sticky");
digiline_send("door2","retract_sticky");
+ if (direction == DIRECTION_UP) {
+ digiline_send("lantern2up",uplanternon);
+ digiline_send("chime2","celevator_chime_up");
+ } else {
+ digiline_send("lantern2down",downlanternon);
+ digiline_send("chime2","celevator_chime_down");
+ }
timer = 5;
state = STATE_TIMING_2;
call2state = false;
@@ -215,6 +247,8 @@ void main(void) {
direction = DIRECTION_DOWN;
digiline_send("up","retract_sticky");
digiline_send("door3","retract_sticky");
+ digiline_send("lantern3down",downlanternon);
+ digiline_send("chime3","celevator_chime_down");
timer = 5;
state = STATE_TIMING_3;
call3state = false;