summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/robospierre
diff options
context:
space:
mode:
authorNicolas Schodet2011-06-04 02:48:28 +0200
committerNicolas Schodet2011-06-04 02:48:28 +0200
commit618872c7705a7f71afe77cd13b694a07660ebcb8 (patch)
tree7a5cf5b5a15c256ee61ebd72f4afaefc809a8cd9 /digital/io-hub/src/robospierre
parente4f860bb81377ef7a6a60c0ccd55e3688eb5af94 (diff)
digital/io-hub: conditionaly enable bumpers
Diffstat (limited to 'digital/io-hub/src/robospierre')
-rw-r--r--digital/io-hub/src/robospierre/pawn_sensor.c27
-rw-r--r--digital/io-hub/src/robospierre/pawn_sensor.h4
-rw-r--r--digital/io-hub/src/robospierre/top.c7
3 files changed, 30 insertions, 8 deletions
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. */