/* *@Author: TONYLABS *@Date: 2013.04.03 */
import processing.serial.; import processing.opengl.;
Serial myPort;
float[] value = new float[4]; String[] msg = new String[5]; float x, y, z;
void setup() { size(600, 600, OPENGL); noStroke(); String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); }
void draw() { serialEvent(); rotateX(value[0]); rotateY(value[1]); rotateZ(value[2]); background(0); fill(246, 225, 65); lights(); translate(200, 200); box(50); }
void serialEvent() { //@et msg till line break (ASCII > 13) for (int i=0;i<4;i++) { msg[i] = myPort.readStringUntil(13); if (msg[i] != null) { value[i] = float(msg[i]); println(value); } } }
MPU6050 FIFO 输出模式例程
#include "Wire.h" #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h"
MPU6050 mpu;
#define OUTPUT_READABLE_EULER
bool dmpReady =false; uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer
float euler[3]; Quaternion q;
volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt=true; }
void setup() { Wire.begin(); Serial.begin(9600); mpu.initialize(); while(Serial.available() && Serial.read()); devStatus= mpu.dmpInitialize();
if(devStatus == 0) { mpu.setDMPEnabled(true); attachInterrupt(0,dmpDataReady,RISING); mpuIntStatus= mpu.getIntStatus(); dmpReady=true; packetSize=mpu.dmpGetFIFOPacketSize(); } else { Serial.print(F("dmp initialization failed")); } }
void loop() {
if(!dmpReady) return; mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); fifoCount = mpu.getFIFOCount();
if ((mpuIntStatus & 0x10) || fifoCount == 1024) { mpu.resetFIFO(); Serial.println(F("FIFO overflow!"));
} else if (mpuIntStatus & 0x02) { while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); mpu.getFIFOBytes(fifoBuffer, packetSize);
// track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize;
// #ifdef OUTPUT_READABLE_EULER // display Euler angles in degrees mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetEuler(euler, &q); /* Serial.print("euler\t"); Serial.print(euler[0] * 180/M_PI); Serial.print("\t"); Serial.print(euler[1] * 180/M_PI); Serial.print("\t"); Serial.println(euler[2] * 180/M_PI); #endif*/ for(int i=0;i<4;i++) { Serial.println(euler[i],4); delay(10); } }
}
MPU6050 简单数值输出模式:
#include "Wire.h" #include "I2Cdev.h" #include "MPU6050.h"
MPU6050 accelgyro;
int16_t ax, ay, az; int16_t gx, gy, gz;
void setup() { Wire.begin(); Serial.begin(115200); accelgyro.initialize(); accelgyro.testConnection(); }
void loop() { //@Read raw accel/gyro measurements from device accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); Serial.println(ax/10000); delay(100); }