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.
joystick/joystick.cpp@0:1b4c3bbaf102, 2013-03-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |