void GenericApp_Send_wendu_Message(void) { byte str[10];
//char strTemp[10]; byte temp;
temp = ReadDs18B20(); //读取温度数据
str[0] = ‘1’; //这里是,节点模块编号,想必这里也就是徐老师跟我讲的数据包的格式了吧。这里就是Ascii码值了吧
str[1] = temp/10+48;//把温度数据转换成字符 str[2] = temp+48; str[3] = ’ ‘;
先贴上以上代码,如上为什么需要加上48呢???(这应该属于C语言基础里面的东西,那么重新温习一遍吧!) int型和char型通用的,但是int型转char型需要加上48。原因是因为‘0’的ASCII值为48,那么对他进行偏移之后自然就是相对应的字符类型的数据。 所以数组里面存放的是ASCII码值,即是51或者是’3’,而Haluartwrite函数只对字符串输出有效,所以自然要加上48了,这就是原因。
case: 该终端发过来的簇浩互相匹配的话: if(1==pkt->cmd.Data[0]-48) //HalUARTWrite(0,&pkt->cmd.Data[0],1); //HalUARTWrite(0, “hello node 2\n”,sizeof(“hello node 1”)+1); HalUARTWrite(0, &pkt->cmd.Data[1], pkt->cmd.DataLength-1); //输出接收到的数据 // HalUARTWrite(0, &pkt->cmd.Data[1], 1); //HalUARTWrite(0, “\n”, 1); // 回车换行 //HalUARTWrite(0, &pkt->cmd.Data[2], 2); HalUARTWrite(0, “hello”, 5); uint8 wendu=(pkt->cmd.Data[1]-48)*10+pkt->cmd.Data[2]-48; // HalUARTWrite(0, &wendu, 2); if(wendu>fazhi) P1_3=1; else P1_3=0;
} }
也是同样的道理啊,之前加了48,现在如果要还原回去int的话,那么需要相应的减去48.但是还原完了之后,如果想要打印出48的话,那么还是得加上48,存放到一个字符串数组中,便于打印函数打印。节点匹配 if(1==pkt->cmd.Data[0]-48)也需要减去48,也是同样道理。
PS:之前对以上的概念不太清晰,导致老是调试出错。这样就实现了一个小小的智能控制(加上相应的驱动电路的话)。