首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Arduino Duemilanove和Cutedigi RS-232接口的RS-232通信

使用Arduino Duemilanove和Cutedigi RS-232接口的RS-232通信
EN

Stack Overflow用户
提问于 2011-12-03 20:51:49
回答 1查看 5.6K关注 0票数 2

我很难让我的Arduino微控制器读取RS-232信号。我的项目要求我读取由空气质量监测仪输出的数据。

我的组件:

  • 杜米拉诺
  • Cutedigi RS-232接口

为了测试串行通信是否正常工作,我在Arduino网站上找到了一些示例代码。这正是我正在运行的代码:

代码语言:javascript
复制
//Created August 23 2006
//Heather Dewey-Hagborg
//http://www.arduino.cc

#include <ctype.h>

#define bit9600Delay 84
#define halfBit9600Delay 42
#define bit4800Delay 188
#define halfBit4800Delay 94

byte rx = 0;
byte tx = 1;
byte SWval;

void setup() {
    pinMode(rx,INPUT);
    pinMode(tx,OUTPUT);
    digitalWrite(tx,HIGH);
    digitalWrite(13,HIGH); //turn on debugging LED
    SWprint('h');  //debugging hello
    SWprint('i');
    SWprint(10); //carriage return
}

void SWprint(int data)
{
    byte mask;
    //startbit
    digitalWrite(tx,LOW);
    delayMicroseconds(bit9600Delay);
    for (mask = 0x01; mask>0; mask <<= 1) {
        if (data & mask){ // choose bit
            digitalWrite(tx,HIGH); // send 1
        }
        else{
            digitalWrite(tx,LOW); // send 0
        }
        delayMicroseconds(bit9600Delay);
    }
    //stop bit
    digitalWrite(tx, HIGH);
    delayMicroseconds(bit9600Delay);
}

int SWread()
{
    byte val = 0;
    while (digitalRead(rx));
    //wait for start bit
    if (digitalRead(rx) == LOW) {
        delayMicroseconds(halfBit9600Delay);
        for (int offset = 0; offset < 8; offset++) {
            delayMicroseconds(bit9600Delay);
            val |= digitalRead(rx) << offset;
        }
        //wait for stop bit + extra
        delayMicroseconds(bit9600Delay);
        delayMicroseconds(bit9600Delay);
        return val;
    }
}

void loop()
{
    SWval = SWread();
    SWprint(toupper(SWval));
}

我分别将RX和TX引脚改为0和1,因为这是Cutedigi RS-232芯片使用的引脚。现在,当我打开终端窗口并键入字符时,我会收到混淆的符号和字母(如:¾_ò_òòËÌßÌËßÌÊÌòyofyofsæóÙöÇ æü æ)。

根据示例代码网站,如果我输入abcdefg,终端窗口应该显示ABCDEFG

为什么会是这样呢?我已经将波特率设置为9600,正如素描中所指定的,但我仍然有问题。重置Arduino似乎也无济于事--我还是会弄乱文字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-08 16:25:27

我知道问题出在哪里了。

结果,我试图将两个DCE设备连接在一起,这意味着需要一个空调制解调器适配器来交换电缆上的TX/RX引脚。以前,我用的是一个简单的改变性别的工具,但这就是我的问题所在。

如果遇到类似的问题,请尝试获得一个空调制解调器适配器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8370918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档