This project aims at hacking a remote controlled car by replacing the tx/rx and navigation systems. This project implements the pc side.

Dependencies:   mbed-rtos mbed ssWi

For the related information, consult the wiki documentation at:

Import programrover_car

This project aims at hacking a remote controlled car by replacing the tx/rx and navigation systems. This project implements the car side.

Committer:
mariob
Date:
Tue Mar 12 07:39:13 2013 +0000
Revision:
0:1b4c3bbaf102
This project aims at hacking a remote controlled car by replacing the tx/rx and navigation systems. This project implements the pc side.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariob 0:1b4c3bbaf102 1 #include "joystick.hpp"
mariob 0:1b4c3bbaf102 2
mariob 0:1b4c3bbaf102 3
mariob 0:1b4c3bbaf102 4 void Joystick::tuneChannel (int nOfSamples, int channel)
mariob 0:1b4c3bbaf102 5 {
mariob 0:1b4c3bbaf102 6 if (channel<0 || channel>3)
mariob 0:1b4c3bbaf102 7 return;
mariob 0:1b4c3bbaf102 8 ranges[channel].maxV = std::numeric_limits<float>::min();
mariob 0:1b4c3bbaf102 9 ranges[channel].minV = std::numeric_limits<float>::max();
mariob 0:1b4c3bbaf102 10 for (int i=0; i<nOfSamples; i++) {
mariob 0:1b4c3bbaf102 11 float val = channels[channel]->read();
mariob 0:1b4c3bbaf102 12 if (val>ranges[channel].maxV)
mariob 0:1b4c3bbaf102 13 ranges[channel].maxV = val;
mariob 0:1b4c3bbaf102 14 else if (val<ranges[channel].minV)
mariob 0:1b4c3bbaf102 15 ranges[channel].minV = val;
mariob 0:1b4c3bbaf102 16 wait(0.1);
mariob 0:1b4c3bbaf102 17 }
mariob 0:1b4c3bbaf102 18 }
mariob 0:1b4c3bbaf102 19
mariob 0:1b4c3bbaf102 20 void Joystick::tuneCentring (int nOfSamples, int channel)
mariob 0:1b4c3bbaf102 21 {
mariob 0:1b4c3bbaf102 22 if (channel<0 || channel>3)
mariob 0:1b4c3bbaf102 23 return;
mariob 0:1b4c3bbaf102 24 ranges[channel].center = 0.0;
mariob 0:1b4c3bbaf102 25 for (int i=0; i<nOfSamples; i++) {
mariob 0:1b4c3bbaf102 26 float val = channels[channel]->read();
mariob 0:1b4c3bbaf102 27 ranges[channel].center += val;
mariob 0:1b4c3bbaf102 28 wait(0.1);
mariob 0:1b4c3bbaf102 29 }
mariob 0:1b4c3bbaf102 30 ranges[channel].center /= nOfSamples;
mariob 0:1b4c3bbaf102 31 }
mariob 0:1b4c3bbaf102 32
mariob 0:1b4c3bbaf102 33
mariob 0:1b4c3bbaf102 34
mariob 0:1b4c3bbaf102 35 float Joystick::read(int channel)
mariob 0:1b4c3bbaf102 36 {
mariob 0:1b4c3bbaf102 37 if (channel<0 || channel>3)
mariob 0:1b4c3bbaf102 38 return std::numeric_limits<float>::min();
mariob 0:1b4c3bbaf102 39 mutexes[channel].lock();
mariob 0:1b4c3bbaf102 40 float val = values[channel];
mariob 0:1b4c3bbaf102 41 mutexes[channel].unlock();
mariob 0:1b4c3bbaf102 42 return val;
mariob 0:1b4c3bbaf102 43 }
mariob 0:1b4c3bbaf102 44
mariob 0:1b4c3bbaf102 45
mariob 0:1b4c3bbaf102 46 void Joystick::update (int channel)
mariob 0:1b4c3bbaf102 47 {
mariob 0:1b4c3bbaf102 48 mutexes[channel].lock();
mariob 0:1b4c3bbaf102 49 float val = channels[channel]->read();
mariob 0:1b4c3bbaf102 50 mutexes[channel].unlock();
mariob 0:1b4c3bbaf102 51 if (val>ranges[channel].center)
mariob 0:1b4c3bbaf102 52 values[channel] = -(val-ranges[channel].center)/
mariob 0:1b4c3bbaf102 53 (ranges[channel].maxV-ranges[channel].center);
mariob 0:1b4c3bbaf102 54 else
mariob 0:1b4c3bbaf102 55 values[channel] = (ranges[channel].center-val)/
mariob 0:1b4c3bbaf102 56 (ranges[channel].center-ranges[channel].minV);
mariob 0:1b4c3bbaf102 57 }
mariob 0:1b4c3bbaf102 58
mariob 0:1b4c3bbaf102 59 void Joystick::update ()
mariob 0:1b4c3bbaf102 60 {
mariob 0:1b4c3bbaf102 61 update(JOYSTICK_SX_X);
mariob 0:1b4c3bbaf102 62 update(JOYSTICK_SX_Y);
mariob 0:1b4c3bbaf102 63 update(JOYSTICK_DX_X);
mariob 0:1b4c3bbaf102 64 update(JOYSTICK_DX_Y);
mariob 0:1b4c3bbaf102 65 }