ESP8266

kiselev
Offline
Зарегистрирован: 02.07.2016

Добрый день, у меня ESP8266 и акселирометр LSM 6DS3 необходимо устроить опрос датчика 2000 раз в секунду

Использовал библиотеку #include "SparkFunLSM6DS3.h" Очень медленная. Начал читать регистры. Вот код.

В итоге ничего не пишет. А через библиотеку все работает. Адрес тоже правильный.Весь гугл перерыл, что делат ь не знаю.Помогите пожалейста.Заранее спасибо.

#include <Wire.h>                              // Подключаем библиотеку Wire
int temp_address = 107;                         // Адрес(1001000) I2C-датчика температуры TC74A0-5.0VAT в десятичной нотации

uint8_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
void setup()
{
  Serial.begin(115200);                          // Инициализация последовательной передачи данных на скорости в 9600 бод
  Wire.begin();                                // Создаем Wire объект
}
 
void loop()
{
  // Отправка запроса
  Wire.beginTransmission(temp_address);        // Выбор ведомого устройства отправкой его адреса
  Wire.write(0);                               // Отправка 0, тем самым указывая что мы хотим прочитать данные из регистра температуры нашего датчика
  Wire.endTransmission();                      // Отправка стоп-бита, тем самым сообщаем об окончании записи на устройство
 
  Wire.beginTransmission(temp_address);
  Wire.write(0x3B);  // начинаем с этого регистра
  Wire.endTransmission(false);
  while(Wire.available() == 0);{
  Wire.requestFrom( temp_address , 14, true); // читаем все регистры
  AcX = Wire.read() << 8 | Wire.read(); // 0x3B
  AcY = Wire.read() << 8 | Wire.read(); // 0x3D
  AcZ = Wire.read() << 8 | Wire.read(); // 0x3F
  Tmp = Wire.read() << 8 | Wire.read(); // 0x41
  GyX = Wire.read() << 8 | Wire.read(); // 0x43
  GyY = Wire.read() << 8 | Wire.read(); // 0x45
  GyZ = Wire.read() << 8 | Wire.read(); // 0x47
  Serial.print(AcX);
  }
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

значить, надо заглянуть во внутренности библиотеки, поработать проктологом и понять, где у неё запор.