Как прочитать адрес двухбайтового регистра с помощью wire библиотеки arduino
Я хочу прочитать регистр 0x012A с адреса I2C устройства 0x0A, значение, хранящееся в регистре, равно двум байтам, если адрес регистра равен одному байту, я могу использовать Wire.requestFrom и указать адрес регистра и сколько байтов я хочу прочитать, поскольку здесь адрес самого регистра 2 байта, я бит сбит с толку . может ли кто-нибудь помочь в этом отношении.
@Revanth A, 👍1
Обсуждение1 ответ
я могу использовать Wire.requestFrom и указать адрес регистра и количество байтов, которые я хочу прочитать
Итак, вы даете ему 2
, чтобы запросить 2 байта.
Затем вы объединяете их. Как вы это сделаете, зависит от того, что представляют собой байты. Если первый - это верхний байт, а второй - младший байт 16-битного значения, то вы должны:
uint8_t b1 = Wire.read();
uint8_t b2 = Wire.read();
uint16_t val = (b1 << 8) | b2;
Если все наоборот, то просто поменяйте местами переменные в разделе объединения.
Однако, если значения имеют какое-то другое расположение (недавно я видел что-то, что имело два регистра с 12-битным значением с перекрывающимися битами), вам придется объединить его так, как требуется для этого конкретного расположения.
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отправить строку на мастер с помощью i2c
- Как выбрать альтернативные контакты I2C на ESP32?
- Что означает в I2C «NACK получен»?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Несколько датчиков I2C с одинаковым адресом
Взгляните на https://github.com/rodan/ds3231/blob/master/ds3231.cpp#L409-L413 . Насколько я могу судить. Вы начинаете передачу на устройство; вы записываете два своих байта адреса реестра; затем завершаете передачу. После этого вы используете
requestFrom
для чтения любого количества байтов (в вашем случае их тоже бывает два)., @Gerben