Как переписать код библиотеки Arduino в скрипт Matlab? - PullRequest
1 голос
/ 27 марта 2019

Доброе утро всем!

Я работаю над проектом колледжа, в котором я пытаюсь прочитать данные с акселерометра (MMA7455), используя скрипт Matlab.Я не смог найти много информации о том, как работать с этим устройством, кроме библиотеки Arduino.

Я конвертировал часть кода, который находится на C / C ++, но теперь я застрял в этомотчасти потому, что я не знаком с языком C / C ++.

Вот код, который мне нужно преобразовать.

Предполагается, что эта часть считывает 10-битную информацию, предоставляемую датчиком, который работает по протоколу I2C.

int16_t MMA_7455::readAxis10(char axis)
{
  uint8_t  reg[2]  = {0};
  uint8_t  mask[2] = {0};
  uint16_t u_val   = 0;
  int16_t  s_val   = 0;

  switch(axis)
  {
    case 'x':
    case 'X':
      reg[0] = XOUTL_OFF; mask[0] = XOUTL_MASK;
      reg[1] = XOUTH_OFF; mask[1] = XOUTH_MASK;
      break;
    case 'y':
    case 'Y':
      reg[0] = YOUTL_OFF; mask[0] = YOUTL_MASK;
      reg[1] = YOUTH_OFF; mask[1] = YOUTH_MASK;
      break;
    case 'z':
    case 'Z':
      reg[0] = ZOUTL_OFF; mask[0] = ZOUTL_MASK;
      reg[1] = ZOUTH_OFF; mask[1] = ZOUTH_MASK;
      break;
    default:
      return 0;
  }

  u_val  = this->readReg(reg[0]) & mask[0];
  u_val |= (this->readReg(reg[1]) & mask[1]) << 8;
  s_val  = (int16_t)u_val;

  /* fill of ones if negative value
   * to make it valid in 16 bit format */
  if(s_val & (1 << 9))
  {
    s_val |= 0xFC00;
  }

  return s_val;
}

Это то, что пока получилось:

function s_val = readAxis10(dev, axis)
    reg = zeros(1,3);
    mask = zeros(1,3);

    switch(axis)
        case 'x'
            reg(1) = hex2dec("00"); mask(1) = hex2dec("FF"); %10bits Output X LBS
            reg(2) = hex2dec("01"); mask(2) = hex2dec("03"); %10bits Output X MBS
        case 'y'
            reg(1) = hex2dec("02"); mask(1) = hex2dec("FF"); %10bits Output Y LBS
            reg(2) = hex2dec("03"); mask(2) = hex2dec("03"); %10bits Output Y MBS
        case 'z'
            reg(1) = hex2dec("04"); mask(1) = hex2dec("FF"); %10bits Output Z LBS
            reg(2) = hex2dec("05"); mask(2) = hex2dec("03"); %10bits Output Z MBS
    end
    u_val = bitand(readRegister(dev, reg(1)),mask(1));
    u_val = bitor(u_val, bitshift(bitand(readRegister(dev, reg(2)),mask(2)),-8));
    s_val = uint16(u_val);

    if (bitand(s_val, bitshift(1,9)))
        s_val = bitor(s_val, hex2dec("FC00"));
    end
end

Надеюсь, вы, люди, можете мне помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...