如何将arduino库代码重写为matlab脚本?

时间:2019-03-27 17:22:32

标签: c++ matlab arduino

大家早上好!

我正在一个大学项目中,我试图使用matlab脚本从加速度计(MMA7455)读取数据。除了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

希望大家能帮助我!

0 个答案:

没有答案