From 6a20c8f16d848c07d10c4560000da1062b147aef Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 8 May 2024 14:09:03 +0200 Subject: [PATCH] class and script creation --- .../Movement-sensor-code.ino | 24 +++++++++ .../Movement-sensor-code/SensorManager.cpp | 50 +++++++++++++++++++ .../Movement-sensor-code/SensorManager.h | 21 ++++++++ .../arduino/Movement-sensor-code/headerFIle.h | 1 + 4 files changed, 96 insertions(+) create mode 100644 code/arduino/Movement-sensor-code/Movement-sensor-code.ino create mode 100644 code/arduino/Movement-sensor-code/SensorManager.cpp create mode 100644 code/arduino/Movement-sensor-code/SensorManager.h create mode 100644 code/arduino/Movement-sensor-code/headerFIle.h diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino new file mode 100644 index 0000000..ac12140 --- /dev/null +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -0,0 +1,24 @@ +#include "SensorManager.h" + +SensorManager sensorManager; + +void setup() { + Wire.setClockStretchLimit(150000L); // Default stretch limit 150mS + Serial.begin(9600); + Serial.println("startup"); + delay(10000); + sensorManager.sensorSetup(); + +} + +void loop() { + SensorManager::Rotation rotation = sensorManager.readLoop(); + + Serial.print(rotation.x); + Serial.print(" "); + Serial.print(rotation.y); + Serial.print(" "); + Serial.print(rotation.z); + + Serial.println(); +} \ No newline at end of file diff --git a/code/arduino/Movement-sensor-code/SensorManager.cpp b/code/arduino/Movement-sensor-code/SensorManager.cpp new file mode 100644 index 0000000..260ce1c --- /dev/null +++ b/code/arduino/Movement-sensor-code/SensorManager.cpp @@ -0,0 +1,50 @@ +#include "SensorManager.h" +#include + +SensorManager::SensorManager() {} + +void SensorManager::sensorSetup() { + Serial.println(); + Serial.println("BNO080 Read Example"); + + delay(1000); // Wait for BNO to boot + + Wire.begin(); + + if (myIMU.begin() == false) { + delay(1000); + Serial.println("."); + } + + Wire.setClock(400000); //Increase I2C data rate to 400kHz + myIMU.calibrateAll(); //Turn on cal for Accel, Gyro, and Mag + myIMU.enableGameRotationVector(100); + myIMU.enableMagnetometer(100); //Send data update every 100ms + myIMU.saveCalibration(); //Saves the current dynamic calibration data (DCD) to memory + myIMU.requestCalibrationStatus(); //Sends command to get the latest calibration status + + if (myIMU.calibrationComplete() == true) { + Serial.println("Calibration data successfully stored"); + } + + Serial.println(F("magnetometer rotation enabled")); +} + +SensorManager::Rotation SensorManager::readLoop() { + if (myIMU.dataAvailable() == true) { + float x = myIMU.getMagX(); + float y = myIMU.getMagY(); + float z = myIMU.getMagZ(); + + Rotation rotation = { x, y, z }; + return rotation; + } + else { + float x = myIMU.getMagX(); + float y = myIMU.getMagY(); + float z = myIMU.getMagZ(); + + Rotation rotation = { x, y, z }; + return rotation; + } +} \ No newline at end of file diff --git a/code/arduino/Movement-sensor-code/SensorManager.h b/code/arduino/Movement-sensor-code/SensorManager.h new file mode 100644 index 0000000..3eaf75e --- /dev/null +++ b/code/arduino/Movement-sensor-code/SensorManager.h @@ -0,0 +1,21 @@ +#ifndef SensorManager_h +#define SensorManager_h + +#include "Arduino.h" +#include "SparkFun_BNO080_Arduino_Library.h" + +class SensorManager { + public: + SensorManager(); + void sensorSetup(); + struct Rotation { + float x; + float y; + float z; + }; + Rotation readLoop(); + private: + BNO080 myIMU; +}; + +#endif \ No newline at end of file diff --git a/code/arduino/Movement-sensor-code/headerFIle.h b/code/arduino/Movement-sensor-code/headerFIle.h new file mode 100644 index 0000000..4b96a47 --- /dev/null +++ b/code/arduino/Movement-sensor-code/headerFIle.h @@ -0,0 +1 @@ +#include "SensorManager.h" \ No newline at end of file