Барометр amp-b034 и Raspberry

Тема в разделе "Raspberry Pi", создана пользователем Nikolaiko, 2 июл 2018.

Метки:
  1. Nikolaiko

    Nikolaiko Нерд

    Доброго времени суток.
    Извините за, возможно, глупый вопрос, я только начинаю разбираться. Есть у меня такой барометр amp-b034, я его подключил к Малине. Он обнаруживается устройством и даже что-то выдает, если сделать команду i2cdump -y 1 0x5c. Но мне нужно считать данные с регистров и получить давление, которое он определяет. Я почитал LPS331.cpp и написал простой срипт на python (этот язык я еще не знаю как следует).

    Код (Python):

    #!/usr/bin/python

    import smbus
    import time
    import os

    DEVICE_ADDRESS = 0x5c
    DEVICE_REG_ADDRESS = 0x20
    ACTIVE_STATE_CONST = 0b11100000

    class Amper():
        b = smbus.SMBus(1)
        def Calib(self):
            self.b.write_byte_data(DEVICE_ADDRESS,DEVICE_REG_ADDRESS,ACTIVE_STATE_CONST)
           
        def getX(self):
            return self.b.read_byte_data(0x5c, 0x28)
           
        def getY(self):
            return self.b.read_byte_data(0x5c, 0x29)

        def getZ(self):
            return self.b.read_byte_data(0x5c, 0x2a)

    MMA7455 = Amper()
    MMA7455.Calib()

    time.sleep(1.0)

    x = MMA7455.getX()
    y = MMA7455.getY()
    z = MMA7455.getZ()

    d = x<<16|y<<8|z


    print(x,y,z)
    print(d)
     
    В нем объявляется класс нашего устройства. У него есть метод Calib, там в регистр . по адресу 0x20 устанавливается константа (это я в ссылке выше на гитхабе посмотрел). А дальше три метода которые читают данные из регистров в которых, по документации выдается давление.

    Но как эти данные потом собрать в одно число? Я пробовал три считанных байта объединять в одно число с помощью сдвигов, но получается ерунда. Может кто может подсказать?
     
  2. Daniil

    Daniil Гуру

    Там же по ссылке написано.
    Код (C++):
    return (int32_t)(int8_t)ph << 16 | (uint16_t)pl << 8 | pxl;
    Какая ерунда?
    С чего вы взяли что там ерунда?
    А не может ли быть, что вы получили число верное, но не смогли его правильно интерпретировать? Получая 3 байта вы получаете только код давления, далее его нужно привести к "человеческому" виду.
     
  3. Nikolaiko

    Nikolaiko Нерд

    Добрый день, спасибо за ответ.

    Я пробовал полученное число приводить в "человеческий вид", так же как написано в примере, но получалось именно не правильное давление - очень маленькое.

    Сегодня я попробовал поменять регистры местами.
    Код (Python):
    d = z<<16|y<<8|x
    вместо
    Код (Python):
    d = x<<16|y<<8|z
    И вот этот результат после преобразований получался как раз тем что нужно (выходило 749 мм.рт.ст). Думаю ошибка была в этом.
     
    Daniil нравится это.
  4. Daniil

    Daniil Гуру

    Логично...глупая опечатка, жалко, что сразу не заметили(
     
  5. arturpliev

    arturpliev Нуб

     
  6. arturpliev

    arturpliev Нуб

    Добрый вечер!
    Купил для внука Малину.
    как Питон переключать на русский.
    При загрузке на описании верхней строке справа стоит языковая кнопка,
    а у меня нет ее.
    Помогите, пожалуйста как переключаться на русский язык
    Артур Плиев
    arturpliev@gmail.com
     
  7. Mitrandir

    Mitrandir Гуру

    Правой кнопкой по часикам, в меню выбрать add/remove panel items
    Появится окно panel preferences
    На вкладке panel applets нажать кнопку add
    выбрать Keyboard Layout Handler.
    Нажать add затем закрыть окна.
    в углу появится флаг США
    Правой кнопкой на флаге - Keyboard Layout Handler Settings Screenshot_3.jpg
    Убрать галку Keep System layouts

    Нажать add и добавить языки
    Ниже установить комбинацию переключения.
    По умолчанию нифт+капс