![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
FRDM-K64F, Avnet M14A2A, Grove Shield, to create smart home system. In use with AT&Ts M2x & Flow.
Dependencies: mbed FXOS8700CQ MODSERIAL
Diff: sensors.cpp
- Revision:
- 69:5a3414cc7531
- Parent:
- 68:6e311c747045
- Child:
- 70:24d5800f27be
diff -r 6e311c747045 -r 5a3414cc7531 sensors.cpp --- a/sensors.cpp Thu Aug 11 00:03:09 2016 +0000 +++ b/sensors.cpp Thu Aug 11 04:38:02 2016 +0000 @@ -18,8 +18,10 @@ #include "mbed.h" #include "sensors.h" #include "hardware.h" +#include "config_me.h" #include "FXOS8700CQ.h" #include "HTS221.h" +#include "xadow_gps.h" #include <string> //I2C for pmod sensors: @@ -419,6 +421,78 @@ } //bHTS221_present } //Read_HTS221() +bool bGPS_present = false; +void Init_GPS(void) +{ + char scan_id[GPS_SCAN_SIZE+2]; //The first two bytes are the response length (0x00, 0x04) + I2C_WriteSingleByte(GPS_DEVICE_ADDR, GPS_SCAN_ID, false); //no hold, must do read + + unsigned char i; + for(i=0;i<(GPS_SCAN_SIZE+2);i++) + { + scan_id[i] = I2C_ReadSingleByte(GPS_DEVICE_ADDR); + } + + if(scan_id[5] != GPS_DEVICE_ID) + { + bGPS_present = false; + PRINTF("Xadow GPS not found\n"); + } + else + { + bGPS_present = true; + PRINTF("Xadow GPS Scan ID response = 0x%02X%02X (length), 0x%02X%02X%02X%02X\r\n", scan_id[0], scan_id[1], scan_id[2], scan_id[3], scan_id[4], scan_id[5]); + char status = gps_get_status(); + if (iSensorsToReport == TEMP_HUMIDITY_ACCELEROMETER_GPS) + { //we must wait for GPS to initialize + PRINTF("Waiting for GPS to become ready... "); + while (status != 'A') + { + wait (5.0); + char status = gps_get_status(); + unsigned char num_satellites = gps_get_sate_in_veiw(); + PRINTF("%c%d", status, num_satellites); + } + PRINTF("\r\n"); + } //we must wait for GPS to initialize + PRINTF("gps_check_online is %d\r\n", gps_check_online()); + unsigned char *data; + data = gps_get_utc_date_time(); + PRINTF("gps_get_utc_date_time : %d-%d-%d,%d:%d:%d\r\n", data[0], data[1], data[2], data[3], data[4], data[5]); + PRINTF("gps_get_status : %c ('A' = Valid, 'V' = Invalid)\r\n", gps_get_status()); + PRINTF("gps_get_latitude : %c:%f\r\n", gps_get_ns(), gps_get_latitude()); + PRINTF("gps_get_longitude : %c:%f\r\n", gps_get_ew(), gps_get_longitude()); + PRINTF("gps_get_altitude : %f meters\r\n", gps_get_altitude()); + PRINTF("gps_get_speed : %f knots\r\n", gps_get_speed()); + PRINTF("gps_get_course : %f degrees\r\n", gps_get_course()); + PRINTF("gps_get_position_fix : %c\r\n", gps_get_position_fix()); + PRINTF("gps_get_sate_in_view : %d satellites\r\n", gps_get_sate_in_veiw()); + PRINTF("gps_get_sate_used : %d\r\n", gps_get_sate_used()); + PRINTF("gps_get_mode : %c ('A' = Automatic, 'M' = Manual)\r\n", gps_get_mode()); + PRINTF("gps_get_mode2 : %c ('1' = no fix, '1' = 2D fix, '3' = 3D fix)\r\n", gps_get_mode2()); + } //bool bGPS_present = true +} //Init_GPS() + +void Read_GPS() +{ + unsigned char gps_quality = 0; //default + if (bGPS_present) + { + if ((gps_get_status() == 'A') && (gps_get_mode2() != '1')) + { + gps_quality = 1; + } + PRINTF("gps_quality : %d\r\n", gps_quality); + PRINTF("gps_get_latitude : %c:%f\r\n", gps_get_ns(), gps_get_latitude()); + PRINTF("gps_get_longitude : %c:%f\r\n", gps_get_ew(), gps_get_longitude()); + PRINTF("gps_get_altitude : %f meters\r\n", gps_get_altitude()); + PRINTF("gps_get_speed : %f knots\r\n", gps_get_speed()); + PRINTF("gps_get_course : %f degrees\r\n", gps_get_course()); + //sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature())); + //sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity()); + } //bGPS_present +} //Read_GPS() + #ifdef USE_VIRTUAL_SENSORS bool bUsbConnected = false; volatile uint8_t usb_uart_rx_buff[256]; @@ -558,6 +632,7 @@ Init_Si7020(); Init_Si1145(); Init_motion_sensor(); + Init_GPS(); } //sensors_init void read_sensors(void) @@ -566,4 +641,5 @@ Read_Si7020(); Read_Si1145(); Read_motion_sensor(); + Read_GPS(); } //read_sensors