我正在尝试通过 RS232 线与我的 arduino duemilanove 进行通信。我只是希望能够从桌面应用程序发送一个字节(或字符)到我的arduino。Arduino 正在插入我的计算机上的 USB COM5。我将 RS232 插入 COM1,然后将 RS232 另一端的引脚 2、3 和 5 分别连接到 arduino 引脚 TX、RX 和 GND。

我在以下链接中找到了 C++ 的串行通信类:

http://playground.arduino.cc/Interface/CPPWindows

我已将上面示例中的 .h 和 .cpp 文件添加为 Serial.h 和 Serial.cpp (我认为该示例使用 SerialClass.h 和 SerialClass.cpp,我只是更改了名称)。


在我的 arduino 上,我运行以下代码:

// ARDUINO
char incomingByte = 0;

void setup() {
        Serial.begin(9600);
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, HEX);
        }
}

我的c++程序如下:

// C++
#include <iostream>
#include <Windows.h>
#include "Serial.h"

using namespace std;

int main(void)
{
    Serial port("COM1");

    char* msg = "Hello Arduino!";
    int msgLen = strlen(msg);
    bool writeSuccess = port.WriteData(msg, msgLen);

    cout << "\n\n";
    system("PAUSE");
}

当我使用 Arduino 的串行端口查看器查看打印的内容时,我得到了非常奇怪的值,这些值与我发送的内容不匹配(据我所知)。

当我发送“Hello Arduino!”时,arduino 会打印以下内容:

I received: FFFFFFAB
I received: 3A
I received: 3A
I received: A
I received: FFFFFFFA
I received: FFFFFFEB
I received: 6D
I received: 37
I received: 15
I received: 2D
I received: 23
I received: 21
I received: FFFFFFBD
I received: 0

这似乎不是“Hello Arduino!”的正确十六进制,但我不知道为什么它不正确。有人知道我做错了什么吗?

有帮助吗?

解决方案

Arduino使用了串行连接的TTL逻辑。它期望0和5V的值。RS232使用不同的电压-V至+ v。您可能需要转换器。

其他提示

嗯……不!上拉和下拉不是这个原因。

  • TTL = 低:0V,高:5V

  • RS232 = 低:+3:+15V,高:-3:-15V

最后..正如大卫·斯科根正确指出的那样,你需要一个电压转换器(和逆变器)。

例子:

  1. 采用分立元件(具有自动回声功能,即在PC上您将看到您发送的数据): http://project.irone.org/simple-rs232-to-ttl-level-converter.html 或者 http:// Circuit-diagram.hqew.net/Simple-TTL$2dRS232电平转换器使用晶体管_2757.html
  2. 具有 MAX232(或等效器件)和四个电容器的公共电路
  3. 不要使用 USB-RS232 转换器,而是使用 USB-UART 转换器,例如使用 FT232 或类似的东西。这个不需要任何接口

或者..只需使用 Arduino 上的 USB 端口即可,该端口上已有 FT232。

个人评论:我会避免解决方案1...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top