From 618872c7705a7f71afe77cd13b694a07660ebcb8 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 4 Jun 2011 02:48:28 +0200 Subject: digital/io-hub: conditionaly enable bumpers --- digital/io-hub/src/robospierre/pawn_sensor.c | 27 +++++++++++++++++++-------- digital/io-hub/src/robospierre/pawn_sensor.h | 4 ++++ digital/io-hub/src/robospierre/top.c | 7 +++++++ 3 files changed, 30 insertions(+), 8 deletions(-) (limited to 'digital/io-hub/src/robospierre') diff --git a/digital/io-hub/src/robospierre/pawn_sensor.c b/digital/io-hub/src/robospierre/pawn_sensor.c index 5ca18759..cc9e6900 100644 --- a/digital/io-hub/src/robospierre/pawn_sensor.c +++ b/digital/io-hub/src/robospierre/pawn_sensor.c @@ -59,6 +59,8 @@ struct pawn_sensor_t /** Pawn sensor general context. */ struct pawn_sensor_general_t { + /** Activate bumpers. */ + uint8_t bumper_enabled; /** Last bumped element position. */ vect_t last_bumped; /** Bumper triggered, wait until the next one. */ @@ -191,18 +193,27 @@ pawn_sensor_update (void) #define BUMPER_FRONT_RIGHT _BV (7) #define BUMPER_BACK_RIGHT _BV (5) #define BUMPER_BACK_LEFT _BV (4) - if (pawn_sensor_global.bump_wait) - pawn_sensor_global.bump_wait--; - else + if (pawn_sensor_global.bumper_enabled) { - uint8_t bumpers = mimot_get_input (); - pawn_sensor_bumper (!(bumpers & BUMPER_FRONT_LEFT), 120, 265); - pawn_sensor_bumper (!(bumpers & BUMPER_FRONT_RIGHT), 120, -265); - pawn_sensor_bumper (!(bumpers & BUMPER_BACK_RIGHT), -120, -265); - pawn_sensor_bumper (!(bumpers & BUMPER_BACK_LEFT), -120, 265); + if (pawn_sensor_global.bump_wait) + pawn_sensor_global.bump_wait--; + else + { + uint8_t bumpers = mimot_get_input (); + pawn_sensor_bumper (!(bumpers & BUMPER_FRONT_LEFT), 120, 265); + pawn_sensor_bumper (!(bumpers & BUMPER_FRONT_RIGHT), 120, -265); + pawn_sensor_bumper (!(bumpers & BUMPER_BACK_RIGHT), -120, -265); + pawn_sensor_bumper (!(bumpers & BUMPER_BACK_LEFT), -120, 265); + } } } +void +pawn_sensor_bumper_enable (uint8_t enabled) +{ + pawn_sensor_global.bumper_enabled = enabled; +} + vect_t pawn_sensor_get_last_bumped (void) { diff --git a/digital/io-hub/src/robospierre/pawn_sensor.h b/digital/io-hub/src/robospierre/pawn_sensor.h index 04ea1a2f..8d6d2651 100644 --- a/digital/io-hub/src/robospierre/pawn_sensor.h +++ b/digital/io-hub/src/robospierre/pawn_sensor.h @@ -34,6 +34,10 @@ pawn_sensor_get (uint8_t direction); void pawn_sensor_update (void); +/** Enable bumpers. */ +void +pawn_sensor_bumper_enable (uint8_t enabled); + /** Return last bumped pawn. */ vect_t pawn_sensor_get_last_bumped (void); diff --git a/digital/io-hub/src/robospierre/top.c b/digital/io-hub/src/robospierre/top.c index 7e3f4413..f4afaa17 100644 --- a/digital/io-hub/src/robospierre/top.c +++ b/digital/io-hub/src/robospierre/top.c @@ -153,9 +153,15 @@ top_go_element (void) if (!ctx.broken) { if (e.attr & ELEMENT_GREEN) + { logistic_global.prepare = 0; + pawn_sensor_bumper_enable (0); + } else + { logistic_global.prepare = top_prepare_level (); + pawn_sensor_bumper_enable (1); + } } vect_t element_pos = element_get_pos (ctx.target_element_id); top_go_this_element (element_pos, 0); @@ -172,6 +178,7 @@ top_go_drop (void) drop_pos.v = element_get_pos (ctx.target_element_id); if (!ctx.broken) logistic_global.prepare = top_prepare_level (); + pawn_sensor_bumper_enable (0); uint8_t backward = logistic_global.collect_direction == DIRECTION_FORWARD ? 0 : ASSERV_BACKWARD; /* Go above or below the drop point. */ -- cgit v1.2.3