大家早上好!
我正在一个大学项目中,我试图使用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
希望大家能帮助我!