i2c последовательное чтения регистров

netromnik
Offline
Зарегистрирован: 08.04.2018

пытаюсь считать регистры gy-291

такой вопрос возможно ли считать потоком регистры или каждый раз надо перезапускать протокол для обращения к регистрам.

я пользоюсь данной способом считывания

#include <Wire.h>
uint8_t IMUAddress = 0x53;

void setup() {
  Wire.begin();
  Serial.begin(9600);
}
void loop() {
  uint16_t date[3];
 data[0] = i2cRead(0x1E,8);
 Wire.endTransmission(true); 
 data[1] = i2cRead(0x1F,8);
 Wire.endTransmission(true); 
 date[2]=((data[0] << 8) | data[1]);
 Serial.print(date[2]);
}
uint8_t i2cRead(uint8_t registerAddress, uint8_t nbytes) {
uint8_t* data = i2cRead(0x3B,14);
uint8_t date;
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.endTransmission(false); 
  Wire.requestFrom(IMUAddress, nbytes); 
  for(uint8_t i = 0; i < nbytes; i++)
    data = Wire.read();
  return data;
}

 

netromnik
Offline
Зарегистрирован: 08.04.2018

не тот скетч, исправил.

netromnik пишет:

пытаюсь считать регистры gy-291

такой вопрос возможно ли считать потоком регистры или каждый раз надо перезапускать протокол для обращения к регистрам.

я пользоюсь данной способом считывания

#include <Wire.h>
uint8_t IMUAddress = 0x53;

void setup() {
  Wire.begin();
  Serial.begin(9600);
}
void loop() {
  uint16_t date[3];
 data[0] = i2cRead(0x1E,8);
 Wire.endTransmission(true); 
 data[1] = i2cRead(0x1F,8);
 Wire.endTransmission(true); 
 date[2]=((data[0] << 8) | data[1]);
 Serial.print(date[2]);
}
uint8_t i2cRead(uint8_t registerAddress, uint8_t nbytes) {
uint8_t date;
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.endTransmission(false); 
  Wire.requestFrom(IMUAddress, nbytes); 
  for(uint8_t i = 0; i < nbytes; i++)
    data = Wire.read();
  return data;
}
sadman41
Offline
Зарегистрирован: 19.10.2016

Данная функция чтения вообще ерунду какую-то делает. Какой смысл в цикле на строках 23-24?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015