Как добавить данные гироскопа, акселерометра, Эйлера и температуры на одну плату 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); }
@Malachy O'Flynn, 👍2
Обсуждение1 ответ
Лучший ответ:
Работает ли приведенный ниже код? У меня нет под рукой компилятора, поэтому я не могу его протестировать.
Если вам придется объяснять, что вы сделали, у вас будут неприятности. Я не знаю вашего учителя, но ... ;-). Серьезно, это был очень простой материал. Попробуйте найти некоторую документацию, как программировать с помощью 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
- Определение относительно точной скорости с помощью ИДУ
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
почему вы не можете сделать все это внутри одного " цикла ()"?.. у вас уже есть несколько операторов внутри
loop()
, просто добавьте еще, @jsotola