Stormer 发表于 2014-4-25 08:39:37

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

本帖最后由 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键返回的内容,多次按下返回的始终都是这几个值):








zoologist 发表于 2014-4-25 08:49:30

不知道你怎么连接的?

有2点:

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

2.按下和抬起键是两个事件,所以有2个code

Stormer 发表于 2014-4-25 08:52:52

本帖最后由 Stormer 于 2014-4-25 08:59 编辑

zoologist 发表于 2014-4-25 08:49 static/image/common/back.gif
不知道你怎么连接的?

有2点:


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

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



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

zoologist 发表于 2014-4-25 13:10:40

呃 你这样的连接好像很奇怪啊。 usb信号不是串行数据,应该是差分信号吧?

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

不知道有没有高手指点一下?

智能创客 发表于 2014-4-25 15:56:42

不错,{:soso_e179:}{:soso_e179:}{:soso_e179:}
页: [1]
查看完整版本: 【求助】USB转串口数据获取不正确