#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP085_U.h> #include <Adafruit_L3GD20_U.h> #include <LSM303.h> Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); Adafruit_L3GD20_Unified gyro = Adafruit_L3GD20_Unified(20); LSM303 compass; void displaySensorDetails(void) { sensor_t sensor; bmp.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" hPa"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" hPa"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" hPa"); Serial.println("------------------------------------"); Serial.println(""); gyro.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" rad/s"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" rad/s"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" rad/s"); Serial.println("------------------------------------"); Serial.println(""); delay(500); } void setup(void) { Serial.begin(9600); Serial.println("Pressure Sensor Test"); Serial.println(""); Wire.begin(); /* Initialise the sensor */ if(!bmp.begin()) { /* There was a problem detecting the BMP085 ... check your connections */ Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!"); while(1); } /* Initialise the sensor */ if(!gyro.begin()) { /* There was a problem detecting the L3GD20 ... check your connections */ Serial.println("Ooops, no L3GD20 detected ... Check your wiring!"); while(1); } /* Enable auto-ranging */ gyro.enableAutoRange(true); /* Initialise the sensor */ compass.init(); compass.enableDefault(); /* Display some basic information on this sensor */ displaySensorDetails(); } void loop(void) { /* Get a new sensor event */ sensors_event_t event; bmp.getEvent(&event); /* Display the results (barometric pressure is measure in hPa) */ if (event.pressure) { /* Display atmospheric pressue in hPa */ Serial.print("Pressure: "); Serial.print(event.pressure); Serial.println(" hPa"); /* Calculating altitude with reasonable accuracy requires pressure * * sea level pressure for your position at the moment the data is * * converted, as well as the ambient temperature in degress * * celcius. If you don't have these values, a 'generic' value of * * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA * * in sensors.h), but this isn't ideal and will give variable * * results from one day to the next. * * * * You can usually find the current SLP value by looking at weather * * websites or from environmental information centers near any major * * airport. * * * * For example, for Paris, France you can check the current mean * * pressure and sea level at: http://bit.ly/16Au8ol */ /* First we get the current temperature from the BMP085 */ float temperature; bmp.getTemperature(&temperature); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" C"); /* Then convert the atmospheric pressure, and SLP to altitude */ /* Update this next line with the current SLP for better results */ float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; Serial.print("Altitude: "); Serial.print(bmp.pressureToAltitude(seaLevelPressure, event.pressure)); Serial.println(" m"); Serial.println(""); } else { Serial.println("Sensor error"); } gyro.getEvent(&event); /* Display the results (speed is measured in rad/s) */ Serial.print("X: "); Serial.print(event.gyro.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.gyro.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.gyro.z); Serial.print(" "); Serial.println("rad/s "); compass.read(); /* Display the results (acceleration is measured in m/s^2) */ Serial.print("X: "); Serial.print(compass.a.x); Serial.print(" "); Serial.print("Y: "); Serial.print(compass.a.y); Serial.print(" "); Serial.print("Z: "); Serial.print(compass.a.z); Serial.print(" ");Serial.println("m/s^2 "); /* Display the results (magnetic vector values are in micro-Tesla (uT)) */ Serial.print("X: "); Serial.print(compass.m.x); Serial.print(" "); Serial.print("Y: "); Serial.print(compass.m.y); Serial.print(" "); Serial.print("Z: "); Serial.print(compass.m.z); Serial.print(" ");Serial.println("uT"); delay(1000); }