pigsanddogs(我爱吃猪肉,但是长不胖,为什么??) 兄进来收分。

lsftest 2004-03-18 01:53:25
2.我用的是2.2版,现在看到了,与我用“串口编程调试精灵”得到的结果一样,是一串00与f0,估计这两个软件的原理差不多。
3.我设的端口设置就是9600,8,n,1,今天试了一下,正常按一个键是收到36个字节,有时收到34个字节是因为按键的力度不够。。真是想不通跟力度还有关系。
4.现在已基本可以分清按键了,但仍是一串00、f0,只是根据它们的不同排列组合来判断,
例如:
If strHex = "00F0F000000000F0F00000F0F0F0F00000F0F0F0F0F0F0F00000000000000000F0000000" Then
frmMain.cmdClear_Click
x = Shell("D:\WINXP\System32\calc.exe", vbNormalNoFocus)

ElseIf strHex = "00F0F000000000F0F00000F0F0F0F0000000F0F0F0F0F0F000F0000000000000F0000000" Then
frmMain.cmdClear_Click
x = Shell("D:\WINXP\System32\notepad.exe", vbNormalNoFocus)
ElseIf strHex = "00F0F000000000F0F00000F0F0F0F00000F000F0F0F0F0F00000F00000000000F0000000" Then
frmMain.cmdClear_Click
x = Shell("D:\WINXP\System32\mspaint.exe", vbNormalNoFocus)
Else
End If
但看着这么一大串东西总有点不那么舒服,真不知那个网站主人的“3CC3827D”之类键码是怎样得到的。
5.经兄台指点,comprobe也可以用了,得到的结果跟“串口编程调试精灵”、scommassistan一样,是一大串00、f0。
6.无论是“串口编程调试精灵”、还是scommassistan,在打开串口的时候总会收到数目不定的二三十个字节,要把它们清空了才能正常运作对按键进行判断,但应该如何让程序自己判断清空这些数据以等待遥控按键的数据(它们每次的长度都不同,不知应该在什么时候把它们清空)?
7.不太稳定,用四五次就会出现一次故障,症状为设为接收状态时或收到按键信息时就会拼命的添加数据,但我明明只按了一下键。
8.粗略来说,我的目的已大致达到,能分清按键了,虽然方法别扭一点。所以特开此帖放分感谢兄台。
9.我上面提到的那些问题,如果兄台有心得,还请再赐教。
...全文
97 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsftest 2004-03-20
  • 打赏
  • 举报
回复
来了csdn一年多一点,提过六个问题,只有这次的结果比较令我满意。。。。结贴。。。
海牛 2004-03-18
  • 打赏
  • 举报
回复
嘿嘿,,猪兄,,,赚到了哦!!!!
daisy8675 2004-03-18
  • 打赏
  • 举报
回复
樓上的分多。能不能談條件,蹭點呢?呵呵…
lsftest 2004-03-18
  • 打赏
  • 举报
回复
pc红外线遥控器软件捕捉到的键码:
按键1:3CC3807F
按键2:3CC3817E
按键3:3CC3827D
按键4:3CC3837C
按键5:3CC3847B

我自己编程收到的数据:
按键1:00F0F000000000F0F00000F0F0F0F00000F0F0F0F0F0F0F00000000000000000F0000000
按键2:00F0F000000000F0F00000F0F0F0F0000000F0F0F0F0F0F000F0000000000000F0000000
按键3:00F0F000000000F0F00000F0F0F0F00000F000F0F0F0F0F00000F00000000000F0000000
按键4:00F0F000000000F0F00000F0F0F0F000000000F0F0F0F0F000F0F00000000000F0000000
按键5:00F0F000000000F0F00000F0F0F0F00000F0F000F0F0F0F0000000F000000000F0000000

用comprobe查看的数据与我的一样,但我发现在我的程序中改变mscomm控件的InputLen和InputMode属性会令comprobe得到不同的结果,为这个花了不少时间,最后试出InputLen=0,InputMode=0的情况下comprobe的数据与我的一样。另外,在comprobe的reading data区明明看到有36个字节,但在它右边的状态区却显示readingport success(34Bytes),少了两个字节,不解。

pc红外线遥控器软件的编码方式仍未搞清,但这不重要,明白了原理,我可以自己做处理。最重要是搞清我收到的数据是否正确。

现在剩下两个问题:
1。无论是“串口编程调试精灵”、还是scommassistan,在刚刚打开串口的时候总会收到数目不定的二三十个字节,要把它们清空了才能正常运作对按键进行判断,但应该如何让程序自己判断清空这些数据以等待遥控按键的数据(它们每次的长度、内容都不同,不知应该在什么时候把它们清空)?串口成功打开后会不会触发些什么事件或者返回些什么消息?

2.上面第七点的情况是这样:
打开我的程序,进入接收状态,按几个键,正常。于是我退出程序。
重复上面的操作三或四次。仍正常,但到第四或第五次,当进入接收状态或按了一下键的时候,程序就会好象接收到很多数据似的拼命显示,同时接收计数器也会不断增加,导致最后出错,但关掉它从新运行,又正常了。。。如此不断反复。

明天晚上或后天结帖。
简易无忌 2004-03-18
  • 打赏
  • 举报
回复
只想收藏!
pigsanddogs 2004-03-18
  • 打赏
  • 举报
回复
注: 那波形图是表示 10101010 负电压表示1.
pigsanddogs 2004-03-18
  • 打赏
  • 举报
回复
补充, 原来00是表示1, f0是表示0!!
如果没有猜测错的话,
3cc3827d 应该是下面这个
F0F000000000F0F00000F0F0F0F0000000F0F0F0F0F000F0F00000000000F000
即用f0表示0,00表示1,
结果跟你刚刚的数据非常相似
这个硬件原理我不懂,不过我觉得下面这种现象非常的象!


串口一般是5~15伏的电压供电,在txd输入角上一般是一个付电平,
如果需要发送数据,则需要一个高电平的起始位,然后发送数据,最后有一个停止位,
然后是若干空闲时间(等待下一个字符,继续保持底电平)。
________ -_-_-_-_-_ _ ____________
这是8,n,1的波形图, 表示01010101(中间的波形)即是 66这个字节
程序是接收一个字符后,等待电压的跃变(起始位),知道下一个字符到达


我猜测红外可能有3中状态, 一种是关闭状态, 第二种是开启状态, 第3中是发送数据状态
当关闭的时候,无电压, 于是不产生任何状态
当开启的时候,负电压, 在这个电压中,产生震荡, 不断的输出00
发送状态时,变化电压, 先发送一个F0表示开始(但这个f0也算数据位的一部分?这个要多尝试
才知道),然后正常接收32个字节, 然后是空闲周期, 再等待下一个f0的到来.
如果连续几次按键,可能会让红外临时的开启, 不断的输入00
如果在comm open的时候,以及连续按键产生的故障,都是接收到连续相同的00, 表示
工作原理如此.
呵呵, 实践证明一切.
pigsanddogs 2004-03-18
  • 打赏
  • 举报
回复
如果确实用comprobe也是收到这个数据,表示这个作者也确实是收到了这个数据, 不过他处理过了, 好象只能收到2个字节,1个是00,2个是f0,我想作者应该把这些字符用位表示,拼出来的字节吧。 那么 如果00表示0, f0表示1的话,
3CC3827D 就应该是
0000f0f0f0f00000f0f000000000f0f0f00000000000f00000f0f0f0f0f000f0
32个字节,我估计可能有2~4个字节的头部吧。
看看你按哪个键,作者的3CC3827D能响应,然后自己获取这个键的信息,是否包括了这个
字节流, 多试几个, 就可以看到头部了, 而且我想,做的好的头部是不应该在数据中
有相同信息的。
另外第7点没太明白。
lsftest 2004-03-18
  • 打赏
  • 举报
回复
原帖:
http://expert.csdn.net/Expert/topic/2851/2851115.xml?temp=.9282648

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧