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.
main.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 "mbed.h" |
mariob | 0:1b4c3bbaf102 | 2 | #include "rtos.h" |
mariob | 0:1b4c3bbaf102 | 3 | |
mariob | 0:1b4c3bbaf102 | 4 | #include "xbee.hpp" |
mariob | 0:1b4c3bbaf102 | 5 | #include "ssWiSocket.hpp" |
mariob | 0:1b4c3bbaf102 | 6 | #include "joystick.hpp" |
mariob | 0:1b4c3bbaf102 | 7 | |
mariob | 0:1b4c3bbaf102 | 8 | |
mariob | 0:1b4c3bbaf102 | 9 | #define UPDATING_PERIOD_MS 200 |
mariob | 0:1b4c3bbaf102 | 10 | |
mariob | 0:1b4c3bbaf102 | 11 | #define PORT_MOTOR 20 |
mariob | 0:1b4c3bbaf102 | 12 | #define PORT_SERVO 30 |
mariob | 0:1b4c3bbaf102 | 13 | #define PORT_SERVO_CAMERA_X 40 |
mariob | 0:1b4c3bbaf102 | 14 | #define PORT_SERVO_CAMERA_Y 50 |
mariob | 0:1b4c3bbaf102 | 15 | |
mariob | 0:1b4c3bbaf102 | 16 | |
mariob | 0:1b4c3bbaf102 | 17 | ssWiSocket* socket_motor; |
mariob | 0:1b4c3bbaf102 | 18 | ssWiSocket* socket_servo; |
mariob | 0:1b4c3bbaf102 | 19 | ssWiSocket* socket_camera_x; |
mariob | 0:1b4c3bbaf102 | 20 | ssWiSocket* socket_camera_y; |
mariob | 0:1b4c3bbaf102 | 21 | |
mariob | 0:1b4c3bbaf102 | 22 | Joystick joystick(p15, p16, p17, p18); |
mariob | 0:1b4c3bbaf102 | 23 | |
mariob | 0:1b4c3bbaf102 | 24 | |
mariob | 0:1b4c3bbaf102 | 25 | void tuneJoystickChannel (PinName pinLed, int joystickChannel); |
mariob | 0:1b4c3bbaf102 | 26 | void updateFunction (const void* arg); |
mariob | 0:1b4c3bbaf102 | 27 | |
mariob | 0:1b4c3bbaf102 | 28 | |
mariob | 0:1b4c3bbaf102 | 29 | int main () |
mariob | 0:1b4c3bbaf102 | 30 | { |
mariob | 0:1b4c3bbaf102 | 31 | //Communication link connection |
mariob | 0:1b4c3bbaf102 | 32 | XBeeModule xbee(p9, p10, 102, 14); |
mariob | 0:1b4c3bbaf102 | 33 | xbee.setDstAddress(XBeeBroadcastAddress()); |
mariob | 0:1b4c3bbaf102 | 34 | xbee.init(5, -1); |
mariob | 0:1b4c3bbaf102 | 35 | |
mariob | 0:1b4c3bbaf102 | 36 | //Socket creation |
mariob | 0:1b4c3bbaf102 | 37 | socket_motor = ssWiSocket::createSocket(PORT_MOTOR); |
mariob | 0:1b4c3bbaf102 | 38 | socket_servo = ssWiSocket::createSocket(PORT_SERVO); |
mariob | 0:1b4c3bbaf102 | 39 | socket_camera_x = ssWiSocket::createSocket(PORT_SERVO_CAMERA_X); |
mariob | 0:1b4c3bbaf102 | 40 | socket_camera_y = ssWiSocket::createSocket(PORT_SERVO_CAMERA_Y); |
mariob | 0:1b4c3bbaf102 | 41 | if (socket_motor==NULL || socket_servo==NULL || |
mariob | 0:1b4c3bbaf102 | 42 | socket_camera_x==NULL || socket_camera_y==NULL) |
mariob | 0:1b4c3bbaf102 | 43 | printf("Error: socket error\n\r"); |
mariob | 0:1b4c3bbaf102 | 44 | |
mariob | 0:1b4c3bbaf102 | 45 | //Joystick centering |
mariob | 0:1b4c3bbaf102 | 46 | joystick.tuneCentring(20, JOYSTICK_SX_X); |
mariob | 0:1b4c3bbaf102 | 47 | joystick.tuneCentring(20, JOYSTICK_SX_Y); |
mariob | 0:1b4c3bbaf102 | 48 | joystick.tuneCentring(20, JOYSTICK_DX_X); |
mariob | 0:1b4c3bbaf102 | 49 | joystick.tuneCentring(20, JOYSTICK_DX_Y); |
mariob | 0:1b4c3bbaf102 | 50 | |
mariob | 0:1b4c3bbaf102 | 51 | //Joystick tuning |
mariob | 0:1b4c3bbaf102 | 52 | { |
mariob | 0:1b4c3bbaf102 | 53 | //tuneJoystickChannel(LED1, JOYSTICK_SX_X); |
mariob | 0:1b4c3bbaf102 | 54 | DigitalOut led1(LED1); |
mariob | 0:1b4c3bbaf102 | 55 | led1 = 1; |
mariob | 0:1b4c3bbaf102 | 56 | joystick.tuneChannel(100, JOYSTICK_SX_X); |
mariob | 0:1b4c3bbaf102 | 57 | led1 = 0; |
mariob | 0:1b4c3bbaf102 | 58 | } |
mariob | 0:1b4c3bbaf102 | 59 | { |
mariob | 0:1b4c3bbaf102 | 60 | //tuneJoystickChannel(LED2, JOYSTICK_SX_Y); |
mariob | 0:1b4c3bbaf102 | 61 | DigitalOut led2(LED2); |
mariob | 0:1b4c3bbaf102 | 62 | led2 = 1; |
mariob | 0:1b4c3bbaf102 | 63 | joystick.tuneChannel(100, JOYSTICK_SX_Y); |
mariob | 0:1b4c3bbaf102 | 64 | led2 = 0; |
mariob | 0:1b4c3bbaf102 | 65 | } |
mariob | 0:1b4c3bbaf102 | 66 | { |
mariob | 0:1b4c3bbaf102 | 67 | //tuneJoystickChannel(LED3, JOYSTICK_DX_X); |
mariob | 0:1b4c3bbaf102 | 68 | DigitalOut led3(LED3); |
mariob | 0:1b4c3bbaf102 | 69 | led3 = 1; |
mariob | 0:1b4c3bbaf102 | 70 | joystick.tuneChannel(100, JOYSTICK_DX_X); |
mariob | 0:1b4c3bbaf102 | 71 | led3 = 0; |
mariob | 0:1b4c3bbaf102 | 72 | } |
mariob | 0:1b4c3bbaf102 | 73 | { |
mariob | 0:1b4c3bbaf102 | 74 | //tuneJoystickChannel(LED4, JOYSTICK_DX_Y); |
mariob | 0:1b4c3bbaf102 | 75 | DigitalOut led4(LED4); |
mariob | 0:1b4c3bbaf102 | 76 | led4 = 1; |
mariob | 0:1b4c3bbaf102 | 77 | joystick.tuneChannel(100, JOYSTICK_DX_Y); |
mariob | 0:1b4c3bbaf102 | 78 | led4 = 0; |
mariob | 0:1b4c3bbaf102 | 79 | } |
mariob | 0:1b4c3bbaf102 | 80 | //Timer setting |
mariob | 0:1b4c3bbaf102 | 81 | RtosTimer timer (updateFunction, osTimerPeriodic, NULL); |
mariob | 0:1b4c3bbaf102 | 82 | timer.start(200); |
mariob | 0:1b4c3bbaf102 | 83 | |
mariob | 0:1b4c3bbaf102 | 84 | //Infinite wait |
mariob | 0:1b4c3bbaf102 | 85 | Thread::wait(osWaitForever); |
mariob | 0:1b4c3bbaf102 | 86 | } |
mariob | 0:1b4c3bbaf102 | 87 | |
mariob | 0:1b4c3bbaf102 | 88 | |
mariob | 0:1b4c3bbaf102 | 89 | void updateFunction (const void* arg) |
mariob | 0:1b4c3bbaf102 | 90 | { |
mariob | 0:1b4c3bbaf102 | 91 | // while(1) { |
mariob | 0:1b4c3bbaf102 | 92 | joystick.update(); |
mariob | 0:1b4c3bbaf102 | 93 | socket_motor->write(-joystick.read(JOYSTICK_SX_Y)*1000.0); |
mariob | 0:1b4c3bbaf102 | 94 | socket_servo->write(joystick.read(JOYSTICK_SX_X)*1000.0); |
mariob | 0:1b4c3bbaf102 | 95 | socket_camera_x->write(joystick.read(JOYSTICK_DX_X)*1000.0); |
mariob | 0:1b4c3bbaf102 | 96 | socket_camera_y->write(joystick.read(JOYSTICK_DX_Y)*1000.0); |
mariob | 0:1b4c3bbaf102 | 97 | // printf("%f %f %f %f\n\r", joystick.read(JOYSTICK_SX_X), joystick.read(JOYSTICK_SX_Y), joystick.read(JOYSTICK_DX_X), joystick.read(JOYSTICK_DX_Y)); |
mariob | 0:1b4c3bbaf102 | 98 | // Thread::wait(UPDATING_PERIOD_MS); |
mariob | 0:1b4c3bbaf102 | 99 | // } |
mariob | 0:1b4c3bbaf102 | 100 | } |
mariob | 0:1b4c3bbaf102 | 101 | |
mariob | 0:1b4c3bbaf102 | 102 | |
mariob | 0:1b4c3bbaf102 | 103 | void tuneJoystickChannel (PinName pinLed, int joystickChannel) |
mariob | 0:1b4c3bbaf102 | 104 | { |
mariob | 0:1b4c3bbaf102 | 105 | DigitalOut led(pinLed); |
mariob | 0:1b4c3bbaf102 | 106 | led = 1; |
mariob | 0:1b4c3bbaf102 | 107 | joystick.tuneChannel(100, joystickChannel); |
mariob | 0:1b4c3bbaf102 | 108 | led = 0; |
mariob | 0:1b4c3bbaf102 | 109 | } |