看样子楼主问了很多难题
我就挑前面两个简单的来试试吧
关于这个数组
byte recData[16] = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
看来很复杂,也没说明除了前两个之外其他的要怎么弄,所以我就只把前两个抽出来处理好了
另外,无论是16进制还是10进制,在无符号数上的值是完全一样。当然考虑到你可能需要用字符串形式打印出来,那么下面的程序中也给出了16进制的打印的语句。
要说明的是两个8位无符号数移位相加之后会的得到的是一个16位无符号数,求得这个16位无符号数,我这边也就技术冻结了。
之后什么浮点还要除法运算得太困难了,我能想到的是要么找个有FPU的高端处理器,要么找个能通过多次执行乘法运算来实现多位浮点除法的数学库来计算。总之剩下的楼主自己想办法解决吧
- void setup() {
- //开动串口
- Serial.begin(9600);
- delay(100);
-
- byte recData[16] = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- //先把数组前两个拿出来
- byte b_high=recData[1];
- byte b_low=recData[0];
-
- //然后打印看看 16进制 长的是啥样
- Serial.println(String(b_high,HEX));
- Serial.println(String(b_low,HEX));
-
- //接着弄个16位无符号数来保存结果
- uint16_t my_result=(b_high << 8)+b_low;
-
- //最后显示结果 16进制
- Serial.println(String(my_result,HEX));
- //10进制
- Serial.println(String(my_result));
- }
- void loop() {
- delay(5000);
- Serial.println("It`s done.");
- }
复制代码
下面是运行结果:
16:48:16.913 -> 1
16:48:16.913 -> 40
16:48:16.913 -> 140
16:48:16.913 -> 320
16:48:16.913 -> It`s done.
|