ASSIC码里,我们知道,回车符等同于'\n'。
但是今天coding的时候却发现一件有意思的事情,呵呵,
且听我慢慢道来。
任务:按照—"#0P1500#1P2500<回车>"的格式去控制舵机。
在VS里通过CSerialPort类发送如下字符串(unsigned char 类型):"#0P1500#1P2500\n",发现舵机没有反应。
但是通过串口调试助手在发送区内输入:“#0P1500#1P2500<回车>”,舵机却能够正常工作,这就很诡异了,为什么发送了同样的东西,却有不同的效果呢?难道是自己写的串口类有问题?
于是采用如下方法:将(公口)串口1的3脚发送端和(公口)串口2的2脚接收端用导线连在一起,然后让自己编写的程序通过串口1发送命令字符串,让串口调试助手监听串口2的接收端,这样尝试了一下,发现串口调试助手收到的东西的确是"#0P1500#1P2500<回车>"的格式,那这究竟是什么问题呢?无奈之下,拿起示波器,抓串口波形!
不抓不要紧,一抓吓一跳,串口上收到的电压竟然有10V多(怀疑是探头用了x10),当然这不是关键。
关键问题是,这一大串波形,我抓了这个,忘了那个,没法对比,于是我就用U盘把波形保存起来,放在电脑上去了,哈哈,很爽啊。
在电脑上一看,看出问题了,原来,在串口助手中发出的回车符并不是'\n',而是由两个字符构成的:“0x0D 0x0A”!再次到串口调试助手中验证,输入区域内单敲一个回车符,然后点击“16进制显示”,出来了....:“0x0D 0x0A”!
到此为止,问题终于得到解决。成功。