http://www.javashuo.com/article/p-tgkajzhu-cg.htmlhtml
这节作个上位机控制Wi-Fi引脚输出的PWM占空比信号,灯的亮度就能够用上位机控制了数组
你们能够本身扩展程序控制舵机的旋转角度缓存
双击函数
textBox3.Text = trackBar1.Value.ToString();//显示当前滑动条的值
而后规定下协议 注意为了你们之后作项目的通用性 数据传输用测试
讲一个知识点spa
你们传输十进制数据怎么传输的,,传输浮点型数据怎么传输的 你们百度下IEEE7543d
看一下用它作数据转换的妙用code
我直接说了htm
假设你要发送220.5blog
这样作
我们新建一个data_dispose.h文件
为了预防别人用个人源码在C++里面编译
typedef union Resolve//解析数据 { char Data_Table[4];//16进制四字节表示形式 float DataF;//浮点型 long DataInt;//有符号整形 unsigned long DatauInt;//无符号整形 }ResolveData;
如今看使用
假设我采集了仪器仪表 仪器仪表就是IEEE754规范 发过来的220.5的 浮点型数据 0x43 0x5C 0x80 0x00
我如今须要转化为220.5
注意一件事情 0x43 0x5C 0x80 0x00 是高位数据在前
举个例子:259
化为16进制表示是 0x01 0x03 这样排序就是高位在前
16进制怎么转成259呢 就是 0x01==1 1乘于2的8次方 再 加上 0x03 就是 3
1*256 + 3 = 259
若是计算完之后内存里面是这样存储的
说个名词:大端模式
若是数据的高位存储在了存储地址的低位 数据的低位存储在了存储地址的高位 -----名称:大端模式
与之相反的是小端模式
数据的低位存储在了存储地址的低位 数据的高位存储在了存储地址的高位 -----名称:小端模式
若是你作过仪器仪表,或者用过仪器仪表 应该知道,工业里面常常用到
而后提醒一下
51单片机存储数据是大端模式
STM32 是小端模式
电脑:小端模式
手机:好像是大端模式...忘记了
咱用的这个8266 小端模式
有人可能会问,具体怎么看出来的....
接着看
首先要记着
注意一件事情 0x43 0x5C 0x80 0x00 是高位数据在前 低位数据在后
刚才我测试了下,官方给的printf不支持打印浮点数.......
因此我本身写了个printf功能
void sendstring(unsigned char *string)//此处*string至关于数组 { while(*string!='\0')//判断是否到字符串末尾 { USART_SendData(UART0, *string); string++; } } void uart_printf(const char *fmt,...)//和printf同样使用 { va_list ap; char string[200];//缓存,若是发送的超过此数,请自行增大 va_start(ap,fmt); vsprintf(string,fmt,ap);//此处也可使用sprintf函数,用法差很少,稍加修改便可,此处略去 sendstring(string); va_end(ap); }
先打印看看
如今咱 把浮点型的数据转16进制数组存储
出来是 0xcd 0x4c 0xbe 0x43
因为8266是 小端模式 因此反着排的 低位在前 高位在后
上面主要说明的是 如何按照IEEE754规约 进行 16进制和浮点数的转化
其实测试大端 小端 很简单
你反正知道 259是 0x01 0x03 0x01是高位
你能够
说明数据是低位存在低位 高位存在高位,因此是小端模式
其实只要知道就能够
真不行你解析的时候 一看解析不对颠倒一下
其他的仍是放到下节吧,先消化消化