Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c+通过RS232在pc和arduino之间进行串行通信+;_C++_Visual Studio 2010_Class_Arduino_Serial Communication - Fatal编程技术网

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

C++ 使用c+通过RS232在pc和arduino之间进行串行通信+;,c++,visual-studio-2010,class,arduino,serial-communication,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++的串行COMM类: 我已经将上面示例中的.h和.cpp文件添加为Serial.h和Serial.cpp(我认为示例使用SerialClass.h和SerialC

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

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

我已经将上面示例中的.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");
}
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。您可能需要一个转换器。

Ehm。。。不上拉和下拉不是为了这个原因

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

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

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

示例:

  • 使用分立元件(具有自动回显功能,即在PC上,您将看到您发送的数据):或$2dRS232-Level-Converter-Using-TRANSTOR_2757.html
  • 带有MAX232(或等效物)和四个电容器的公共电路
  • 不要使用USB-RS232转换器,而是使用USB-UART转换器,例如使用FT232或类似的东西。这不需要任何接口
  • 或者。。只需使用Arduino上的USB端口,该端口上已经有FT232


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

    您是否也将COM1设置为9600速度?停止/奇偶校验位是否相同?@ SLVA YEP,YEP是操作系统特有的。建议更改C++代码…但由于这个原因,Arduino有一个上拉和下拉电阻器,