This program is for an autonomous robot for the competition at the Hochschule Luzern. We are one of the 32 teams. <a href="http://cruisingcrepe.wordpress.com/">http://cruisingcrepe.wordpress.com/</a> The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: <a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf">http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf</a>

Dependencies:   mbed

Fork of autonomousRobotAndroid by Christian Burri

Revision:
3:92ba0254af87
Parent:
2:d8e1613dc38b
Child:
6:48eeb41188dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Actuators/MaxonESCON.cpp	Thu Mar 07 09:47:07 2013 +0000
@@ -0,0 +1,86 @@
+#include "MaxonESCON.h"
+
+using namespace std;
+
+MaxonESCON::MaxonESCON(
+    PinName enb,
+    PinName isenb,
+    PinName pwm,
+    PinName actualSpeed,
+    Hallsensor *hall
+)
+    :
+    _enb(enb),
+    _isenb(isenb),
+    _pwm(pwm),
+    _actualSpeed(actualSpeed),
+    _hall(hall)
+{
+
+    _pwm = 0;
+
+    // Initial condition of output enables
+    _enb = 0;
+
+    // Set initial condition of PWM 2kHz
+    period(0.0005);
+
+    // Set the pulses to zero
+    _pulses = 0;
+
+    // Set the Pull Up Resistor
+    _isenb.mode(PullUp);
+}
+
+void MaxonESCON::setVelocity(float speed)
+{
+    speed = speed / ESCON_SET_FACTOR * 60.0f;
+    if(speed > 1 ) {
+        _pwm = 0.9f;
+    } else if(speed < -1) {
+        _pwm = 0.1f;
+    } else {
+        _pwm = 0.4f*speed + 0.5f;
+    }
+}
+
+float MaxonESCON::getActualSpeed(void)
+{
+    return (_actualSpeed.read()* 2.0f - 1.0f) * ESCON_GET_FACTOR / 60.0f;
+}
+
+void MaxonESCON::period(float period)
+{
+    _pwm.period(period);
+}
+
+void MaxonESCON::enable(bool enb)
+{
+    if(enb == false) {
+        _enb = 1;
+    } else {
+        _enb = 0;
+    }
+}
+
+bool MaxonESCON::isEnabled()
+{
+    if(_isenb.read() == 1) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+int MaxonESCON::getPulses(void)
+{
+    _pulses = _hall->getPulses();
+    return _pulses;
+}
+
+int MaxonESCON::setPulses(int setPos)
+{
+    _hall->reset();
+    _pulses = _hall->getPulses();
+    return _pulses;
+}