Почему Wire.write дважды?
Я проверяю пример для MPU6050 и добрался до этой части
Wire.beginTransmission(0x68); //начнем, отправляем адрес подчиненного устройства (в данном случае 68)
Wire.write(0x1B); // Мы хотим записать в регистр GYRO_CONFIG (1B hex)
Wire.write(0x10); // Установите биты регистра как 00010000 (полная шкала 1000dps)
Wire.endTransmission(true); //Заканчиваем передачу гироскопом
Serial.begin(9600); //Не забудьте установить эту же скорость передачи для последовательного монитора
time = millis(); // Начать отсчет времени в миллисекундах
/*Here we calculate the gyro data error before we start the loop
* I make the mean of 200 values, that should be enough*/
if(gyro_error==0)
{
for(int i=0; i<200; i++)
{
Wire.beginTransmission(0x68); //начнем, отправляем адрес подчиненного устройства (в данном случае 68)
Wire.write(0x43); //Первый адрес данных гироскопа
Wire.endTransmission(false);
Wire.requestFrom(0x68,4,true); //Просим всего 4 регистра
Почему сначала два последовательных метода wire.write(), а потом только один? Он чем-то отличается?
@higunner, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 1
Правда в том, что библиотека Arduino Wire отправляет данные, только если вызывается endTransmission
. До тех пор он собирает данные в буфере TX. Версия функции write
, используемая в вашем фрагменте, добавляет байт в буфер TX.
При использовании I2C обычно первым записываемым байтом является адрес записываемого регистра. Затем следуют данные. В случае первой части вашего фрагмента данные имеют длину всего один байт.
Во второй части сначала отправляется адрес регистра с помощью write
, а затем запрашиваются данные из этого регистра и 3 следующих регистров.
,
@Juraj
Смотрите также:
- Изменение адреса I2C MPU-6050
- MPU6050 не выдает выход
- Использование MPU-6050 без I2C
- Мультиплексор Adafruit MPU-6050 и adafruit I2C
- Несколько устройств I2C, подключенных к одному Arduino Uno?
- запрос члена "X" в чем-то, кроме структуры или союза
- MPU-6050 с Arduino – вскрытие
- Код показывает одинаковые углы для всех трех осей гироскопа MPU
это
запись (байт)
. чтобы записать два байта в буфер TX, его нужно вызвать дважды, @Juraj