k64f_OneNET
Dependencies: EthernetInterface FXOS8700Q eCompass_FPU_Lib mbed-rtos mbed mbed
Fork of K64F_eCompass by
main.cpp@5:15c4a67df599, 2016-06-20 (annotated)
- Committer:
- robert_jw
- Date:
- Mon Jun 20 01:42:23 2016 +0000
- Revision:
- 5:15c4a67df599
- Parent:
- 4:ad29ae25685c
gSensor-OneNET
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JimCarver | 0:32e37c82ef4a | 1 | #include "mbed.h" |
JimCarver | 0:32e37c82ef4a | 2 | #include "FXOS8700Q.h" |
JimCarver | 0:32e37c82ef4a | 3 | #include "eCompass_Lib.h" |
JimCarver | 0:32e37c82ef4a | 4 | #include "rtos.h" |
JimCarver | 2:51f3303cbefd | 5 | //#include "MotionSensorDtypes.h" |
robert_jw | 4:ad29ae25685c | 6 | #include "EthernetInterface.h" |
JimCarver | 0:32e37c82ef4a | 7 | |
JimCarver | 0:32e37c82ef4a | 8 | |
JimCarver | 2:51f3303cbefd | 9 | FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); |
JimCarver | 2:51f3303cbefd | 10 | FXOS8700Q_mag mag( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); |
JimCarver | 0:32e37c82ef4a | 11 | Serial pc(USBTX, USBRX); |
JimCarver | 0:32e37c82ef4a | 12 | eCompass compass; |
robert_jw | 4:ad29ae25685c | 13 | DigitalOut red(LED_RED); //debug led |
robert_jw | 4:ad29ae25685c | 14 | DigitalOut green(LED_GREEN); //debug ledeCompass compass; |
JimCarver | 0:32e37c82ef4a | 15 | |
JimCarver | 2:51f3303cbefd | 16 | //void calibrate_thread(void const *argument); |
JimCarver | 2:51f3303cbefd | 17 | //void print_thread(void const *argument); |
JimCarver | 2:51f3303cbefd | 18 | //void compass_thread(void const *argument); |
JimCarver | 2:51f3303cbefd | 19 | |
JimCarver | 0:32e37c82ef4a | 20 | extern axis6_t axis6; |
JimCarver | 0:32e37c82ef4a | 21 | extern uint32_t seconds; |
JimCarver | 0:32e37c82ef4a | 22 | extern uint32_t compass_type; // optional, NED compass is default |
JimCarver | 0:32e37c82ef4a | 23 | extern int32_t tcount; |
JimCarver | 0:32e37c82ef4a | 24 | extern uint8_t cdebug; |
JimCarver | 0:32e37c82ef4a | 25 | int l = 0; |
JimCarver | 2:51f3303cbefd | 26 | volatile int sflag = 0; |
JimCarver | 0:32e37c82ef4a | 27 | |
robert_jw | 4:ad29ae25685c | 28 | char http_cmd[500]; |
robert_jw | 4:ad29ae25685c | 29 | char devid[] = "1100227"; |
robert_jw | 4:ad29ae25685c | 30 | char api_key[] ="Jl4VyAUUG6j4Qdms3ZyOjbAu6J8="; |
robert_jw | 4:ad29ae25685c | 31 | char host[] = "api.heclouds.com"; |
robert_jw | 4:ad29ae25685c | 32 | |
robert_jw | 4:ad29ae25685c | 33 | EthernetInterface eth; //create ethernet |
robert_jw | 4:ad29ae25685c | 34 | TCPSocketConnection sock; |
robert_jw | 4:ad29ae25685c | 35 | |
JimCarver | 2:51f3303cbefd | 36 | MotionSensorDataCounts mag_raw; |
JimCarver | 2:51f3303cbefd | 37 | MotionSensorDataCounts acc_raw; |
JimCarver | 2:51f3303cbefd | 38 | |
robert_jw | 4:ad29ae25685c | 39 | |
JimCarver | 2:51f3303cbefd | 40 | void hal_map( MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw) |
JimCarver | 0:32e37c82ef4a | 41 | { |
JimCarver | 0:32e37c82ef4a | 42 | int16_t t; |
JimCarver | 0:32e37c82ef4a | 43 | // swap and negate X & Y axis |
JimCarver | 2:51f3303cbefd | 44 | t = acc_raw->x; |
JimCarver | 2:51f3303cbefd | 45 | acc_raw->x = acc_raw->y * -1; |
JimCarver | 2:51f3303cbefd | 46 | acc_raw->y = t * -1; |
JimCarver | 0:32e37c82ef4a | 47 | // swap mag X & Y axis |
JimCarver | 2:51f3303cbefd | 48 | t = mag_raw->x; |
JimCarver | 2:51f3303cbefd | 49 | mag_raw->x = mag_raw->y; |
JimCarver | 2:51f3303cbefd | 50 | mag_raw->y = t; |
JimCarver | 0:32e37c82ef4a | 51 | // negate mag Z axis |
JimCarver | 2:51f3303cbefd | 52 | mag_raw->z *= -1; |
JimCarver | 0:32e37c82ef4a | 53 | } |
JimCarver | 0:32e37c82ef4a | 54 | |
robert_jw | 4:ad29ae25685c | 55 | void creat_cmd() |
robert_jw | 4:ad29ae25685c | 56 | { |
robert_jw | 4:ad29ae25685c | 57 | char tmp[30]; |
robert_jw | 4:ad29ae25685c | 58 | char str[100]; |
robert_jw | 4:ad29ae25685c | 59 | |
robert_jw | 4:ad29ae25685c | 60 | sprintf(str,",;roll,%d;pitch,%d;yaw,%d", axis6.roll, axis6.pitch, axis6.yaw); |
robert_jw | 4:ad29ae25685c | 61 | http_cmd[0] = 0; |
robert_jw | 4:ad29ae25685c | 62 | strcat(http_cmd,"POST /devices/"); |
robert_jw | 4:ad29ae25685c | 63 | strcat(http_cmd,devid); |
robert_jw | 4:ad29ae25685c | 64 | strcat(http_cmd,"/datapoints?type=5 HTTP/1.1\r\n"); |
robert_jw | 4:ad29ae25685c | 65 | strcat(http_cmd,"api-key:"); |
robert_jw | 4:ad29ae25685c | 66 | strcat(http_cmd,api_key); |
robert_jw | 4:ad29ae25685c | 67 | strcat(http_cmd,"\r\n"); |
robert_jw | 4:ad29ae25685c | 68 | strcat(http_cmd,"Host:"); |
robert_jw | 4:ad29ae25685c | 69 | strcat(http_cmd,host); |
robert_jw | 4:ad29ae25685c | 70 | strcat(http_cmd,"\r\n"); |
robert_jw | 4:ad29ae25685c | 71 | sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(str)); |
robert_jw | 4:ad29ae25685c | 72 | strcat(http_cmd,tmp); |
robert_jw | 4:ad29ae25685c | 73 | strcat(http_cmd,str); |
robert_jw | 4:ad29ae25685c | 74 | } |
robert_jw | 4:ad29ae25685c | 75 | |
JimCarver | 0:32e37c82ef4a | 76 | // |
JimCarver | 0:32e37c82ef4a | 77 | // Print data values for debug |
JimCarver | 0:32e37c82ef4a | 78 | // |
JimCarver | 0:32e37c82ef4a | 79 | void debug_print(void) |
JimCarver | 0:32e37c82ef4a | 80 | { |
JimCarver | 0:32e37c82ef4a | 81 | // Some useful printf statements for debug |
JimCarver | 0:32e37c82ef4a | 82 | printf("roll=%d, pitch=%d, yaw=%d\r\n", axis6.roll, axis6.pitch, axis6.yaw); |
JimCarver | 0:32e37c82ef4a | 83 | printf("Acc: X= %2.3f Y= %2.3f Z= %2.3f ", axis6.fGax, axis6.fGay, axis6.fGaz); |
JimCarver | 0:32e37c82ef4a | 84 | printf("Mag: X= %4.1f Y= %4.1f Z= %4.1f\r\n\r\n", axis6.fUTmx, axis6.fUTmy, axis6.fUTmz); |
JimCarver | 0:32e37c82ef4a | 85 | printf("Quaternion: Q0= %1.4f Q1= %1.4f Q2= %1.4f Q3= %1.4f\r\n\r\n", axis6.q0, axis6.q1, axis6.q2, axis6.q3); |
JimCarver | 0:32e37c82ef4a | 86 | } |
JimCarver | 0:32e37c82ef4a | 87 | |
JimCarver | 0:32e37c82ef4a | 88 | |
robert_jw | 4:ad29ae25685c | 89 | void compass_thread(void const *argument) |
robert_jw | 4:ad29ae25685c | 90 | { |
JimCarver | 0:32e37c82ef4a | 91 | // get raw data from the sensors |
JimCarver | 2:51f3303cbefd | 92 | acc.getAxis( acc_raw); |
JimCarver | 2:51f3303cbefd | 93 | mag.getAxis( mag_raw); |
JimCarver | 0:32e37c82ef4a | 94 | if(tcount) compass.run( acc_raw, mag_raw); // calculate the eCompass |
robert_jw | 4:ad29ae25685c | 95 | if(l++ >= 50) |
robert_jw | 4:ad29ae25685c | 96 | { |
robert_jw | 4:ad29ae25685c | 97 | // take car of business once a second |
JimCarver | 0:32e37c82ef4a | 98 | seconds++; |
JimCarver | 2:51f3303cbefd | 99 | sflag = 1; |
JimCarver | 2:51f3303cbefd | 100 | compass.calibrate(); |
JimCarver | 3:d6404f10bd3b | 101 | debug_print(); |
JimCarver | 0:32e37c82ef4a | 102 | l = 0; |
robert_jw | 4:ad29ae25685c | 103 | |
robert_jw | 4:ad29ae25685c | 104 | if(sock.is_connected()) |
robert_jw | 4:ad29ae25685c | 105 | { |
robert_jw | 4:ad29ae25685c | 106 | green = 0; |
robert_jw | 4:ad29ae25685c | 107 | red = 1; |
robert_jw | 4:ad29ae25685c | 108 | creat_cmd(); |
robert_jw | 4:ad29ae25685c | 109 | sock.send(http_cmd, strlen(http_cmd)); |
robert_jw | 4:ad29ae25685c | 110 | //printf("%s\r\n",http_cmd); |
JimCarver | 0:32e37c82ef4a | 111 | } |
robert_jw | 4:ad29ae25685c | 112 | else |
robert_jw | 4:ad29ae25685c | 113 | { |
robert_jw | 4:ad29ae25685c | 114 | green = 1; |
robert_jw | 4:ad29ae25685c | 115 | red = 0; |
robert_jw | 4:ad29ae25685c | 116 | sock.close(); |
robert_jw | 4:ad29ae25685c | 117 | |
robert_jw | 4:ad29ae25685c | 118 | wait(3); |
robert_jw | 4:ad29ae25685c | 119 | |
robert_jw | 4:ad29ae25685c | 120 | printf("IP Address is %s\r\n", eth.getIPAddress()); |
robert_jw | 4:ad29ae25685c | 121 | sock.connect("api.heclouds.com", 80); //connetct to OneNET |
robert_jw | 4:ad29ae25685c | 122 | |
robert_jw | 4:ad29ae25685c | 123 | printf("reconnect the server\r\n"); |
robert_jw | 4:ad29ae25685c | 124 | while(!sock.is_connected()); |
robert_jw | 4:ad29ae25685c | 125 | } |
robert_jw | 4:ad29ae25685c | 126 | |
robert_jw | 4:ad29ae25685c | 127 | } |
JimCarver | 0:32e37c82ef4a | 128 | tcount++; |
JimCarver | 0:32e37c82ef4a | 129 | } |
JimCarver | 0:32e37c82ef4a | 130 | |
JimCarver | 2:51f3303cbefd | 131 | |
robert_jw | 4:ad29ae25685c | 132 | int main() |
robert_jw | 4:ad29ae25685c | 133 | { |
robert_jw | 4:ad29ae25685c | 134 | RtosTimer compass_timer(compass_thread, osTimerPeriodic); |
robert_jw | 4:ad29ae25685c | 135 | |
robert_jw | 4:ad29ae25685c | 136 | /* ethernet init */ |
robert_jw | 4:ad29ae25685c | 137 | eth.init(); //DHCP |
robert_jw | 4:ad29ae25685c | 138 | eth.connect(); |
robert_jw | 4:ad29ae25685c | 139 | printf("IP Address is %s\r\n", eth.getIPAddress()); |
robert_jw | 4:ad29ae25685c | 140 | sock.connect("api.heclouds.com", 80); //connetct to OneNET |
JimCarver | 3:d6404f10bd3b | 141 | |
robert_jw | 4:ad29ae25685c | 142 | printf("\r\n\n\n\n\n\n\n"); |
robert_jw | 4:ad29ae25685c | 143 | printf("Who AM I= %X\r\n", acc.whoAmI()); |
robert_jw | 4:ad29ae25685c | 144 | acc.enable(); |
robert_jw | 4:ad29ae25685c | 145 | |
robert_jw | 4:ad29ae25685c | 146 | acc.getAxis( acc_raw); |
robert_jw | 4:ad29ae25685c | 147 | mag.getAxis( mag_raw); |
robert_jw | 4:ad29ae25685c | 148 | |
robert_jw | 4:ad29ae25685c | 149 | compass_timer.start(20); // Run the Compass every 20ms |
robert_jw | 4:ad29ae25685c | 150 | while(1) |
robert_jw | 4:ad29ae25685c | 151 | { |
robert_jw | 4:ad29ae25685c | 152 | //Thread::wait(osWaitForever); |
robert_jw | 4:ad29ae25685c | 153 | /**********receive response data*******************/ |
robert_jw | 4:ad29ae25685c | 154 | char buffer[300]; |
robert_jw | 4:ad29ae25685c | 155 | int ret = 0; |
robert_jw | 4:ad29ae25685c | 156 | buffer[0] = '\0'; |
robert_jw | 4:ad29ae25685c | 157 | if(sock.is_connected()) |
robert_jw | 4:ad29ae25685c | 158 | { |
robert_jw | 4:ad29ae25685c | 159 | ret = sock.receive(buffer, sizeof(buffer)-1); |
robert_jw | 4:ad29ae25685c | 160 | if(ret >= 0) |
robert_jw | 4:ad29ae25685c | 161 | { |
robert_jw | 4:ad29ae25685c | 162 | buffer[ret] = '\0'; |
robert_jw | 4:ad29ae25685c | 163 | } |
robert_jw | 4:ad29ae25685c | 164 | //printf("Received %d chars from server:\r\n%s\r\n", ret, buffer); |
robert_jw | 4:ad29ae25685c | 165 | } |
robert_jw | 4:ad29ae25685c | 166 | else |
robert_jw | 4:ad29ae25685c | 167 | { |
robert_jw | 4:ad29ae25685c | 168 | wait(3); |
robert_jw | 4:ad29ae25685c | 169 | } |
JimCarver | 2:51f3303cbefd | 170 | } |
JimCarver | 0:32e37c82ef4a | 171 | } |