hi there all you brilliant coders
I'm new to arduino and i as wondering if anyone could help me understand and possible fix up some code i found on line?
i should warn you that my coding is limited to a semester of python basics at my local university and a what I've been teaching myself about arduino over the last week...
so on to the code in qusetion which i found at
and goes like this
/***************************************************************************************************************
* Razor AHRS Firmware v1.4.2
* 9 Degree of Measurement Attitude and Heading Reference System
* for Sparkfun "9DOF Razor IMU" (SEN-10125 and SEN-10736)
* and "9DOF Sensor Stick" (SEN-10183, 10321 and SEN-10724)
*
* Released under GNU GPL (General Public License) v3.0
* Copyright (C) 2013 Peter Bartz [http://ptrbrtz.net]
* Copyright (C) 2011-2012 Quality & Usability Lab, Deutsche Telekom Laboratories, TU Berlin
*
* Infos, updates, bug reports, contributions and feedback:
* https://github.com/ptrbrtz/razor-9dof-ahrs
*
*
* History:
* * Original code (http://code.google.com/p/sf9domahrs/) by Doug Weibel and Jose Julio,
* based on ArduIMU v1.5 by Jordi Munoz and William Premerlani, Jose Julio and Doug Weibel. Thank you!
*
* * Updated code (http://groups.google.com/group/sf_9dof_ahrs_update) by David Malik (david.zsolt.malik@gmail.com)
* for new Sparkfun 9DOF Razor hardware (SEN-10125).
*
* * Updated and extended by Peter Bartz (peter-bartz@gmx.de):
* * v1.3.0
* * Cleaned up, streamlined and restructured most of the code to make it more comprehensible.
* * Added sensor calibration (improves precision and responsiveness a lot!).
* * Added binary yaw/pitch/roll output.
* * Added basic serial command interface to set output modes/calibrate sensors/synch stream/etc.
* * Added support to synch automatically when using Rovering Networks Bluetooth modules (and compatible).
* * Wrote new easier to use test program (using Processing).
* * Added support for new version of "9DOF Razor IMU": SEN-10736.
* --> The output of this code is not compatible with the older versions!
* --> A Processing sketch to test the tracker is available.
* * v1.3.1
* * Initializing rotation matrix based on start-up sensor readings -> orientation OK right away.
* * Adjusted gyro low-pass filter and output rate settings.
* * v1.3.2
* * Adapted code to work with new Arduino 1.0 (and older versions still).
* * v1.3.3
* * Improved synching.
* * v1.4.0
* * Added support for SparkFun "9DOF Sensor Stick" (versions SEN-10183, SEN-10321 and SEN-10724).
* * v1.4.1
* * Added output modes to read raw and/or calibrated sensor data in text or binary format.
* * Added static magnetometer soft iron distortion compensation
* * v1.4.2
* * (No core firmware changes)
*
* TODOs:
* * Allow optional use of EEPROM for storing and reading calibration values.
* * Use self-test and temperature-compensation features of the sensors.
***************************************************************************************************************/
/*
"9DOF Razor IMU" hardware versions: SEN-10125 and SEN-10736
ATMega328@3.3V, 8MHz
ADXL345 : Accelerometer
HMC5843 : Magnetometer on SEN-10125
HMC5883L : Magnetometer on SEN-10736
ITG-3200 : Gyro
Arduino IDE : Select board "Arduino Pro or Pro Mini (3.3v, 8Mhz) w/ATmega328"
*/
/*
"9DOF Sensor Stick" hardware versions: SEN-10183, SEN-10321 and SEN-10724
ADXL345 : Accelerometer
HMC5843 : Magnetometer on SEN-10183 and SEN-10321
HMC5883L : Magnetometer on SEN-10724
ITG-3200 : Gyro
*/
/*
Axis definition (differs from definition printed on the board!):
X axis pointing forward (towards the short edge with the connector holes)
Y axis pointing to the right
and Z axis pointing down.
Positive yaw : clockwise
Positive roll : right wing down
Positive pitch : nose up
Transformation order: first yaw then pitch then roll.
*/
/*
Serial commands that the firmware understands:
"#o<params>" - Set OUTPUT mode and parameters. The available options are:
// Streaming output
"#o0" - DISABLE continuous streaming output. Also see #f below.
"#o1" - ENABLE continuous streaming output.
// Angles output
"#ob" - Output angles in BINARY format (yaw/pitch/roll as binary float, so one output frame
is 3x4 = 12 bytes long).
"#ot" - Output angles in TEXT format (Output frames have form like "#YPR=-142.28,-5.38,33.52",
followed by carriage return and line feed [\r\n]).
// Sensor calibration
"#oc" - Go to CALIBRATION output mode.
"#on" - When in calibration mode, go on to calibrate NEXT sensor.
// Sensor data output
"#osct" - Output CALIBRATED SENSOR data of all 9 axes in TEXT format.
One frame consist of three lines - one for each sensor: acc, mag, gyr.
"#osrt" - Output RAW SENSOR data of all 9 axes in TEXT format.
One frame consist of three lines - one for each sensor: acc, mag, gyr.
"#osbt" - Output BOTH raw and calibrated SENSOR data of all 9 axes in TEXT format.
One frame consist of six lines - like #osrt and #osct combined (first RAW, then CALIBRATED).
NOTE: This is a lot of number-to-text conversion work for the little 8MHz chip on the Razor boards.
In fact it's too much and an output frame rate of 50Hz can not be maintained. #osbb.
"#oscb" - Output CALIBRATED SENSOR data of all 9 axes in BINARY format.
One frame consist of three 3x3 float values = 36 bytes. Order is: acc x/y/z, mag x/y/z, gyr x/y/z.
"#osrb" - Output RAW SENSOR data of all 9 axes in BINARY format.
One frame consist of three 3x3 float values = 36 bytes. Order is: acc x/y/z, mag x/y/z, gyr x/y/z.
"#osbb" - Output BOTH raw and calibrated SENSOR data of all 9 axes in BINARY format.
One frame consist of 2x36 = 72 bytes - like #osrb and #oscb combined (first RAW, then CALIBRATED).
// Error message output
"#oe0" - Disable ERROR message output.
"#oe1" - Enable ERROR message output.
"#f" - Request one output frame - useful when continuous output is disabled and updates are
required in larger intervals only. Though #f only requests one reply, replies are still
bound to the internal 20ms (50Hz) time raster. So worst case delay that #f can add is 19.99ms.
"#s<xy>" - Request synch token - useful to find out where the frame boundaries are in a continuous
binary stream or to see if tracker is present and answering. The tracker will send
"#SYNCH<xy>\r\n" in response (so it's possible to read using a readLine() function).
x and y are two mandatory but arbitrary bytes that can be used to find out which request
the answer belongs to.
("#C" and "#D" - Reserved for communication with optional Bluetooth module.)
Newline characters are not required. So you could send "#ob#o1#s", which
would set binary output mode, enable continuous streaming output and request
a synch token all at once.
The status LED will be on if streaming output is enabled and off otherwise.
Byte order of binary output is little-endian: least significant byte comes first.
*/