极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16416|回复: 4

【求助】USB转串口数据获取不正确

[复制链接]
发表于 2014-4-25 08:39:37 | 显示全部楼层 |阅读模式
本帖最后由 Stormer 于 2014-4-25 09:02 编辑

我想连接我的USB键盘到ARUIDNO UNO上。所以我把USB键盘的4根线连接到ARDUINO,然后代码如下。

运行的时候有几个错误:

1、ARDUINO串口接收过来的数据跟ASCII码不对应,比如我按下键盘的数字1键,正确的话应该显示10进制的ASCII码 49,可是现在得到的数据是139;

2、每次按下键盘按键,会获取到多个值回来。如果说是我按键滞留时间长,那么返回值也应该都一样啊,但是现在返回的是多个不同的值。

3、如果我把USB的正电压数据线接在UNO的数字接口1上,串口监视器会不停的显示255.我并没有写发送数据的代码啊。

4、除了下面这种读取串口数据的方法,还有什么其他办法吗?听有的朋友说推荐使用中断的方式来读取。能不能简单介绍一下?我刚学单片机,理解中断,但是没有这样读取过串口数据。 :(

请问这些情况是怎么造成的,如何解决呢?多谢!~




USB线的说明:
红线:电源正极(接线上的标识为:+5V或VCC)
黑线:接地(标识为:GROUND)
白线:负电压数据线(标识为:Data-或USB Port -)
绿线:正电压数据线(标识为:Data+或USB Port +)

红线我接到5V,黑线接到GND,白线接到数字接口0,绿线接到数字接口1.



源码:
void setup()
{
  Serial.begin(9600); //设置波特率为9600,一般是这个波特率
}

void loop()
{
if(Serial.available()>0)//如果串口有数据进入的话
  {
    int iGot = Serial.read();//每次读一个字符,是ASCII码的
    Serial.println( iGot, DEC);
      //delay(100);
  }
}

串口监视窗(按下一次数字1键返回的内容,多次按下返回的始终都是这几个值):








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-4-25 08:49:30 | 显示全部楼层
不知道你怎么连接的?

有2点:

1.键盘使用的code和ascii是不同的,具体请参阅ps2相关资料

2.按下和抬起键是两个事件,所以有2个code
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-25 08:52:52 | 显示全部楼层
本帖最后由 Stormer 于 2014-4-25 08:59 编辑
zoologist 发表于 2014-4-25 08:49
不知道你怎么连接的?

有2点:


USB线的说明:
红线:电源正极(接线上的标识为:+5V或VCC)
黑线:接地(标识为:GROUND)
白线:负电压数据线(标识为:Data-或USB Port -)
绿线:正电压数据线(标识为:Data+或USB Port +)

红线我接到5V,黑线接到GND,白线接到数字接口0,绿线接到数字接口1.



原来还有抬起的事件!太好了~  多谢扫盲!我去找找PS2键盘的资料。
回复 支持 反对

使用道具 举报

发表于 2014-4-25 13:10:40 | 显示全部楼层
呃 你这样的连接好像很奇怪啊。 usb信号不是串行数据,应该是差分信号吧?

直接接收到的数据应该是完全错误的啊?

不知道有没有高手指点一下?
回复 支持 反对

使用道具 举报

发表于 2014-4-25 15:56:42 | 显示全部楼层
不错,{:soso_e179:}{:soso_e179:}{:soso_e179:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-11 03:55 , Processed in 0.078236 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表