From 295c9195d28400bc0007b7cf8032ab80ea9ed2cb Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 28 Jan 2025 14:22:48 +0100 Subject: [PATCH] code docs --- docs/week_1_fabacademy/drone_code.md | 107 +++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/week_1_fabacademy/drone_code.md diff --git a/docs/week_1_fabacademy/drone_code.md b/docs/week_1_fabacademy/drone_code.md new file mode 100644 index 0000000..adf8da6 --- /dev/null +++ b/docs/week_1_fabacademy/drone_code.md @@ -0,0 +1,107 @@ +# Coding the drone + +## Issues + + +### Using the wrong libary +First used the wrong library I used the adafruit bno0xx library instead of the sparkfun bno08x library +??? failure +```cpp +#include "conf.h" +#include +#include +#include +#include +#include +#include +#include + +Adafruit_BNO08x bno08x(BNOINTERRUPTSIG); +sh2_SensorValue_t sensorValue; + +void setup() { + Serial.begin(9600); + Serial.println("setup started"); + // Setup all ESC + // ledcAttach(MOTOR1, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR2, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR3, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR4, PWMFREQ, PWMRESOLUTION); + Serial.print("Setup Started"); +} + +void loop() { + // put your main code here, to run repeatedly: + sleep(3) + if (!bno08x.begin_I2C()) { + Serial.println("Failed to find BNO08x chip"); + sleep(1); + } + + + Serial.print("Game Rotation Vector - r: "); + Serial.print(sensorValue.un.gameRotationVector.real); + Serial.print(" i: "); + Serial.print(sensorValue.un.gameRotationVector.i); + Serial.print(" j: "); + Serial.print(sensorValue.un.gameRotationVector.j); + Serial.print(" k: "); + Serial.println(sensorValue.un.gameRotationVector.k); +} + +//https://randomnerdtutorials.com/esp32-pwm-arduino-ide/ +//https://github.com/adafruit/Adafruit_BNO08x/blob/master/examples/rotation_vector/rotation_vector.ino#L25 +``` + +??? example +```cpp +#include +#include +#include "conf.h" + +BNO080 myIMU; + +void setup() { + Serial.begin(9600); + Serial.println("setup started"); + // Setup all ESC + // ledcAttach(MOTOR1, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR2, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR3, PWMFREQ, PWMRESOLUTION); + // ledcAttach(MOTOR4, PWMFREQ, PWMRESOLUTION); + Serial.print("Setup Started"); + + Wire.begin(); + myIMU.begin(); + Wire.setClock(400000); //Increase I2C data rate to 400kHz + myIMU.enableRotationVector(50); //Send data update every 50ms} +} + + +void loop() { + + if (myIMU.dataAvailable() == true) { + float roll = (myIMU.getRoll()) * 180.0 / PI; // Convert roll to degrees + float pitch = (myIMU.getPitch()) * 180.0 / PI; // Convert pitch to degrees + float yaw = (myIMU.getYaw()) * 180.0 / PI; // Convert yaw / heading to degrees + + Serial.print(roll, 1); + Serial.print(F(",")); + Serial.print(pitch, 1); + Serial.print(F(",")); + Serial.print(yaw, 1); + + Serial.println(); + } +} +void calibrateESC() { + ledcWrite(MOTOR1, 1100); + ledcWrite(MOTOR2, 1100); + ledcWrite(MOTOR3, 1100); + ledcWrite(MOTOR4, 1100); +} + +//https://randomnerdtutorials.com/esp32-pwm-arduino-ide/ +//https://github.com/sparkfun/SparkFun_BNO080_Arduino_Library/blob/main/examples/Example24-UncalibratedGyro/Example24-UncalibratedGyro.ino +``` +