summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/busp/busp_servo.cc
diff options
context:
space:
mode:
Diffstat (limited to '2003/i/buzz/src/busp/busp_servo.cc')
-rw-r--r--2003/i/buzz/src/busp/busp_servo.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/2003/i/buzz/src/busp/busp_servo.cc b/2003/i/buzz/src/busp/busp_servo.cc
new file mode 100644
index 0000000..1cef0c4
--- /dev/null
+++ b/2003/i/buzz/src/busp/busp_servo.cc
@@ -0,0 +1,39 @@
+// busp_servo.cc
+// buzz - Programme du robot Efrei Robotique I1-I2 2003
+// Copyright (C) 2003 Nicolas Schodet
+//
+#include "busp_servo.h"
+#include "busp.h"
+
+// Constructeur.
+BuspServo::BuspServo ()
+{
+ for (int i = 0; i < 8; ++i)
+ m_pos[i] = 127;
+}
+
+// Bouge le servo N en POS.
+void
+BuspServo::moveTo (int n, int pos)
+{
+ set (n, pos);
+}
+
+// Bouge le servo N de DIFF.
+void
+BuspServo::move (int n, int diff)
+{
+ set (n, m_pos[n & 0x07] + diff);
+}
+
+// Fait le déplacement effectif.
+void
+BuspServo::set (int n, int pos)
+{
+ if (pos > 255) pos = 255;
+ else if (pos < 0) pos = 0;
+ n &= 0x07;
+ m_pos[n] = pos;
+ Busp::getInstance ().write (m_address, n);
+ Busp::getInstance ().write (m_address, pos);
+}