我尝试显示从串行接收的值,但Matlab不接受十进制数字结果。 我想从设备接收A = 0.123,将值乘以1000,然后通过串口发送到matlab。
matlab脚本接收123但是当为了得到原始值而划分该数字时,matlab显示为0.
consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'int32');
disp(consRollKpTemp);
consRollKp = consRollKpTemp/1000;
disp(consRollKp);
返回
consRollKpTemp:
123
consRollKp:
0
我认为问题是typecast(X,type)函数
将X中的数值转换为由type。
指定的数据类型
我改为:
consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'single');
答案 0 :(得分:3)
问题是你使用int32
作为类型,即你只有整数,0.23正确舍入为0.尝试在变量分割前将变量consRollKp
强制转换为double
它是1000:
consRollKp = double(consRollKpTemp) / 1000;
澄清:将typecast
与single
一起使用将无效。 Typecast转换数据类型,无需更改基础数据。由于single
是一个浮点数,uint8
和int32
是整数类型,因此typecast
之间的typecast
不会产生预期的结果。
尝试int32
到uint32
(或可能是dobule()
),然后在第二步中使用single()
或{{1}}将此变量转换为浮点数类型。最后你应该能够除以1000并得到正确的结果。