k64f_OneNET
Dependencies: EthernetInterface FXOS8700Q eCompass_FPU_Lib mbed-rtos mbed mbed
Fork of K64F_eCompass by
main.cpp
- Committer:
- robert_jw
- Date:
- 2016-06-20
- Revision:
- 5:15c4a67df599
- Parent:
- 4:ad29ae25685c
File content as of revision 5:15c4a67df599:
#include "mbed.h" #include "FXOS8700Q.h" #include "eCompass_Lib.h" #include "rtos.h" //#include "MotionSensorDtypes.h" #include "EthernetInterface.h" FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); FXOS8700Q_mag mag( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); Serial pc(USBTX, USBRX); eCompass compass; DigitalOut red(LED_RED); //debug led DigitalOut green(LED_GREEN); //debug ledeCompass compass; //void calibrate_thread(void const *argument); //void print_thread(void const *argument); //void compass_thread(void const *argument); extern axis6_t axis6; extern uint32_t seconds; extern uint32_t compass_type; // optional, NED compass is default extern int32_t tcount; extern uint8_t cdebug; int l = 0; volatile int sflag = 0; char http_cmd[500]; char devid[] = "1100227"; char api_key[] ="Jl4VyAUUG6j4Qdms3ZyOjbAu6J8="; char host[] = "api.heclouds.com"; EthernetInterface eth; //create ethernet TCPSocketConnection sock; MotionSensorDataCounts mag_raw; MotionSensorDataCounts acc_raw; void hal_map( MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw) { int16_t t; // swap and negate X & Y axis t = acc_raw->x; acc_raw->x = acc_raw->y * -1; acc_raw->y = t * -1; // swap mag X & Y axis t = mag_raw->x; mag_raw->x = mag_raw->y; mag_raw->y = t; // negate mag Z axis mag_raw->z *= -1; } void creat_cmd() { char tmp[30]; char str[100]; sprintf(str,",;roll,%d;pitch,%d;yaw,%d", axis6.roll, axis6.pitch, axis6.yaw); http_cmd[0] = 0; strcat(http_cmd,"POST /devices/"); strcat(http_cmd,devid); strcat(http_cmd,"/datapoints?type=5 HTTP/1.1\r\n"); strcat(http_cmd,"api-key:"); strcat(http_cmd,api_key); strcat(http_cmd,"\r\n"); strcat(http_cmd,"Host:"); strcat(http_cmd,host); strcat(http_cmd,"\r\n"); sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(str)); strcat(http_cmd,tmp); strcat(http_cmd,str); } // // Print data values for debug // void debug_print(void) { // Some useful printf statements for debug printf("roll=%d, pitch=%d, yaw=%d\r\n", axis6.roll, axis6.pitch, axis6.yaw); printf("Acc: X= %2.3f Y= %2.3f Z= %2.3f ", axis6.fGax, axis6.fGay, axis6.fGaz); printf("Mag: X= %4.1f Y= %4.1f Z= %4.1f\r\n\r\n", axis6.fUTmx, axis6.fUTmy, axis6.fUTmz); 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); } void compass_thread(void const *argument) { // get raw data from the sensors acc.getAxis( acc_raw); mag.getAxis( mag_raw); if(tcount) compass.run( acc_raw, mag_raw); // calculate the eCompass if(l++ >= 50) { // take car of business once a second seconds++; sflag = 1; compass.calibrate(); debug_print(); l = 0; if(sock.is_connected()) { green = 0; red = 1; creat_cmd(); sock.send(http_cmd, strlen(http_cmd)); //printf("%s\r\n",http_cmd); } else { green = 1; red = 0; sock.close(); wait(3); printf("IP Address is %s\r\n", eth.getIPAddress()); sock.connect("api.heclouds.com", 80); //connetct to OneNET printf("reconnect the server\r\n"); while(!sock.is_connected()); } } tcount++; } int main() { RtosTimer compass_timer(compass_thread, osTimerPeriodic); /* ethernet init */ eth.init(); //DHCP eth.connect(); printf("IP Address is %s\r\n", eth.getIPAddress()); sock.connect("api.heclouds.com", 80); //connetct to OneNET printf("\r\n\n\n\n\n\n\n"); printf("Who AM I= %X\r\n", acc.whoAmI()); acc.enable(); acc.getAxis( acc_raw); mag.getAxis( mag_raw); compass_timer.start(20); // Run the Compass every 20ms while(1) { //Thread::wait(osWaitForever); /**********receive response data*******************/ char buffer[300]; int ret = 0; buffer[0] = '\0'; if(sock.is_connected()) { ret = sock.receive(buffer, sizeof(buffer)-1); if(ret >= 0) { buffer[ret] = '\0'; } //printf("Received %d chars from server:\r\n%s\r\n", ret, buffer); } else { wait(3); } } }