Skip to content

Instantly share code, notes, and snippets.

@dewomser
Last active December 14, 2019 20:34
Show Gist options
  • Save dewomser/d27867774425b3f1e8cc0f53f3be6394 to your computer and use it in GitHub Desktop.
Save dewomser/d27867774425b3f1e8cc0f53f3be6394 to your computer and use it in GitHub Desktop.
Arduino Datalogger Acceleration MMA8452Q
/******************************************************************************
MMA8452Q_Basic.ino
SFE_MMA8452Q Library Basic Example Sketch
Jim Lindblom @ SparkFun Electronics
Original Creation Date: June 3, 2014
https://github.com/sparkfun/MMA8452_Accelerometer
This sketch uses the SFE_MMA8452Q library to initialize the
accelerometer, and stream values from it.
Hardware hookup:
Arduino --------------- MMA8452Q Breakout
3.3V --------------- 3.3V
GND --------------- GND
SDA (A4) --\/330 Ohm\/-- SDA
SCL (A5) --\/330 Ohm\/-- SCL
The MMA8452Q is a 3.3V max sensor, so you'll need to do some
level-shifting between the Arduino and the breakout. Series
resistors on the SDA and SCL lines should do the trick.
Development environment specifics:
IDE: Arduino 1.0.5
Hardware Platform: Arduino Uno
This code is beerware; if you see me (or any other SparkFun employee) at the
local, and you've found our code helpful, please buy us a round!
Distributed as-is; no warranty is given.
******************************************************************************/
#include <Wire.h> // Must include Wire library for I2C
#include <SFE_MMA8452Q.h> // Includes the SFE_MMA8452Q library
// Begin using the library by creating an instance of the MMA8452Q
// class. We'll call it "accel". That's what we'll reference from
// here on out.
MMA8452Q accel;
const int buttonPin = 12;
const int ledPin = 13;
int buttonState = 0;
float xyz[263];
int cycle = 0;
int cycle1 = 0;
int messungen = 264;
// The setup function simply starts serial and initializes the
// accelerometer.
void setup()
{
Serial.begin(9600);
Serial.println("MMA8452Q Test Code!");
// Choose your adventure! There are a few options when it comes
// to initializing the MMA8452Q:
// 1. Default init. This will set the accelerometer up
// with a full-scale range of +/-2g, and an output data rate
// of 800 Hz (fastest).
//accel.init();
// 2. Initialize with FULL-SCALE setting. You can set the scale
// using either SCALE_2G, SCALE_4G, or SCALE_8G as the value.
// That'll set the scale to +/-2g, 4g, or 8g respectively.
//accel.init(SCALE_4G); // Uncomment this out if you'd like
// 3. Initialize with FULL-SCALE and DATA RATE setting. If you
// want control over how fast your accelerometer produces
// data use one of the following options in the second param:
// ODR_800, ODR_400, ODR_200, ODR_100, ODR_50, ODR_12,
// ODR_6, or ODR_1.
// Sets to 800, 400, 200, 100, 50, 12.5, 6.25, or 1.56 Hz.
accel.init(SCALE_8G, ODR_12);
}
// The loop function will simply check for new data from the
// accelerometer and print it out if it's available.
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
for (int cycle = 0 ; cycle < messungen; cycle = cycle + 3) {
delay (100);
//Serial.print (i);
//Serial.print("\t");
//Serial.print(cycle);
//Serial.print("\t");
Serial.print (xyz[cycle], 3);
Serial.print("\t");
Serial.print (xyz[cycle + 1], 3);
Serial.print("\t");
Serial.print (xyz[cycle + 2], 3);
Serial.print("\t");
Serial.println(); // Print new line every time.
}
Serial.print ("Daten zu Ende");
delay(1000);
// cycle = 0 ;
digitalWrite(ledPin, LOW);
} else {
// Use the accel.available() function to wait for new data
// from the accelerometer.
if (accel.available())
{
// First, use accel.read() to read the new variables:
accel.read();
// accel.read() will update two sets of variables.
// * int's x, y, and z will store the signed 12-bit values
// read out of the accelerometer.
// * floats cx, cy, and cz will store the calculated
// acceleration from those 12-bit values. These variables
// are in units of g's.
// Check the two function declarations below for an example
// of how to use these variables.
if (cycle1 < messungen) {
cycle1 = cycle1 +3;
printCalculatedAccels();
}
//printAccels(); // Uncomment to print digital readings
// The library also supports the portrait/landscape detection
// of the MMA8452Q. Check out this function declaration for
// an example of how to use that.
//printOrientation();
// Serial.println(); // Print new line every time.
}
}
}
// The function demonstrates how to use the accel.x, accel.y and
// accel.z variables.
// Before using these variables you must call the accel.read()
// function!
void printAccels()
{
Serial.print(accel.x, 3);
Serial.print("\t");
Serial.print(accel.y, 3);
Serial.print("\t");
Serial.print(accel.z, 3);
Serial.print("\t");
}
// This function demonstrates how to use the accel.cx, accel.cy,
// and accel.cz variables.
// Before using these variables you must call the accel.read()
// function!
/************************
void printCalculatedAccels()
{
Serial.print(accel.cx, 3);
Serial.print("\t");
Serial.print(accel.cy, 3);
Serial.print("\t");
Serial.print(accel.cz, 3);
Serial.print("\t");
}
**************************/
void printCalculatedAccels()
{
messungen = 250;
cycle=cycle + 3;
xyz[cycle] = (accel.cx);
// Serial.print("\t");
xyz[cycle + 1] = (accel.cy);
// Serial.print("\t");
xyz[cycle + 2] = (accel.cz);
// Serial.print("\t");
Serial.print (xyz[cycle], 3);
Serial.print("\t");
Serial.print (xyz[cycle + 1], 3);
Serial.print("\t");
Serial.print (xyz[cycle + 2], 3);
Serial.print("\t");
Serial.print(cycle);
Serial.print("\n");
if (cycle > messungen){
return;
}
}
// This function demonstrates how to use the accel.readPL()
// function, which reads the portrait/landscape status of the
// sensor.
void printOrientation()
{
// accel.readPL() will return a byte containing information
// about the orientation of the sensor. It will be either
// PORTRAIT_U, PORTRAIT_D, LANDSCAPE_R, LANDSCAPE_L, or
// LOCKOUT.
byte pl = accel.readPL();
switch (pl)
{
case PORTRAIT_U:
Serial.print("Portrait Up");
break;
case PORTRAIT_D:
Serial.print("Portrait Down");
break;
case LANDSCAPE_R:
Serial.print("Landscape Right");
break;
case LANDSCAPE_L:
Serial.print("Landscape Left");
break;
case LOCKOUT:
Serial.print("Flat");
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment