Michael Limbird / Mbed 2 deprecated VideoOutput

Dependencies:   mbed

main.cpp

Committer:
mlimbird
Date:
2015-01-11
Revision:
20:03a3357de805
Parent:
19:76632ff3e9fc
Child:
22:dbd5c4af83d6

File content as of revision 20:03a3357de805:

#include "mbed.h"

//Accelerometer addresses
#define ADXL345_ADDRESS_W (0xA6)
#define ADXL345_ADDRESS_R (0xA7)
#define ADXL345_REGISTER_XLSB (0x32)
#define ADXL_REGISTER_PWRCTL (0x2D)
#define ADXL_PWRCTL_MEASURE (0x01 << 3)

//Gyroscope addresses
#define ITG3200_ADDRESS_W (0xD0)
#define ITG3200_ADDRESS_R (0xD1)
#define ITG3200_REGISTER_XMSB (0x1D)
#define ITG3200_REGISTER_DLPF_FS (0x16)
#define ITG3200_FULLSCALE (0x03 << 3)
#define ITG3200_42HZ (0x03)

//3-Axis Digital Compass IC addresses
#define HMC5883_ADDRESS_W (0x3C)
#define HMC5883_ADDRESS_R (0x3D)
#define HMC5883_REGISTER_XMSB (0x03)
#define HMC5883_REGISTER_MEASMODE (0x02)
#define HMC5883_MEASMODE_CONT (0x00)

//establish I2C connections
I2C	i2c( p9, p10 );	// sda, scl

//Declare functions
void init_adxl345();
void read_adxl345();
void init_itg3200();
void read_itg3200();
void init_hmc5883();
void read_hmc5883();

//establish serial communications with computer via usb
Serial pc(USBTX, USBRX); //tx, rx

//arrays to store data from 9DOF
int accelerometer_data[3];
int gyro_data[3];
int magnetometer_data[3];

int main() {

	//initialize each IC
	//init_adxl345();
	init_itg3200();
	//init_hmc5883();
    
    while(1) {        
        //read from each IC
        //read_adxl345();
        read_itg3200();
        //read_hmc5883();
    }
}

//This function initializes the Digital Accelerometer ADXL345
void init_adxl345() {
	char data[2];
	data[0] = ADXL_REGISTER_PWRCTL;
	data[1] = ADXL_PWRCTL_MEASURE;

	i2c.write(ADXL345_ADDRESS_W, data, 2); // first part of data is the register

	i2c.write(ADXL345_ADDRESS_W, data, 1);
	i2c.read(ADXL345_ADDRESS_R, data, 2);
	
	pc.printf("%i\n",(unsigned int)data);
}

void read_adxl345() {
	char bytes[6];
	memset(bytes,0,6);
	bytes[0] = ADXL345_REGISTER_XLSB;
	
	i2c.write(ADXL345_ADDRESS_W, bytes, 1);
	i2c.read(ADXL345_ADDRESS_R, bytes, 6);

	for (int i=0;i<3;++i) {
		accelerometer_data[i] = (int)bytes[2*i] + (((int)bytes[2*i + 1]) << 8);
 	}
 	
 	pc.printf("ACCEL: %i\t%i\t%i", accelerometer_data[0], accelerometer_data[1], accelerometer_data[2]);
}


void init_itg3200() {
	char data[2];
	data[0] = ITG3200_REGISTER_DLPF_FS;
	data[1] = ITG3200_FULLSCALE | ITG3200_42HZ; //bitwise or

	pc.printf("Fullscale : %i, 42HZ : %i\n", ITG3200_FULLSCALE, ITG3200_42HZ);
	pc.printf("Bitwise Or : %i\n", (unsigned int)data[1]);
	
	i2c.write(ITG3200_ADDRESS_W, data,2);
	
	i2c.write(ITG3200_ADDRESS_W, data,1);
	i2c.read(ITG3200_ADDRESS_R, data, 2);

	pc.printf("%i\n",(unsigned int)data);
}

void read_itg3200() {
	char bytes[6];
	memset(bytes,0,6);
	bytes[0] = ITG3200_REGISTER_XMSB;

	i2c.write(ITG3200_ADDRESS_W, bytes, 1);
	i2c.read(ITG3200_ADDRESS_R, bytes, 6);
	
	for (int i=0;i<3;++i) {
		gyro_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8);
	}
	
	pc.printf("GYRO: %i\t%i\t%i", gyro_data[0], gyro_data[1], gyro_data[2]);
}

void init_hmc5883() {
	char data[2];
	data[0] = HMC5883_REGISTER_MEASMODE;
	data[1] = HMC5883_MEASMODE_CONT;
  
	i2c.write(HMC5883_ADDRESS_W, data, 2);
	i2c.read(HMC5883_ADDRESS_R, data, 1);
	
	pc.printf("%i\n",(unsigned int)data);
}

void read_hmc5883() {
	char bytes[6];
	memset(bytes,0,6);
	bytes[0] = HMC5883_REGISTER_XMSB;

	i2c.write(HMC5883_ADDRESS_W, bytes, 1);
	i2c.read(HMC5883_ADDRESS_R, bytes, 6);

	for (int i=0;i<3;++i) {
		magnetometer_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8);
	}
	
	pc.printf("Magnet: %i\t%i\t%i", magnetometer_data[0], magnetometer_data[1], magnetometer_data[2]);
}