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
Diff: main.cpp
- 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