RaheeNew nonblocking

Dependencies:   RaheeNew LinkedList mbed-rpc mbed-rtos mbed

Committer:
jatinsha
Date:
Sat Nov 28 10:08:18 2015 +0000
Revision:
0:3054baadfda9
js

Who changed what in which revision?

UserRevisionLine numberNew 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 }