Read and report XYZ axes from on-board accelerometer for graphing via serial
main.cpp
- Committer:
- bjo3rn
- Date:
- 2014-09-17
- Revision:
- 0:e89ff0cffbd5
File content as of revision 0:e89ff0cffbd5:
#include "mbed.h"
#include "MMA8451Q.h"
// define I2C Pins and address for KL25Z. Taken from default sample code.
PinName const SDA = PTE25;
PinName const SCL = PTE24;
#define MMA8451_I2C_ADDRESS (0x1d<<1)
//serial connection to PC via USB
Serial pc(USBTX, USBRX);
int main(void)
{
//configure on-board I2C accelerometer on KL25Z
MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
//map read acceleration to PWM output on red status LED
PwmOut rled(LED_RED);
float x,y,z;
while (true) {
float x, y, z;
x = acc.getAccX();
y = acc.getAccY();
z = acc.getAccZ();
wait(0.05f);
pc.printf("%1.2f %1.2f %1.2f\n", x, y, z);
}
}
/* *** PROCESSING SKETCH
// Three-axis Graphing sketch
// This program takes ASCII-encoded strings containing floating point numbers
// from the serial port at 9600 baud and graphs them. It expects values in the
// range -1.0 to 1.0, followed by a newline, or newline and carriage return
// Created 20 Apr 2005
// Updated 18 Jan 2008 by Tom Igoe
// Adapted 16 Sep 2014 by Bjoern Hartmann for mbed
// This example code is in the public domain.
import processing.serial.*;
import java.util.Scanner;
Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
float lastX =0.f, lastY=0.f, lastZ=0.f;
float minVal=-1.0;
float maxVal=1.0;
void setup () {
// set the window size:
size(400, 300);
// List all the available serial ports
println(Serial.list());
// Open whatever port is the one you're using.
myPort = new Serial(this, "/dev/tty.usbmodem1412", 9600);
// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');
// set inital background:
background(200);
}
void draw () {
// everything happens in the serialEvent()
}
void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');
if (inString != null) {
//use the Scanner class to parse 3 floats on a line.
Scanner scanner = new Scanner(inString);
float xAcc=0.0,yAcc=0.0,zAcc=0.0;
try{
xAcc = scanner.nextFloat();
yAcc = scanner.nextFloat();
zAcc = scanner.nextFloat();
} catch (Exception e) {
print(e); //InputMismatchException
}
//draw x line in red
float xAccScreen = height - map(xAcc, minVal, maxVal, 0, height);
stroke(255,0,0);
line(xPos-1,lastX,xPos,xAccScreen);
//draw y line in green
float yAccScreen = height - map(yAcc, minVal, maxVal, 0, height);
stroke(0,196,0);
line(xPos-1,lastY,xPos,yAccScreen);
//draw z line in blue
float zAccScreen = height - map(zAcc, minVal, maxVal, 0, height);
stroke(0,0,255);
line(xPos-1,lastZ,xPos,zAccScreen);
// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(200);
} else {
// increment the horizontal position:
xPos++;
}
lastX = xAccScreen;
lastY = yAccScreen;
lastZ = zAccScreen;
}
}
*/