Для большинства датчика, работающего на PIN -код, поднимается на высоком уровне, что означает, что доска не имеет данных, чтобы передавать, это должно быть очень быстро, в результате чего все, что я сделал на 3MHZ < /p>
< /br />
< /br /> < /br /pr> < /br /pr>
/> Когда я получаю данные, которые он используется с длиной 8 или 32767, что означает, что это просто мусоровые данные < /p>
< /li>
При предпринимательстве программы IMU отправляет сначала несколько пакетов с длиной 32767, но только один раз отправляет упаковку с длиной 276. Zeros) < /p>
< /li>
< /ol>
Это Usuall вывод (числа - длина полученного пакета, когда INT низкий): < /p>
Код: Выделить всё
32767
32767
32767
32767
32767
276
Quaternion: [0.0000,0.0000,0.0000,0.0000]
Yaw: 0.0000 Pitch: 0.0000 Roll: 0.0000
8
8
8
8
< /code>
Тогда он либо продолжается с 32767 или 8, и я увидел, что это в основном случайно < /p>
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SPI_DEVICE "/dev/spidev0.0"
#define SPI_MODE SPI_MODE_0
#define SPI_SPEED 3000000 // 3 MHz
#define SPI_BITS 8
#define GPIO_CHIP "/dev/gpiochip0"
#define INT_LINE 25 // BCM GPIO25
#define PS0 17
#define PS1 27
#define RST 24
using namespace std;
float s16_to_float(int16_t val) { return val / 16384.0f; }
void send_rotation_vector_enable(int spi_fd) {
uint8_t RequestRotationVectorReport[] = {
0x15, 0x00, 0x02, 0x00, 0xFD, 0x28, 0x00, 0x00, 0x00, 0x20, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
struct spi_ioc_transfer tr{};
tr.tx_buf = (unsigned long)RequestRotationVectorReport;
tr.rx_buf = 0;
tr.len = sizeof(RequestRotationVectorReport);
tr.speed_hz = SPI_SPEED;
tr.bits_per_word = SPI_BITS;
if(ioctl(spi_fd, SPI_IOC_MESSAGE(1), &tr) < 0)
perror("SPI_IOC_MESSAGE send feature");
else
cout 1?1:t2; t2=t2
Подробнее здесь: [url]https://stackoverflow.com/questions/79747030/raspberrypi-connection-with-bno085-through-spi-connection-c[/url]
Мобильная версия