RaheeNew nonblocking
Dependencies: RaheeNew LinkedList mbed-rpc mbed-rtos mbed
main.cpp@0:3054baadfda9, 2015-11-28 (annotated)
- Committer:
- jatinsha
- Date:
- Sat Nov 28 10:08:18 2015 +0000
- Revision:
- 0:3054baadfda9
js
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jatinsha | 0:3054baadfda9 | 1 | #include "mbed.h" |
jatinsha | 0:3054baadfda9 | 2 | #include "rtos.h" |
jatinsha | 0:3054baadfda9 | 3 | #include "mbed_rpc.h" |
jatinsha | 0:3054baadfda9 | 4 | #include "string.h" |
jatinsha | 0:3054baadfda9 | 5 | #define _MBED_ |
jatinsha | 0:3054baadfda9 | 6 | #include "Adafruit_9DOF.h" |
jatinsha | 0:3054baadfda9 | 7 | #include "Serial_base.h" |
jatinsha | 0:3054baadfda9 | 8 | |
jatinsha | 0:3054baadfda9 | 9 | Serial pc(USBTX, USBRX); // tx, rx |
jatinsha | 0:3054baadfda9 | 10 | Serial bluetooth(p9, p10); // tx, rx |
jatinsha | 0:3054baadfda9 | 11 | Ticker compassTicker; |
jatinsha | 0:3054baadfda9 | 12 | float compassValue; |
jatinsha | 0:3054baadfda9 | 13 | float *ax, *ay, *az, *mx, *my, *mz; |
jatinsha | 0:3054baadfda9 | 14 | |
jatinsha | 0:3054baadfda9 | 15 | DigitalOut led1(LED1), led2(LED2), led3(LED3); |
jatinsha | 0:3054baadfda9 | 16 | |
jatinsha | 0:3054baadfda9 | 17 | //Use the RPC enabled wrapped class - see RpcClasses.h for more info |
jatinsha | 0:3054baadfda9 | 18 | RpcDigitalOut leftTop(p20,"leftTop"); |
jatinsha | 0:3054baadfda9 | 19 | RpcDigitalOut leftBottom(p12,"leftBottom"); |
jatinsha | 0:3054baadfda9 | 20 | RpcDigitalOut rightTop(p22,"rightTop"); |
jatinsha | 0:3054baadfda9 | 21 | RpcDigitalOut rightBottom(p29,"rightBottom"); |
jatinsha | 0:3054baadfda9 | 22 | |
jatinsha | 0:3054baadfda9 | 23 | char buf[256], outbuf[256]; |
jatinsha | 0:3054baadfda9 | 24 | |
jatinsha | 0:3054baadfda9 | 25 | bool compassTriggered = false; |
jatinsha | 0:3054baadfda9 | 26 | bool bluetoothTriggered = false; |
jatinsha | 0:3054baadfda9 | 27 | |
jatinsha | 0:3054baadfda9 | 28 | |
jatinsha | 0:3054baadfda9 | 29 | |
jatinsha | 0:3054baadfda9 | 30 | |
jatinsha | 0:3054baadfda9 | 31 | /* Assign a unique ID to the sensors */ |
jatinsha | 0:3054baadfda9 | 32 | |
jatinsha | 0:3054baadfda9 | 33 | Adafruit_9DOF dof = Adafruit_9DOF(); |
jatinsha | 0:3054baadfda9 | 34 | Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301); |
jatinsha | 0:3054baadfda9 | 35 | Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302); |
jatinsha | 0:3054baadfda9 | 36 | /* Update this with the correct SLP for accurate altitude measurements */ |
jatinsha | 0:3054baadfda9 | 37 | float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; |
jatinsha | 0:3054baadfda9 | 38 | /************************************************************************** |
jatinsha | 0:3054baadfda9 | 39 | @brief Initialises all the sensors used by this example |
jatinsha | 0:3054baadfda9 | 40 | **************************************************************************/ |
jatinsha | 0:3054baadfda9 | 41 | |
jatinsha | 0:3054baadfda9 | 42 | void initSensors(){ |
jatinsha | 0:3054baadfda9 | 43 | if(!accel.begin()){ |
jatinsha | 0:3054baadfda9 | 44 | /* There was a problem detecting the LSM303 ... check your connections */ |
jatinsha | 0:3054baadfda9 | 45 | s_com->println(("Ooops, no LSM303 detected ... Check your wiring!")); |
jatinsha | 0:3054baadfda9 | 46 | while(1); |
jatinsha | 0:3054baadfda9 | 47 | } |
jatinsha | 0:3054baadfda9 | 48 | |
jatinsha | 0:3054baadfda9 | 49 | if(!mag.begin()){ |
jatinsha | 0:3054baadfda9 | 50 | /* There was a problem detecting the LSM303 ... check your connections */ |
jatinsha | 0:3054baadfda9 | 51 | s_com->println("Ooops, no LSM303 detected ... Check your wiring!"); |
jatinsha | 0:3054baadfda9 | 52 | while(1); |
jatinsha | 0:3054baadfda9 | 53 | } |
jatinsha | 0:3054baadfda9 | 54 | } |
jatinsha | 0:3054baadfda9 | 55 | |
jatinsha | 0:3054baadfda9 | 56 | void setup(void){ |
jatinsha | 0:3054baadfda9 | 57 | s_com->println(("Adafruit 9 DOF Pitch/Roll/Heading Example")); |
jatinsha | 0:3054baadfda9 | 58 | s_com->println(""); |
jatinsha | 0:3054baadfda9 | 59 | |
jatinsha | 0:3054baadfda9 | 60 | /* Initialise the sensors */ |
jatinsha | 0:3054baadfda9 | 61 | initSensors(); |
jatinsha | 0:3054baadfda9 | 62 | } |
jatinsha | 0:3054baadfda9 | 63 | |
jatinsha | 0:3054baadfda9 | 64 | |
jatinsha | 0:3054baadfda9 | 65 | |
jatinsha | 0:3054baadfda9 | 66 | |
jatinsha | 0:3054baadfda9 | 67 | |
jatinsha | 0:3054baadfda9 | 68 | void compassTickerCallback() { |
jatinsha | 0:3054baadfda9 | 69 | compassTriggered = true; |
jatinsha | 0:3054baadfda9 | 70 | } |
jatinsha | 0:3054baadfda9 | 71 | |
jatinsha | 0:3054baadfda9 | 72 | void bluetoothCallback() { |
jatinsha | 0:3054baadfda9 | 73 | bluetoothTriggered = true; |
jatinsha | 0:3054baadfda9 | 74 | } |
jatinsha | 0:3054baadfda9 | 75 | |
jatinsha | 0:3054baadfda9 | 76 | |
jatinsha | 0:3054baadfda9 | 77 | |
jatinsha | 0:3054baadfda9 | 78 | void compassTickerHandler() { |
jatinsha | 0:3054baadfda9 | 79 | led1 = 1; |
jatinsha | 0:3054baadfda9 | 80 | |
jatinsha | 0:3054baadfda9 | 81 | sensors_event_t accel_event; |
jatinsha | 0:3054baadfda9 | 82 | sensors_event_t mag_event; |
jatinsha | 0:3054baadfda9 | 83 | sensors_vec_t orientation; |
jatinsha | 0:3054baadfda9 | 84 | |
jatinsha | 0:3054baadfda9 | 85 | /* Calculate pitch and roll from the raw accelerometer data */ |
jatinsha | 0:3054baadfda9 | 86 | accel.getEvent(&accel_event); |
jatinsha | 0:3054baadfda9 | 87 | if (dof.accelGetOrientation(&accel_event, &orientation)){ |
jatinsha | 0:3054baadfda9 | 88 | /* 'orientation' should have valid .roll and .pitch fields */ |
jatinsha | 0:3054baadfda9 | 89 | s_com->print(("Roll: ")); |
jatinsha | 0:3054baadfda9 | 90 | s_com->print(orientation.roll); |
jatinsha | 0:3054baadfda9 | 91 | s_com->print(("; ")); |
jatinsha | 0:3054baadfda9 | 92 | s_com->print(("Pitch: ")); |
jatinsha | 0:3054baadfda9 | 93 | s_com->print(orientation.pitch); |
jatinsha | 0:3054baadfda9 | 94 | s_com->print(("; ")); |
jatinsha | 0:3054baadfda9 | 95 | } |
jatinsha | 0:3054baadfda9 | 96 | |
jatinsha | 0:3054baadfda9 | 97 | /* Calculate the heading using the magnetometer */ |
jatinsha | 0:3054baadfda9 | 98 | mag.getEvent(&mag_event); |
jatinsha | 0:3054baadfda9 | 99 | if (dof.magGetOrientation(SENSOR_AXIS_Z, &mag_event, &orientation)){ |
jatinsha | 0:3054baadfda9 | 100 | /* 'orientation' should have valid .heading data now */ |
jatinsha | 0:3054baadfda9 | 101 | s_com->print(("Heading: ")); |
jatinsha | 0:3054baadfda9 | 102 | s_com->print(orientation.heading); |
jatinsha | 0:3054baadfda9 | 103 | s_com->print(("; ")); |
jatinsha | 0:3054baadfda9 | 104 | } |
jatinsha | 0:3054baadfda9 | 105 | |
jatinsha | 0:3054baadfda9 | 106 | s_com->println(("")); |
jatinsha | 0:3054baadfda9 | 107 | |
jatinsha | 0:3054baadfda9 | 108 | led1 = 0; |
jatinsha | 0:3054baadfda9 | 109 | compassTriggered = false; |
jatinsha | 0:3054baadfda9 | 110 | } |
jatinsha | 0:3054baadfda9 | 111 | |
jatinsha | 0:3054baadfda9 | 112 | void bluetoothHandler() { |
jatinsha | 0:3054baadfda9 | 113 | bluetooth.gets(buf, 256); |
jatinsha | 0:3054baadfda9 | 114 | //pc.puts(buf); |
jatinsha | 0:3054baadfda9 | 115 | //Call the static call method on the RPC class |
jatinsha | 0:3054baadfda9 | 116 | RPC::call(buf, outbuf); |
jatinsha | 0:3054baadfda9 | 117 | //bluetooth.printf("%s\n", outbuf); |
jatinsha | 0:3054baadfda9 | 118 | bluetoothTriggered = false; |
jatinsha | 0:3054baadfda9 | 119 | } |
jatinsha | 0:3054baadfda9 | 120 | |
jatinsha | 0:3054baadfda9 | 121 | |
jatinsha | 0:3054baadfda9 | 122 | int main() { |
jatinsha | 0:3054baadfda9 | 123 | |
jatinsha | 0:3054baadfda9 | 124 | pc.baud(115200); |
jatinsha | 0:3054baadfda9 | 125 | bluetooth.baud(115200); |
jatinsha | 0:3054baadfda9 | 126 | |
jatinsha | 0:3054baadfda9 | 127 | setup(); |
jatinsha | 0:3054baadfda9 | 128 | compassTicker.attach(&compassTickerCallback, 5); // the address of the function to be attached (flip) and the interval (2 seconds) |
jatinsha | 0:3054baadfda9 | 129 | |
jatinsha | 0:3054baadfda9 | 130 | while(1) { |
jatinsha | 0:3054baadfda9 | 131 | if(pc.readable()) { |
jatinsha | 0:3054baadfda9 | 132 | pc.putc(pc.getc()); |
jatinsha | 0:3054baadfda9 | 133 | } |
jatinsha | 0:3054baadfda9 | 134 | if(bluetooth.readable()) { |
jatinsha | 0:3054baadfda9 | 135 | bluetooth.gets(buf, 256); |
jatinsha | 0:3054baadfda9 | 136 | RPC::call(buf, outbuf); |
jatinsha | 0:3054baadfda9 | 137 | } |
jatinsha | 0:3054baadfda9 | 138 | if(compassTriggered){ |
jatinsha | 0:3054baadfda9 | 139 | compassTickerHandler(); |
jatinsha | 0:3054baadfda9 | 140 | } |
jatinsha | 0:3054baadfda9 | 141 | |
jatinsha | 0:3054baadfda9 | 142 | |
jatinsha | 0:3054baadfda9 | 143 | } |
jatinsha | 0:3054baadfda9 | 144 | } |