Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: "MPU6050 Bluetooth" - Source Code NOT compiled for: Arduino Uno - Source Code created on: 2024-06-09 21:24:02 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* Design a Bluetooth head tracker for OpenTrack with */ /* MPU6050 and HC-06 modules. Provide thorough code */ /* documentation and comments detailing each code */ /* segment's purpose and the hardware connections */ /* required. */ /****** SYSTEM REQUIREMENT 2 *****/ /* Develop a Bluetooth head tracker for OpenTrack */ /* with MPU6050 and HC-06 modules. Include */ /* comprehensive code documentation, comments on */ /* hardware connections, and utilize an LED for */ /* status updates. */ /****** END SYSTEM REQUIREMENTS *****/ /****** DEFINITION OF LIBRARIES *****/ #include
#include
#include
//https://github.com/jrowberg/i2cdevlib /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); void dmpDataReady(void); void updateOutputs(void); /***** DEFINITION OF DIGITAL INPUT PINS *****/ const uint8_t accelerometer_MPU6050_Interrupt_PIN_D2 = 2; /***** DEFINITION OF DIGITAL OUTPUT PINS *****/ const uint8_t statusLED_LED_PIN_D3 = 3; /***** DEFINITION OF Software Serial *****/ const uint8_t bluetooth_HC05_mySerial_PIN_SERIAL_TX_A0 = A0; const uint8_t bluetooth_HC05_mySerial_PIN_SERIAL_RX_A1 = A1; const uint8_t bluetooth_HC05_mySerial_PIN_SERIAL_TX_A2 = A2; const uint8_t bluetooth_HC05_mySerial_PIN_SERIAL_RX_A3 = A3; SoftwareSerial bluetooth_HC05_mySerial(bluetooth_HC05_mySerial_PIN_SERIAL_RX_A1, bluetooth_HC05_mySerial_PIN_SERIAL_TX_A0); SoftwareSerial bluetooth_HC05_mySerial_2(bluetooth_HC05_mySerial_PIN_SERIAL_RX_A3, bluetooth_HC05_mySerial_PIN_SERIAL_TX_A2); /***** DEFINITION OF I2C PINS *****/ const uint8_t accelerometer_MPU6050_I2C_PIN_SDA_A4 = A4; const uint8_t accelerometer_MPU6050_I2C_PIN_SCL_A5 = A5; const uint8_t accelerometer_MPU6050_I2C_SLAVE_ADDRESS = 104; /***** DEFINITION OF OUTPUT RAW VARIABLES *****/ /***** used to store raw data *****/ bool statusLED_LED_PIN_D3_rawData = 0; /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/ /***** used to store data after characteristic curve transformation *****/ float statusLED_LED_PIN_D3_phyData = 0.0; /****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/ MPU6050 mpu; /****** GLOBAL VARIABLES *****/ bool blinkState = false; bool dmpReady = false; uint8_t mpuIntStatus, devStatus, fifoBuffer[64]; uint16_t packetSize, fifoCount; Quaternion q; VectorFloat gravity; float ypr[3]; volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = true; } void setup(void) { // Initialize digital pins pinMode(accelerometer_MPU6050_Interrupt_PIN_D2, INPUT); pinMode(statusLED_LED_PIN_D3, OUTPUT); // Initialize Bluetooth serial communication bluetooth_HC05_mySerial.begin(9600); bluetooth_HC05_mySerial_2.begin(9600); // Initialize I2C communication Wire.begin(); Wire.setClock(400000); // Initialize Serial communication for debugging Serial.begin(115200); while (!Serial); // Initialize MPU6050 Serial.println(F("Initializing I2C devices...")); mpu.initialize(); pinMode(accelerometer_MPU6050_Interrupt_PIN_D2, INPUT); // Verify connection to MPU6050 Serial.println(F("Testing device connections...")); Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed")); // Wait for user input to begin DMP programming Serial.println(F("\nSend any character to begin DMP programming and demo: ")); while (!Serial.available()); while (Serial.available() && Serial.read()); // Initialize DMP Serial.println(F("Initializing DMP...")); devStatus = mpu.dmpInitialize(); // Set offsets for MPU6050 mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // Check if DMP initialization was successful if (devStatus == 0) { mpu.CalibrateAccel(6); mpu.CalibrateGyro(6); mpu.PrintActiveOffsets(); Serial.println(F("Enabling DMP...")); mpu.setDMPEnabled(true); // Enable interrupt detection Serial.print(F("Enabling interrupt detection (Arduino external interrupt ")); Serial.print(digitalPinToInterrupt(accelerometer_MPU6050_Interrupt_PIN_D2)); Serial.println(F(")...")); attachInterrupt(digitalPinToInterrupt(accelerometer_MPU6050_Interrupt_PIN_D2), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); Serial.println(F("DMP ready! Waiting for first interrupt...")); dmpReady = true; packetSize = mpu.dmpGetFIFOPacketSize(); } else { Serial.print(F("DMP Initialization failed (code ")); Serial.print(devStatus); Serial.println(F(")")); } } void loop(void) { // Main code to run repeatedly if (!dmpReady) return; // Check if we have a new DMP packet if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // Send yaw, pitch, and roll data over Serial Serial.print("ypr\t"); Serial.print(ypr[0] * 180/M_PI); Serial.print("\t"); Serial.print(ypr[1] * 180/M_PI); Serial.print("\t"); Serial.println(ypr[2] * 180/M_PI); // Send yaw, pitch, and roll data over Bluetooth bluetooth_HC05_mySerial.print("ypr\t"); bluetooth_HC05_mySerial.print(ypr[0] * 180/M_PI); bluetooth_HC05_mySerial.print("\t"); bluetooth_HC05_mySerial.print(ypr[1] * 180/M_PI); bluetooth_HC05_mySerial.print("\t"); bluetooth_HC05_mySerial.println(ypr[2] * 180/M_PI); // Toggle LED state blinkState = !blinkState; digitalWrite(statusLED_LED_PIN_D3, blinkState); } updateOutputs(); // Refresh output data } void updateOutputs() { // Update the status LED based on raw data digitalWrite(statusLED_LED_PIN_D3, statusLED_LED_PIN_D3_rawData); } /* END CODE */
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)