Почему 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(), а потом только один? Он чем-то отличается?

, 👍1

Обсуждение

это запись (байт). чтобы записать два байта в буфер TX, его нужно вызвать дважды, @Juraj


1 ответ


Лучший ответ:

1

Правда в том, что библиотека Arduino Wire отправляет данные, только если вызывается endTransmission. До тех пор он собирает данные в буфере TX. Версия функции write, используемая в вашем фрагменте, добавляет байт в буфер TX.

При использовании I2C обычно первым записываемым байтом является адрес записываемого регистра. Затем следуют данные. В случае первой части вашего фрагмента данные имеют длину всего один байт.

Во второй части сначала отправляется адрес регистра с помощью write, а затем запрашиваются данные из этого регистра и 3 следующих регистров.

,