DIY virtuell verklighet Skateboard erfarenhet med Arduino och Google kartong (2 / 3 steg)
Steg 2: Ladda upp denna kod på din enhet/sändare/input sak
VIKTIGT: Koppla från RX och TX stiften och ladda upp här koden till din styrelse.
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
bool dmpReady = false;
uint8_t mpuIntStatus;
uint8_t devStatus;
uint16_t packetSize;
uint16_t fifoCount;
uint8_t fifoBuffer [64];
Quaternion q;
VectorInt16 aa;
VectorInt16 aaReal;
VectorInt16 aaWorld;
VectorFloat allvar;
flyta euler [3].
float ypr [3].
flyktiga bool mpuInterrupt = false;
void setup()
{
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.BEGIN();
TWBR = 24.
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::Setup (400, true);
#endif
Serial.BEGIN(9600); För användning med Arduino Uno
Serial1.BEGIN(9600); För användning med Leonardo
Serial.println F ("initierar I2C enheter...").
MPU.Initialize();
Serial.println F ("Testing enhetsanslutningar...").
Serial.println(MPU.testConnection()? F("MPU6050 Connection successful"): F ("MPU6050 anslutning misslyckades"));
Serial.println F ("initierar DMP...").
devStatus = mpu.dmpInitialize();
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
om (devStatus == 0) {
Serial.println F ("Aktivera DMP...").
mpu.setDMPEnabled(true);
Serial.println (F ("Aktivera avbryta upptäckt (Arduino externa avbrott 0)..."));
attachInterrupt (0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
Serial.println (F "(DMP redo! Väntar på första avbrott..."));
dmpReady = sant;
packetSize = mpu.dmpGetFIFOPacketSize();
} annat {
Serial.Print (F ("DMP initialisering misslyckades (kod"));
Serial.Print(devStatus);
Serial.println(F(")"));
}
}
void sendData (int x, int y, int z)
{
om (z < -10) {
framåt
Serial1.write("f"); Skriva till Leonardo
Serial1.write(10); Stoppa Bit
Serial.write("f"); Skriva till Uno
Serial.write(10); Stoppa bit
} else om (z > 0) {
bakåt
Serial1.write("b");
Serial1.write(10);
Serial.write("b");
Serial.write(10);
} else om (y > 5) {//To göra mer känsliga avvikelsevärdet till 4 eller mindre
höger
Serial1.write("r");
Serial1.write(10);
Serial.write("r");
Serial.write(10);
} else om (y < -5) {//To ändrar känsligare med -4 eller större
vänster
Serial1.write("l");
Serial1.write(10);
Serial.write("l");
Serial.write(10);
} annat
Stanna
Serial1.write("s");
Serial1.write(10);
Serial.write("s");
Serial.write(10);
}
void loop()
{
om (! dmpReady) återvända;
mpuInterrupt = false;
mpuIntStatus = mpu.getIntStatus();
fifoCount = mpu.getFIFOCount();
om ((mpuIntStatus & 0x10) || fifoCount == 1024) {
mpu.resetFIFO();
Serial.println F ("FIFO Overflow").
} else om (mpuIntStatus & 0x02) {
medan (fifoCount < packetSize) {
fifoCount = mpu.getFIFOCount();
}
mpu.getFIFOBytes (fifoBuffer, packetSize);
fifoCount-= packetSize;
mpu.dmpGetQuaternion (& q, fifoBuffer);
mpu.dmpGetGravity (& gravitation, & q);
mpu.dmpGetYawPitchRoll (ypr, & q & gravitation);
sendData (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI);
}
}
void dmpDataReady()
{
mpuInterrupt = sant;
}