使用c ++通过RS232在pc和arduino之间进行串行通信

时间:2014-07-29 16:56:56

标签: c++ visual-studio-2010 class arduino serial-communication

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

我在以下链接找到了c ++的串口通信类:

http://playground.arduino.cc/Interfacing/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的串口浏览器查看带打印的内容时,我得到的是非常奇怪的值,与我发送的内容不相符(就我而言)可以告诉)。

当我发送&#34; Hello Arduino!&#34;时,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

这似乎不是#34; Hello Arduino!&#34;的正确十六进制,但我不知道它为什么不正确。有没有人知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

嗯......不!拉起来拉下来不是出于这个原因..

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

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

因此......你需要一个电压转换器(和逆变器),就像David Skogan正确指出的那样。

示例:

  1. 使用分立组件(具有自动回音功能,即在PC上,您将看到您发送的数据):http://project.irone.org/simple-rs232-to-ttl-level-converter.htmlhttp://circuit-diagram.hqew.net/Simple-TTL $ 2dRS232-Level-Converter-Using-Transistor_2757.html
  2. 带有MAX232(或等效电路)和四个电容器的公共电路
  3. 使用USB-UART,而不是使用USB-RS232转换器,例如使用FT232或类似的东西。这不需要任何界面
  4. 或者..只需使用Arduino上的USB端口,该端口上已有FT232。

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