Как добавить данные гироскопа, акселерометра, Эйлера и температуры на одну плату Arduino?

Я должен использовать BNO055, чтобы получить данные о температуре/акселерометре/Эйлере/гироскопе на одной плате Arduino для школьного проекта. Я новичок в программировании, поэтому не знаком с этими командами. Я получил свой BNO055, чтобы дать мне все данные по отдельности, но у меня возникли проблемы с их компиляцией в один файл кода для загрузки. Я погуглил его, но все время получаю ссылки, чтобы загрузить их по отдельности. Ниже размещена моя последняя попытка.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

Adafruit_BNO055 bno = Adafruit_BNO055(55);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Orientation Sensor Test"); Serial.println("");

  /* Initialise the sensor */
  if (!bno.begin())
  {
    /* There was a problem detecting the BNO055 ... check your connections */
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while (1);
  }

  delay(1000);

  bno.setExtCrystalUse(true);
}

void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  bno.getEvent(&event);

  /* Display the current temperature */
  int8_t temp = bno.getTemp();

  Serial.print("Current Temperature: ");
  Serial.print(temp);
  Serial.println(" Celsius");
  Serial.print("");
}

void loop(void)
{
  /* Get a new Sensor event */
  sensors_event_t event;
  bno.getEvent(&event);

  imu::Vector<3> gyroscope = bno.getVector(Adafruit_BNO055::VECTOR_GYROSCOPE);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(gyroscope.x());
  Serial.print(" Y: ");
  Serial.print(gyroscope.y());
  Serial.print(" Z: ");
  Serial.print(gyroscope.z());
  Serial.println("");
  delay(100);
}

void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  bno.getEvent(&event);

  imu::Vector<3> accelerometer = bno.getVector(Adafruit_BNO055::VECTOR_ACCELEROMETER);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(accelerometer.x());
  Serial.print(" Y: ");
  Serial.print(accelerometer.y());
  Serial.print(" Z: ");
  Serial.print(accelerometer.z());
  Serial.println("");
  delay(100);
}

void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  bno.getEvent(&event);

  imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(euler.x());
  Serial.print(" Y: ");
  Serial.print(euler.y());
  Serial.print(" Z: ");
  Serial.print(euler.z());
  Serial.println("");
  delay(100);
}

, 👍2

Обсуждение

почему вы не можете сделать все это внутри одного " цикла ()"?.. у вас уже есть несколько операторов внутри loop(), просто добавьте еще, @jsotola


1 ответ


Лучший ответ:

2

Работает ли приведенный ниже код? У меня нет под рукой компилятора, поэтому я не могу его протестировать.

Если вам придется объяснять, что вы сделали, у вас будут неприятности. Я не знаю вашего учителя, но ... ;-). Серьезно, это был очень простой материал. Попробуйте найти некоторую документацию, как программировать с помощью Arduino IDE и изучить основы. Хорошая начальная точка-это https://www.arduino.cc/en/Tutorial/HomePage ...

Затем займитесь сенсорами и векторной математикой.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

Adafruit_BNO055 bno = Adafruit_BNO055(55);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Тест датчика ориентации"); Serial.println("");

  /* Инициализация датчика */
  if (!bno.begin())
  {
    /* Возникла проблема с обнаружением BNO055 ... проверьте свои соединения */
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while (1);
  }

  delay(1000);

  bno.setExtCrystalUse(true);
}

void loop(void)
{
  /* Получить новое событие датчика */
  sensors_event_t event;
  bno.getEvent(&event);

  /* Отображение текущей температуры */
  int8_t temp = bno.getTemp();

  Serial.print("Current Temperature: ");
  Serial.print(temp);
  Serial.println(" Celsius");
  Serial.print("");

  imu::Vector<3> gyroscope = bno.getVector(Adafruit_BNO055::VECTOR_GYROSCOPE);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(gyroscope.x());
  Serial.print(" Y: ");
  Serial.print(gyroscope.y());
  Serial.print(" Z: ");
  Serial.print(gyroscope.z());
  Serial.println("");
  delay(100);

  imu::Vector<3> accelerometer = bno.getVector(Adafruit_BNO055::VECTOR_ACCELEROMETER);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(accelerometer.x());
  Serial.print(" Y: ");
  Serial.print(accelerometer.y());
  Serial.print(" Z: ");
  Serial.print(accelerometer.z());
  Serial.println("");
  delay(100);

  imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(euler.x());
  Serial.print(" Y: ");
  Serial.print(euler.y());
  Serial.print(" Z: ");
  Serial.print(euler.z());
  Serial.println("");
  delay(100);
}
,

Огромное спасибо. Мой учитель только сказал нам, что делать, так как занятия проходят онлайн, он был довольно ленив, он не дал нам никаких рекомендаций, чтобы посмотреть, так что спасибо и за ссылку. Извините за основной вопрос, лол, я студент-нефтяник, так что я вышел из своей зоны комфорта с кодированием. И твой код сработал. Я не мог не поблагодарить вас за помощь., @Malachy O'Flynn

Пожалуйста. Как правило, я не выполняю домашнюю работу за других. Но вы были честны и рассказали нам о предыстории. Я также знаю от студентов по соседству, как в наши дни работает учеба. Я серьезно обеспокоен этим. Я из Германии - судя по вашему имени, я ожидал бы, что вы ирландец, так что все сходится, у других стран такие же проблемы. Знания и образование-это такие драгоценные активы, мы не должны тратить их впустую. Я рад, что смог вам помочь., @Peter Paul Kiefer