summaryrefslogtreecommitdiffhomepage
path: root/digital/io-hub/src/apbirthday
diff options
context:
space:
mode:
authorMaxime Hadjinlian2013-05-08 19:29:09 +0200
committerNicolas Schodet2013-05-09 05:56:24 +0200
commit89fa4dc287106fa0be4bd35cc68af6b1d59e56cb (patch)
tree5fceff1c3cb30a5b70a8502a781bbe9b7f929a8c /digital/io-hub/src/apbirthday
parentf6d463f8f2e30cd4a633a7aab36f17ce56e513f5 (diff)
digital/io-hub/src/apbirthday: add servos class
Diffstat (limited to 'digital/io-hub/src/apbirthday')
-rw-r--r--digital/io-hub/src/apbirthday/Makefile1
-rw-r--r--digital/io-hub/src/apbirthday/cannon.cc1
-rw-r--r--digital/io-hub/src/apbirthday/cannon.hh6
-rw-r--r--digital/io-hub/src/apbirthday/hardware.hh2
-rw-r--r--digital/io-hub/src/apbirthday/hardware.stm32.cc5
-rw-r--r--digital/io-hub/src/apbirthday/robot.cc7
6 files changed, 18 insertions, 4 deletions
diff --git a/digital/io-hub/src/apbirthday/Makefile b/digital/io-hub/src/apbirthday/Makefile
index 215c71bc..69c7027b 100644
--- a/digital/io-hub/src/apbirthday/Makefile
+++ b/digital/io-hub/src/apbirthday/Makefile
@@ -7,6 +7,7 @@ apbirthday_SOURCES = main.cc robot.cc hardware.host.cc hardware.stm32.cc \
i2c_queue.cc asserv.cc mimot.cc lcd.cc beacon.cc \
potentiometer.host.cc potentiometer.stm32.cc \
pressure.cc chrono.host.cc chrono.stm32.cc debounce.cc \
+ servo.host.cc servo.stm32.cc \
radar.cc radar_2013.cc obstacles.cc path.cc path_2013.cc strat.cc \
outputs.cc \
top.cc init.cc move.cc candles.cc cannon.cc drinks.cc plate.cc \
diff --git a/digital/io-hub/src/apbirthday/cannon.cc b/digital/io-hub/src/apbirthday/cannon.cc
index d06412ef..3b733d19 100644
--- a/digital/io-hub/src/apbirthday/cannon.cc
+++ b/digital/io-hub/src/apbirthday/cannon.cc
@@ -45,6 +45,7 @@ inline void Cannon::blower_off ()
inline void Cannon::set_servo_pos (int pos)
{
// Switch the servo to BLOCK, POS1 or POS2
+ robot->hardware.servos.set_position (Servo::SERVO_CHERRY, pos);
}
inline void Cannon::set_router_state (int state)
diff --git a/digital/io-hub/src/apbirthday/cannon.hh b/digital/io-hub/src/apbirthday/cannon.hh
index cd7a2969..a8c0ce26 100644
--- a/digital/io-hub/src/apbirthday/cannon.hh
+++ b/digital/io-hub/src/apbirthday/cannon.hh
@@ -31,9 +31,9 @@ class Cannon
Cannon ();
enum ServoPos
{
- BLOCK,
- POS1,
- POS2
+ BLOCK = 0x0800,
+ POS1 = 0x1380,
+ POS2 = 0x0a00
};
enum StateRouter
{
diff --git a/digital/io-hub/src/apbirthday/hardware.hh b/digital/io-hub/src/apbirthday/hardware.hh
index 33d10c0c..d53d3ec8 100644
--- a/digital/io-hub/src/apbirthday/hardware.hh
+++ b/digital/io-hub/src/apbirthday/hardware.hh
@@ -33,6 +33,7 @@
#else
# include "ucoolib/arch/host/host_stream.hh"
#endif
+#include "servo.hh"
#ifdef TARGET_host
# include "simu_report.host.hh"
#endif
@@ -101,6 +102,7 @@ struct Hardware
ucoo::AdcHost adc_cake_front, adc_cake_back;
ucoo::AdcHost adc_pressure;
#endif
+ Servo servos;
#ifdef TARGET_host
SimuReport simu_report;
#endif
diff --git a/digital/io-hub/src/apbirthday/hardware.stm32.cc b/digital/io-hub/src/apbirthday/hardware.stm32.cc
index bfca0a61..26510abc 100644
--- a/digital/io-hub/src/apbirthday/hardware.stm32.cc
+++ b/digital/io-hub/src/apbirthday/hardware.stm32.cc
@@ -64,7 +64,8 @@ Hardware::Hardware ()
adc_dist0 (adc, 0), adc_dist1 (adc, 1),
adc_dist2 (adc, 2), adc_dist3 (adc, 3),
adc_cake_front (adc, 6), adc_cake_back (adc, 7),
- adc_pressure (adc, 8)
+ adc_pressure (adc, 8),
+ servos ()
{
rcc_peripheral_enable_clock (&RCC_AHB1ENR, RCC_AHB1ENR_IOPAEN);
rcc_peripheral_enable_clock (&RCC_AHB1ENR, RCC_AHB1ENR_IOPBEN);
@@ -105,6 +106,8 @@ Hardware::Hardware ()
GPIO10 | GPIO11);
gpio_set_af (GPIOB, GPIO_AF4, GPIO10 | GPIO11);
zb_i2c.enable ();
+ // Servos
+ servos.enable ();
// GPIO.
raw_jack.pull (ucoo::Gpio::PULL_UP);
ihm_color.pull (ucoo::Gpio::PULL_UP);
diff --git a/digital/io-hub/src/apbirthday/robot.cc b/digital/io-hub/src/apbirthday/robot.cc
index 909bbc31..99926707 100644
--- a/digital/io-hub/src/apbirthday/robot.cc
+++ b/digital/io-hub/src/apbirthday/robot.cc
@@ -336,6 +336,13 @@ Robot::proto_handle (ucoo::Proto &proto, char cmd, const uint8_t *args, int size
pot_regul.set_wiper (args[0], ucoo::bytes_pack (args[1], args[2]),
args[3] ? true : false);
break;
+ case c ('s', 3):
+ // Set servo position.
+ // - 1b: servo index.
+ // - 1h: servo position.
+ hardware.servos.set_position (args[0],
+ ucoo::bytes_pack (args[1], args[2]));
+ break;
case c ('l', 3):
// Test LCD interface, set team color.
// - 3B: R, G, B.