BenDanville
Active member
Hi everyone, not sure if this is the right place to post this.
If anyone has any insight I would very much appreciate it thankyou!
Goal: I am keen to inspire my 10 nephew to get into electronics.
Project Idea: He's very into planes/helicopters so I would like to 3D print a model of an aircraft or retrofit a toy, put a Teensy and a Adafruit DoF 10 sensor breakout board inside so it can steer the aircraft.
Issue: Both parts work separately but seems to freeze when put together!
Here's my process below:
I had an adafruit 10 DoF breakout that has been in my drawer unused, so I installed the required libraries, hooked up the wires and successfully ran the example code that helpfully provides pitch and roll in degrees.
Works well!
I wrote a test script to write to the dataref "sim/joystick/yoke_pitch_ratio" (and another to enable custom override)
Works well!
Combine the two scripts together and the script freezes. If I take out the line that actually updates the flightsim variable to the heading variable it does not freeze but obviously doesn't achieve anything
If I try and write a test value to the dataref instead of the pitch value it freezes as well!
I would appreciate any advice anyone has about why this would be the case. Thankyou!
I have tried with a integer dataref instead instead of a float and have the same result :S
If anyone has any insight I would very much appreciate it thankyou!
Goal: I am keen to inspire my 10 nephew to get into electronics.
Project Idea: He's very into planes/helicopters so I would like to 3D print a model of an aircraft or retrofit a toy, put a Teensy and a Adafruit DoF 10 sensor breakout board inside so it can steer the aircraft.
Issue: Both parts work separately but seems to freeze when put together!
Here's my process below:
I had an adafruit 10 DoF breakout that has been in my drawer unused, so I installed the required libraries, hooked up the wires and successfully ran the example code that helpfully provides pitch and roll in degrees.
Works well!
I wrote a test script to write to the dataref "sim/joystick/yoke_pitch_ratio" (and another to enable custom override)
Works well!
Combine the two scripts together and the script freezes. If I take out the line that actually updates the flightsim variable to the heading variable it does not freeze but obviously doesn't achieve anything
If I try and write a test value to the dataref instead of the pitch value it freezes as well!
I would appreciate any advice anyone has about why this would be the case. Thankyou!
I have tried with a integer dataref instead instead of a float and have the same result :S
Code:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_BMP085_U.h>
#include <Adafruit_L3GD20_U.h>
#include <Adafruit_10DOF.h>
FlightSimInteger RandomDR;
/* Assign a unique ID to the sensors */
Adafruit_10DOF dof = Adafruit_10DOF();
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301);
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(18001);
/* Update this with the correct SLP for accurate altitude measurements */
float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
/**************************************************************************/
/*!
@brief Initialises all the sensors used by this example
*/
/**************************************************************************/
void initSensors()
{
if(!accel.begin())
{
/* There was a problem detecting the LSM303 ... check your connections */
Serial.println(F("Ooops, no LSM303 detected ... Check your wiring!"));
while(1);
}
if(!mag.begin())
{
/* There was a problem detecting the LSM303 ... check your connections */
Serial.println("Ooops, no LSM303 detected ... Check your wiring!");
while(1);
}
if(!bmp.begin())
{
/* There was a problem detecting the BMP180 ... check your connections */
Serial.println("Ooops, no BMP180 detected ... Check your wiring!");
while(1);
}
}
/**************************************************************************/
/*!
*/
/**************************************************************************/
void setup(void)
{
Serial.begin(115200);
Serial.println(F("Adafruit 10 DOF Pitch/Roll/Heading Example")); Serial.println("");
RandomDR = XPlaneRef("sim/cockpit2/switches/custom_slider_on");
/* Initialise the sensors */
initSensors();
}
/**************************************************************************/
/*!
@brief Constantly check the roll/pitch/heading/altitude/temperature
*/
/**************************************************************************/
void loop(void)
{
FlightSim.update();
sensors_event_t accel_event;
sensors_event_t mag_event;
sensors_event_t bmp_event;
sensors_vec_t orientation;
/* Calculate pitch and roll from the raw accelerometer data */
accel.getEvent(&accel_event);
if (dof.accelGetOrientation(&accel_event, &orientation))
{
/* 'orientation' should have valid .roll and .pitch fields */
Serial.print(F("Roll: "));
Serial.print(orientation.roll);
Serial.print(F("; "));
Serial.print(F("Pitch: "));
Serial.print(orientation.pitch);
Serial.print(F("; "));
}
/* Calculate the heading using the magnetometer */
mag.getEvent(&mag_event);
if (dof.magGetOrientation(SENSOR_AXIS_Z, &mag_event, &orientation))
{
/* 'orientation' should have valid .heading data now */
Serial.print(F("Heading: "));
Serial.print(orientation.heading);
Serial.print(F("; "));
}
/* Calculate the altitude using the barometric pressure sensor */
bmp.getEvent(&bmp_event);
if (bmp_event.pressure)
{
/* Get ambient temperature in C */
float temperature;
bmp.getTemperature(&temperature);
/* Convert atmospheric pressure, SLP and temp to altitude */
Serial.print(F("Alt: "));
Serial.print(bmp.pressureToAltitude(seaLevelPressure,
bmp_event.pressure,
temperature));
Serial.print(F(" m; "));
/* Display the temperature */
Serial.print(F("Temp: "));
Serial.print(temperature);
Serial.print(F(" C"));
}
Serial.println(F(""));
delay(1000);
RandomDR = 1;
}