i2c последовательное чтения регистров
- Войдите на сайт для отправки комментариев
Вс, 08/04/2018 - 09:39
пытаюсь считать регистры 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;
}
не тот скетч, исправил.
пытаюсь считать регистры 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; }Данная функция чтения вообще ерунду какую-то делает. Какой смысл в цикле на строках 23-24?
https://www.arduino.cc/en/Tutorial/MasterReader