Accelerometers and LCD Display

Hello all,
Just joined and this is my first post.
I'm trying to do something that I thought would be a lot more simple, but I'm now thoroughly confused after looking at some example codes, so hoping someone with more experience can help me out.

I'm just starting to learn coding and have the following materials available right now:
1- Arduino Micro
2- TWO triple access accelerometer breakouts (Triple Axis Accelerometer Breakout - MMA8452Q - SEN-10955 - SparkFun Electronics)
2- one 16x2 LCD display (Serial Enabled 16x2 LCD - Black on Green 5V - LCD-09393 - SparkFun Electronics)

Here's what I want to do:
Take in the x- and y-axis acceleration values from both accelerometers.
Calculate for both accelerometers the total acceleration magnitude: a=sqrt(x^2 + y^2)
Print the x- and y-axis acceleration values on the first line of the display: "x1:## y1:## x2:## y2:##"
Print the magnitude calculations on the second line of the display: "Mag1:## Mag2:##"

That's it. No, it doesn't really serve any purpose, but just an exercise to figure out how the accelerometers work, how to input the values, and how to output something to the display.
I figured this would be a good way of see how they work and I'm sure the code can be modified for something useful in the future.

Thanks to anyone who can help!

2- TWO triple access accelerometer breakouts

Are they anything like triple axis accelerometers?

Here's what I want to do:

Sounds easy. What have you actually accomplished?

PaulS:

2- TWO triple access accelerometer breakouts

Are they anything like triple axis accelerometers?

I think they're fairly similar.

Here's what I have so far.
It's basically just a copy of the example code for the accelerometer with a couple calculations that print out to the display...
The problem I'm running into is how to attach TWO of the triple axle accelerometers.

/*
Acclerometer Code Used (modified for LCD Display):
MMA8452Q Basic Example Code
Nathan Seidle
SparkFun Electronics
November 5, 2012

License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

This example code shows how to read the X/Y/Z accelerations and basic functions of the MMA5842. It leaves out
all the neat features this IC is capable of (tap, orientation, and inerrupts) and just displays X/Y/Z. See
the advanced example code to see more features.

Hardware setup:
MMA8452 Breakout ------------ Arduino
3.3V --------------------- 3.3V
SDA -------^^(330)^^------- A4
SCL -------^^(330)^^------- A5
GND ---------------------- GND

The MMA8452 is 3.3V so we recommend using 330 or 1k resistors between a 5V Arduino and the MMA8452 breakout.

The MMA8452 has built in pull-up resistors for I2C so you do not need additional pull-ups.
*/

#include <Wire.h> // Used for I2C

// Use the softwareserial library to create a new "soft" serial port
// for the display. This prevents display corruption when uploading code.
#include <SoftwareSerial.h>

// Attach the serial display's RX line to digital pin 2
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)

// The SparkFun breakout board defaults to 1, set to 0 if SA0 jumper on the bottom of the board is set
#define MMA8452_ADDRESS 0x1D // 0x1D if SA0 is high, 0x1C if low

//Define a few of the registers that we will be accessing on the MMA8452
#define OUT_X_MSB 0x01
#define XYZ_DATA_CFG 0x0E
#define WHO_AM_I 0x0D
#define CTRL_REG1 0x2A

#define GSCALE 2 // Sets full-scale range to +/-2, 4, or 8g. Used to calc real g values.

void setup()
{
Serial.begin(57600);
Serial.println("MMA8452 Basic Example");

Wire.begin(); //Join the bus as a master

initMMA8452(); //Test and intialize the MMA8452

mySerial.begin(9600); // set up serial port for 9600 baud
delay(500); // wait for display to boot up

}

void loop()
{
int accelCount[3]; // Stores the 12-bit signed value
readAccelData(accelCount); // Read the x/y/z adc values

// Now we'll calculate the accleration value into actual g's
float accelG[3]; // Stores the real accel value in g's
for (int i = 0 ; i < 3 ; i++)
{
accelG = (float) accelCount / ((1<<12)/(2*GSCALE)); // get actual g value, this depends on scale being set
* }*
//Calculations
float X = accelG[1];
float Y = accelG[2];
float Z = accelG[3];
float a = sqrt(pow(X,2) + pow(Y,2) + pow(Z,2));
* Serial.println();*
* mySerial.print(254); // move cursor to beginning of first line*
* mySerial.print(128);*
* mySerial.print(" "); // clear display*
* mySerial.print(" ");*
* mySerial.print(254); // move cursor to beginning of first line*
* mySerial.print(128);*
* mySerial.print("X");*
* mySerial.print(X);*
* mySerial.print(ā€œ Yā€); //*
* mySerial.print(Y);*
* mySerial.print(ā€œ Zā€); //*
* mySerial.print(Z);*
* mySerial.print(254); // move cursor to beginning of second line*
* mySerial.print(192);*
* mySerial.print("Mag ");*
* mySerial.print(a);*
* delay(100); // Delay here for visibility*
}
void readAccelData(int *destination)
{
* byte rawData[6]; // x/y/z accel register data stored here*
* readRegisters(OUT_X_MSB, 6, rawData); // Read the six raw data registers into data array*
* // Loop to calculate 12-bit ADC and g value for each axis*
* for(int i = 0; i < 3 ; i++)*
* {*
_ int gCount = (rawData[i*2] << 8) | rawData[(i2)+1]; //Combine the two 8 bit registers into one 12-bit number_
_
gCount >>= 4; //The registers are left align, here we right align the 12-bit integer*_
* // If the number is negative, we have to make it so manually (no 12-bit data type)*
_ if (rawData[i*2] > 0x7F)
* { *
* gCount = ~gCount + 1;*
gCount = -1; // Transform into negative 2's complement #_
_
}_
_ destination = gCount; //Record this gCount into the 3 int array
}
}
// Initialize the MMA8452 registers*
// See the many application notes for more info on setting all of these registers:
// http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MMA8452Q
void initMMA8452()
{
* byte c = readRegister(WHO_AM_I); // Read WHO_AM_I register*
* if (c == 0x2A) // WHO_AM_I should always be 0x2A*
* {
Serial.println("MMA8452Q is online...");
}
else*
* {
Serial.print("Could not connect to MMA8452Q: 0x");
Serial.println(c, HEX);
while(1) ; // Loop forever if communication doesn't happen*
* }
MMA8452Standby(); // Must be in standby to change registers*
* // Set up the full scale range to 2, 4, or 8g.
byte fsr = GSCALE;
if(fsr > 8) fsr = 8; //Easy error check*
* fsr >>= 2; // Neat trick, see page 22. 00 = 2G, 01 = 4A, 10 = 8G*
* writeRegister(XYZ_DATA_CFG, fsr);*
* //The default data rate is 800Hz and we don't modify it in this example code*
* MMA8452Active(); // Set to active to start reading*
}
// Sets the MMA8452 to standby mode. It must be in standby to change most register settings
void MMA8452Standby()
{
* byte c = readRegister(CTRL_REG1);
writeRegister(CTRL_REG1, c & ~(0x01)); //Clear the active bit to go into standby*

}
// Sets the MMA8452 to active mode. Needs to be in this mode to output data
void MMA8452Active()
{
* byte c = readRegister(CTRL_REG1);
writeRegister(CTRL_REG1, c | 0x01); //Set the active bit to begin detection*

}
// Read bytesToRead sequentially, starting at addressToRead into the dest byte array
void readRegisters(byte addressToRead, int bytesToRead, byte * dest)
{
* Wire.beginTransmission(MMA8452_ADDRESS);*
* Wire.write(addressToRead);
Wire.endTransmission(false); //endTransmission but keep the connection active*
* Wire.requestFrom(MMA8452_ADDRESS, bytesToRead); //Ask for bytes, once done, bus is released by default*
* while(Wire.available() < bytesToRead); //Hang out until we get the # of bytes we expect*
* for(int x = 0 ; x < bytesToRead ; x++)
dest[x] = Wire.read();
}
// Read a single byte from addressToRead and return it as a byte*
byte readRegister(byte addressToRead)
{
* Wire.beginTransmission(MMA8452_ADDRESS);*
* Wire.write(addressToRead);
Wire.endTransmission(false); //endTransmission but keep the connection active*
* Wire.requestFrom(MMA8452_ADDRESS, 1); //Ask for 1 byte, once done, bus is released by default*
* while(!Wire.available()) ; //Wait for the data to come back*
* return Wire.read(); //Return this one byte*
}
// Writes a single byte (dataToWrite) into addressToWrite
void writeRegister(byte addressToWrite, byte dataToWrite)
{
* Wire.beginTransmission(MMA8452_ADDRESS);*
* Wire.write(addressToWrite);
Wire.write(dataToWrite);
Wire.endTransmission(); //Stop transmitting*
}_

The problem I'm running into is how to attach TWO of the triple axle accelerometers.

If you can change the address of one of them, it's easy.

If you can't, it's easy, too. Just get another Arduino.