No changes between revisions
/Designs/Data_loggers/galileo_experiment/IMU3000/LABuino_IMU.pde~ |
---|
--- SW/LABuino_IMU/LABuino_IMU.pde (nonexistent) |
+++ SW/LABuino_IMU/LABuino_IMU.pde (revision 2381) |
@@ -0,0 +1,101 @@ |
+/* IMU Fusion Board - ADXL345 & IMU3000 |
+ Example Arduino Sketch to read the Gyro and Accelerometer Data |
+ |
+ Written by www.hobbytronics.co.uk |
+ See the latest version at www.hobbytronics.co.uk/arduino-adxl345-imu3000 |
+ 08-Apr-2011 |
+*/ |
+ |
+#define GYRO 0x68 // gyro I2C address |
+#define REG_GYRO_X 0x1D // IMU-3000 Register address for GYRO_XOUT_H |
+#define ACCEL 0x53 // Accel I2c Address |
+#define ADXL345_POWER_CTL 0x2D |
+ |
+byte buffer[12]; // Array to store ADC values |
+int gyro_x; |
+int gyro_y; |
+int gyro_z; |
+int accel_x; |
+int accel_y; |
+int accel_z; |
+int i; |
+#include <Wire.h> |
+ |
+void setup() |
+{ |
+ Serial.begin(9600); |
+ |
+ Wire.begin(); |
+ // Set Gyro settings |
+ // Sample Rate 1kHz, Filter Bandwidth 42Hz, Gyro Range 500 d/s |
+ writeTo(GYRO, 0x16, 0x0B); |
+ //set accel register data address |
+ writeTo(GYRO, 0x18, 0x32); |
+ // set accel i2c slave address |
+ writeTo(GYRO, 0x14, ACCEL); |
+ |
+ // Set passthrough mode to Accel so we can turn it on |
+ writeTo(GYRO, 0x3D, 0x08); |
+ // set accel power control to 'measure' |
+ writeTo(ACCEL, ADXL345_POWER_CTL, 8); |
+ //cancel pass through to accel, gyro will now read accel for us |
+ writeTo(GYRO, 0x3D, 0x28); |
+ |
+} |
+ |
+// Write a value to address register on device |
+void writeTo(int device, byte address, byte val) { |
+ Wire.beginTransmission(device); // start transmission to device |
+ Wire.send(address); // send register address |
+ Wire.send(val); // send value to write |
+ Wire.endTransmission(); // end transmission |
+} |
+ |
+void loop() |
+{ |
+ // Read the Gyro X, Y and Z and Accel X, Y and Z all through the gyro |
+ |
+ // First set the register start address for X on Gyro |
+ Wire.beginTransmission(GYRO); |
+ Wire.send(REG_GYRO_X); //Register Address GYRO_XOUT_H |
+ Wire.endTransmission(); |
+ |
+ // New read the 12 data bytes |
+ Wire.beginTransmission(GYRO); |
+ Wire.requestFrom(GYRO,12); // Read 12 bytes |
+ i = 0; |
+ while(Wire.available()) |
+ { |
+ buffer[i] = Wire.receive(); |
+ i++; |
+ } |
+ Wire.endTransmission(); |
+ |
+ //Combine bytes into integers |
+ // Gyro format is MSB first |
+ gyro_x = buffer[0] << 8 | buffer[1]; |
+ gyro_y = buffer[2] << 8 | buffer[3]; |
+ gyro_z = buffer[4] << 8 | buffer[5]; |
+ // Accel is LSB first. Also because of orientation of chips |
+ // accel y output is in same orientation as gyro x |
+ // and accel x is gyro -y |
+ accel_y = buffer[7] << 8 | buffer[6]; |
+ accel_x = buffer[9] << 8 | buffer[8]; |
+ accel_z = buffer[11] << 8 | buffer[10]; |
+ |
+ // Print out what we have |
+ Serial.print(gyro_x); // echo the number received to screen |
+ Serial.print(","); |
+ Serial.print(gyro_y); // echo the number received to screen |
+ Serial.print(","); |
+ Serial.print(gyro_z); // echo the number received to screen |
+ Serial.print(","); |
+ Serial.print(accel_x); // echo the number received to screen |
+ Serial.print(","); |
+ Serial.print(accel_y); // echo the number received to screen |
+ Serial.print(","); |
+ Serial.print(accel_z); // echo the number received to screen |
+ |
+ Serial.println(""); // prints carriage return |
+ delay(400); // wait for a second |
+} |