Доброе утро всем!
Я работаю над проектом колледжа, в котором я пытаюсь прочитать данные с акселерометра (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
Надеюсь, вы, люди, можете мне помочь!