Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FXOS8700CQ MODSERIAL
Diff: sensors.cpp
- Revision:
- 11:e6602513730f
- Parent:
- 4:f83bedd9cab4
- Child:
- 55:3abf9e3f42e6
diff -r df54436ecd38 -r e6602513730f sensors.cpp
--- a/sensors.cpp Mon Jul 11 23:54:24 2016 +0000
+++ b/sensors.cpp Tue Jul 12 03:11:05 2016 +0000
@@ -5,7 +5,8 @@
#define Si1145_PMOD_I2C_ADDR 0xC0 //this is for 7-bit addr 0x60 for the Si7020
#define Si7020_PMOD_I2C_ADDR 0x80 //this is for 7-bit addr 0x4 for the Si7020
-I2C pmod_i2c(PTC11, PTC10); //SDA, SCL
+#include "hardware.h"
+//I2C i2c(PTC11, PTC10); //SDA, SCL
#include "FXOS8700CQ.h"
// Pin names for the motion sensor FRDM-K64F board:
@@ -28,7 +29,7 @@
unsigned char I2C_ReadSingleByte(unsigned char ucDeviceAddress)
{
char rxbuffer [1];
- pmod_i2c.read(ucDeviceAddress, rxbuffer, 1 );
+ i2c.read(ucDeviceAddress, rxbuffer, 1 );
return (unsigned char)rxbuffer[0];
} //I2C_ReadSingleByte()
@@ -40,8 +41,8 @@
char txbuffer [1];
char rxbuffer [1];
txbuffer[0] = (char)Addr;
- pmod_i2c.write(ucDeviceAddress, txbuffer, 1 );
- pmod_i2c.read(ucDeviceAddress, rxbuffer, 1 );
+ i2c.write(ucDeviceAddress, txbuffer, 1 );
+ i2c.read(ucDeviceAddress, rxbuffer, 1 );
return (unsigned char)rxbuffer[0];
} //I2C_ReadSingleByteFromAddr()
@@ -51,7 +52,7 @@
int I2C_ReadMultipleBytes(unsigned char ucDeviceAddress, char *ucData, unsigned char ucLength)
{
int status;
- status = pmod_i2c.read(ucDeviceAddress, ucData, ucLength);
+ status = i2c.read(ucDeviceAddress, ucData, ucLength);
return status;
} //I2C_ReadMultipleBytes()
@@ -63,7 +64,7 @@
int status;
char txbuffer [1];
txbuffer[0] = (char)Data; //data
- status = pmod_i2c.write(ucDeviceAddress, txbuffer, 1, !bSendStop); //true: do not send stop
+ status = i2c.write(ucDeviceAddress, txbuffer, 1, !bSendStop); //true: do not send stop
return status;
} //I2C_WriteSingleByte()
@@ -76,8 +77,8 @@
char txbuffer [2];
txbuffer[0] = (char)Addr; //address
txbuffer[1] = (char)Data; //data
- //status = pmod_i2c.write(ucDeviceAddress, txbuffer, 2, false); //stop at end
- status = pmod_i2c.write(ucDeviceAddress, txbuffer, 2, !bSendStop); //true: do not send stop
+ //status = i2c.write(ucDeviceAddress, txbuffer, 2, false); //stop at end
+ status = i2c.write(ucDeviceAddress, txbuffer, 2, !bSendStop); //true: do not send stop
return status;
} //I2C_WriteSingleByteToAddr()
@@ -87,7 +88,7 @@
int I2C_WriteMultipleBytes(unsigned char ucDeviceAddress, char *ucData, unsigned char ucLength, bool bSendStop)
{
int status;
- status = pmod_i2c.write(ucDeviceAddress, ucData, ucLength, !bSendStop); //true: do not send stop
+ status = i2c.write(ucDeviceAddress, ucData, ucLength, !bSendStop); //true: do not send stop
return status;
} //I2C_WriteMultipleBytes()
@@ -310,34 +311,49 @@
//********************************************************************************************************************************************
//* Read the FXOS8700CQ - 6-axis combo Sensor Accelerometer and Magnetometer
//********************************************************************************************************************************************
-void read_motion_sensor()
-{
- fxos.get_data(&accel_data, &magn_data);
- //printf("Roll=%5d, Pitch=%5d, Yaw=%5d;\r\n", magn_data.x, magn_data.y, magn_data.z);
- sprintf(SENSOR_DATA.MagnetometerX, "%5d", magn_data.x);
- sprintf(SENSOR_DATA.MagnetometerY, "%5d", magn_data.y);
- sprintf(SENSOR_DATA.MagnetometerZ, "%5d", magn_data.z);
-
- //Try to normalize (/2048) the values so they will match the eCompass output:
- float fAccelScaled_x, fAccelScaled_y, fAccelScaled_z;
- fAccelScaled_x = (accel_data.x/2048.0);
- fAccelScaled_y = (accel_data.y/2048.0);
- fAccelScaled_z = (accel_data.z/2048.0);
- //printf("Acc: X=%2.3f Y=%2.3f Z=%2.3f;\r\n", fAccelScaled_x, fAccelScaled_y, fAccelScaled_z);
- sprintf(SENSOR_DATA.AccelX, "%2.3f", fAccelScaled_x);
- sprintf(SENSOR_DATA.AccelY, "%2.3f", fAccelScaled_y);
- sprintf(SENSOR_DATA.AccelZ, "%2.3f", fAccelScaled_z);
-} //read_motion_sensor
-
+bool bMotionSensor_present = false;
void init_motion_sensor()
{
- printf("FXOS8700CQ WhoAmI = %X\r\n", fxos.get_whoami());
+ int iWhoAmI = fxos.get_whoami();
+
+ printf("FXOS8700CQ WhoAmI = %X\r\n", iWhoAmI);
// Iterrupt for active-low interrupt line from FXOS
// Configured with only one interrupt on INT2 signaling Data-Ready
//fxos_int2.fall(&trigger_fxos_int2);
- fxos.enable();
+ if (iWhoAmI != 0xC7)
+ {
+ bMotionSensor_present = false;
+ printf("FXOS8700CQ motion sensor not found\n");
+ }
+ else
+ {
+ bMotionSensor_present = true;
+ fxos.enable();
+ }
} //init_motion_sensor
+void read_motion_sensor()
+{
+ if (bMotionSensor_present)
+ {
+ fxos.get_data(&accel_data, &magn_data);
+ //printf("Roll=%5d, Pitch=%5d, Yaw=%5d;\r\n", magn_data.x, magn_data.y, magn_data.z);
+ sprintf(SENSOR_DATA.MagnetometerX, "%5d", magn_data.x);
+ sprintf(SENSOR_DATA.MagnetometerY, "%5d", magn_data.y);
+ sprintf(SENSOR_DATA.MagnetometerZ, "%5d", magn_data.z);
+
+ //Try to normalize (/2048) the values so they will match the eCompass output:
+ float fAccelScaled_x, fAccelScaled_y, fAccelScaled_z;
+ fAccelScaled_x = (accel_data.x/2048.0);
+ fAccelScaled_y = (accel_data.y/2048.0);
+ fAccelScaled_z = (accel_data.z/2048.0);
+ //printf("Acc: X=%2.3f Y=%2.3f Z=%2.3f;\r\n", fAccelScaled_x, fAccelScaled_y, fAccelScaled_z);
+ sprintf(SENSOR_DATA.AccelX, "%2.3f", fAccelScaled_x);
+ sprintf(SENSOR_DATA.AccelY, "%2.3f", fAccelScaled_y);
+ sprintf(SENSOR_DATA.AccelZ, "%2.3f", fAccelScaled_z);
+ } //bMotionSensor_present
+} //read_motion_sensor
+
void sensors_init(void)
{
Init_Si7020();