Недавно я купил контроллер PTZ-камеры от arducam и нашел на github нечто вроде программного обеспечения API / контроллера (https://github.com/ArduCAM/PTZ-Camera-Controller). Модуль интегрирован с I2 C и имеет несколько функций в разных регистрах. Я пытался понять python -программу, но меня смутила одна строка, которая повторялась несколько раз в программе:
def read(self, I2C_address, register_address):
value = self.bus.read_word_data(I2C_address, register_address)
value = ((value & 0x00FF) << 8) | ((value & 0xFF00) >> 8) #This one
return value
def write(self, I2C_address, register_address, value):
if value < 0:
value = 0
value = ((value & 0x00FF) << 8) | ((value & 0xFF00) >> 8) #And this one
return self.bus.write_word_data(I2C_address, register_address, value)
Их можно использовать, например, для чтения или записи в масштабирование камеры -мотор. Двигатель имеет 2317 шагов, а диапазон масштабирования по умолчанию составляет 0-18000. Думаю, в этом есть смысл, потому что если вы, например, попытаетесь написать 18000 = 0x4650, вы получите:
value = ((0x4650 & 0x00FF) << 8 | (0x4650 & 0xFF00) >> 8))
Что должно равняться 2400, по моей оценке. Довольно близко к 2317. Однако:
Зачем им это делать, а не просто иметь диапазон ввода от 0 до 2317?