Всем привет, пишу прошивку для опроса датчиков BMX-055, использую мультиплексор PCF8575, подключение стандартное I2C к ардуино uno. Скетч компилируется, но вывод по нулям.
Библиотека для работы с датчиком: https://wiki.iarduino.ru/page/Trema_IMU9/
Библиотека для работы с мультиплексором(I2C расширителем портов): https://github.com/xreef/PCF8575_library
Всегда выводятся нули, причем если использовать этот "мультиплексор" с ESP-WROOM32, то все работает. В чем может быть проблема?
Мой код для опроса всех датчиков и вывода показаний только гироскопа:
Библиотека для работы с датчиком: https://wiki.iarduino.ru/page/Trema_IMU9/
Библиотека для работы с мультиплексором(I2C расширителем портов): https://github.com/xreef/PCF8575_library
Всегда выводятся нули, причем если использовать этот "мультиплексор" с ESP-WROOM32, то все работает. В чем может быть проблема?
Мой код для опроса всех датчиков и вывода показаний только гироскопа:
C++:
#include <Wire.h>
#include <iarduino_Position_BMX055.h>
#include <PCF8575.h>
iarduino_Position_BMX055 sensorA(BMA); // Создаём объект sensorA указывая что ему требуется работать только с акселерометром.
iarduino_Position_BMX055 sensorG(BMG); // Создаём объект sensorG указывая что ему требуется работать только с гироскопом.
iarduino_Position_BMX055 sensorM(BMM);
iarduino_Position_BMX055 sensorALL(BMX);
#define SENSOR_CNT 6
#define SENSORS_ON true
#define I2C_SWITCH_ADDRESS = 0x20;
PCF8575 pcf8575(0x20);
typedef struct{
float ax;
float ay;
float az;
float gx;
float gy;
float gz;
float mx;
float my;
float mz;
} sensor_t;
sensor_t sensors[SENSOR_CNT];
void sensors_select(int senson_number) {
for (int i = 0; i < SENSOR_CNT; i++) {
if ( senson_number != i)
pcf8575.digitalWrite(i, LOW);
}
pcf8575.digitalWrite(P1, HIGH);
delay(10);
}
float q[4] = {1.0f, 0.0f, 0.0f, 0.0f};
float GyroMeasError = PI * (40.0f / 180.0f);
float beta = sqrt(3.0f / 4.0f) * GyroMeasError;
float deltat = 0.0f;
uint32_t Now = 0;
uint32_t lastUpdate = 0;
void _init(){
for(int i =0; i<SENSOR_CNT; ++i){
sensors_select(i);
sensorA.begin();
sensorG.begin();
sensorM.begin();
}
}
void sensors_fill(int sensor_number) {
sensors_select(sensor_number);
sensorA.read(BMA_M_S);
sensors[sensor_number].ax = sensorA.axisX;
sensors[sensor_number].ay = sensorA.axisY;
sensors[sensor_number].az = sensorA.axisZ;
sensorG.read(BMG_DEG_S);
sensors[sensor_number].gx = sensorG.axisX;
sensors[sensor_number].gy = sensorG.axisY;
sensors[sensor_number].gz = sensorG.axisZ;
sensorM.read(BMM_MG);
sensors[sensor_number].mx = sensorM.axisX;
sensors[sensor_number].my = sensorM.axisY;
sensors[sensor_number].mz = sensorM.axisZ;
}
void setToSerial(){
for(int i =0; i<SENSOR_CNT; ++i){
Serial.print(i);Serial.print(" ");
Serial.print(sensors[i].gx);Serial.print(" ");
Serial.print(sensors[i].gy);Serial.print(" ");
Serial.print(sensors[i].gz);Serial.println(" ");
}
}
void setup() {
Wire.begin();
Serial.begin(115200);
while(!Serial){}
for (int i = 0; i < SENSOR_CNT; i++)
pcf8575.pinMode(i, OUTPUT);
pcf8575.begin();
_init();
}
void loop() {
//Now = micros();
//deltat = ((Now - lastUpdate)/1000000.0f);
//lastUpdate = Now;
for(int i =0;i<SENSOR_CNT;++i){
sensors_fill(i);
}
setToSerial();
}