Я использую беспроводной модуль Synapse, на котором есть ATMEL ATmega128. Я подключил к нему 3-х осевой акселерометр ADXL345, и я общаюсь с ним через I2C. Модуль Synapse использует подмножество python в качестве языка сценариев.ADXL345 Преобразование данных с акселерометром
Когда я прочитал данные XYZ, я возвращаю массив из 6 байтов. EC FF EF FF 14 01
Выходные данные представляют собой два дополнения к DATAx0 в качестве младшего значащего байта, а DATAx1 - как самый старший байт. Таким образом, в приведенном выше примере EC FF является выходом для оси x.
Я изо всех сил пытаюсь превратить это в силу G. Техническое описание говорит в режиме полного разрешения (в котором я участвую) разрешение вывода увеличивается с диапазоном g , установленным битами диапазона для поддержания масштабного коэффициента 4 мг/LSB.
Я попытался следующие:
x0 = ord(data[0])
x1 = ord(data[1])
raw = x0+(256*x1)
но стоимость сырья не имеет никакого смысла. Как преобразовать эти два байта в целое число со знаком?
Дополнительная информация Когда я делаю вызов читать ADXL345:
data = readAdxls(6)
он возвращает строку байтов считаны из внешнего устройства I2C.
Xlsb = data[0] # EC - 236
Xmsb = data[1] # FF - 255
Ylsb = data[2] # EF - 239
Ymsb = data[3] # FF - 255
Zlsb = data[4] # 14 - 20
Zmsb = data[5] # 01 - 1
Так XLSB является наименее значимым байт и Xmsb является наиболее значимым байт. Это целые числа
Я предполагаю, что я просто не понимаю дополнение двоеточия и как объединить эти 2 целых числа/байты в целое число со знаком.
Насколько полно это подмножество? Можете ли вы использовать модуль 'struct'? – MaxNoe
Нет, модуль struct не является частью языка. FWIW, нет поддержки для поплавков. Он рассчитан на очень легкий вес. – cce1911
Прошу прощения, но если два байта являются EC и FF, будучи вторым самым значительным, правильный порядок - FF EC. Поэтому для преобразования вам просто нужно: (большинство << 8 | наименее) Это даст вам необработанные данные, а затем умножьте его на выбранное разрешение датчика. Если вы переходите на максимальное разрешение, просто умножайтесь на 0,0039 – Lornioiz