RC-car remotely controlled from a computer. A demonstration of the power of Pytelemetry/telemetry. MIT Licensing.

Dependencies:   BufferedSerial FRDM-TFC mbed telemetry

Example of the 'Telemetry' library, a portable communication library for embedded devices. The PC-side of this code is hosted a github.com/Overdrivr/telemetry-examples

This code uses the car from the Freescale Cup competition initially dedicated to be a line-following racing car, and turns it into a full-blown radio-controlled car.

It is using a Bluetooth serial module to provide wireless connectivity. See the repository at github.com/Overdrivr/telemetry-examples for complete instructions on wiring everthing together.

Repo : TO BE DONE

Revision:
0:c5e974040f21
Child:
1:5a07069e17b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Feb 16 20:33:33 2016 +0000
@@ -0,0 +1,95 @@
+#include "mbed.h"
+#include "FRDM-TFC/TFC.h"
+#include "telemetry/driver.hpp"
+
+DigitalOut led(LED1);
+
+struct TM_state {
+  float direction;
+  float throttle;  
+};
+
+void process(TM_state* carState, TM_msg* msg);
+
+int main()
+{   
+    TM_state carState;
+    carState.direction = 0;
+    carState.throttle = 0;
+    Telemetry TM(&carState);
+    TM.sub(process);
+    
+    led = 1;
+
+    TFC_Init();
+    
+    Timer servo_timer;
+    Timer motor_timer;
+    Timer tm_timer;
+    Timer print_timer;
+    
+    servo_timer.start();
+    motor_timer.start();
+    tm_timer.start();
+    print_timer.start();
+    TFC_HBRIDGE_ENABLE;
+    for(;;)
+    {       
+        // update telemetry
+        if(tm_timer.read_ms() > 50)
+        {
+            tm_timer.reset();
+            TM.update();   
+        }
+        
+        // update servo control
+        if(servo_timer.read_ms() > 10)
+        {
+            servo_timer.reset();
+            TFC_SetServo(0, carState.direction);
+        }
+        
+        // update motor control
+        if(motor_timer.read_ms() > 5)
+        {
+            motor_timer.reset();
+            TFC_SetMotorPWM(carState.throttle , carState.throttle);
+        }
+        
+        // publish car state & blink a led
+        if(print_timer.read_ms() > 500)
+        {
+            print_timer.reset();
+            TM.pub_f32("direction",carState.direction);
+            TM.pub_f32("throttle",carState.throttle);
+            led = (led == 0) ? 1 : 0;  
+        }
+    }
+}
+
+void process(TM_state* carState, TM_msg* msg)
+{
+    float value = 0.f;
+    if(strcmp(msg->topic,"direction") == 0)
+    {
+        if(emplace_f32(msg,&value))
+        {
+            if(value > 1.f)
+                value = 1.f;
+            if(value < -1.f)
+                value = -1.f;
+            carState->direction = value;
+        }
+    }
+    else if(strcmp(msg->topic,"throttle") == 0)
+    {
+        if(emplace_f32(msg,&value))
+        {
+            if(value > 1.f)
+                value = 1.f;
+            if(value < -1.f)
+                value = -1.f;
+            carState->throttle = value; 
+        }
+    }
+}
\ No newline at end of file