通过Arduino发送的读取信息,带有C#的串行端口



我正在尝试阅读Arduino的简单传感器读数。Arduino连接到COM3(用于发送数据和编程Arduino)。C#程序非常简单,并试图阅读Arduino发送的内容。问题:当另一侧(分别C#或Arduino)已经打开它时,我无法使用C#或Arduino打开COM3端口。只是在没有开放的情况下发送不会产生任何结果。您应该如何"连接"它们?我的理解是,这两个设备都使用相同的baudrate打开端口,然后您可以发送和读取数据。当我试图打开时,我会在C#侧获得一个未授权的Access,或者在Arduino方面"无法打开序列"。

arduino C代码:

#include <DHT.h>
#define DHTPIN A4
#define DHTTYPE DHT11
#define THERPIN A0
DHT dht(DHTPIN,DHTTYPE);   
String hum="Humidity:";
String temptext="Temp:";
String semi=";";
void setup() {  
    Serial.begin(9600);
    dht.begin();
    pinMode(A0,INPUT);
}    
void loop() {   
    float humidity = dht.readHumidity();
    delay(300);
    float temp = dht.readTemperature();
    delay(300);

    if (isnan(humidity)||isnan(temp))
    {
      Serial.println("Fehler beim Lesen(NAN)");
      delay (5000);
   }else
    {
      Serial.print(temp + semi);
      Serial.print(humidity);
      Serial.flush();
      delay(1000);  
    }
}

c#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO.Ports;
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {    
            SerialPort serialPort1;
            serialPort1 = new SerialPort();
            serialPort1.PortName = "COM3";
            serialPort1.BaudRate = 9600;
            serialPort1.DtrEnable = true;
            REPEAT:
            if (serialPort1.IsOpen)
            {
                string reading = serialPort1.ReadLine();
                Console.WriteLine(reading);
                serialPort1.Close();                   
            }
            else
            {
                Console.WriteLine("closed,opening");
                serialPort1.Open();
                goto REPEAT;    
            }    
        }
    }
}

在搜索解决方案时始终是另一个程序已在使用COM端口,但这不是我需要交流的内容吗?显然,据我了解,Arduino必须使用与我的C#应用相同的com-port。

谢谢

您的代码正在永久打开和关闭串行端口。这是行不通的,因为当.NET代码关闭连接窗口时,内部将异步关闭端口。端口实际关闭之前可能需要几秒钟。这就是为什么程序几乎立即阻止。

在程序开始时仅打开一次连接。

此外:不惜一切代价避免使用Goto语句。埃德加·迪克斯特(Edgar Dijkstra)在许多年前撰写了一篇反对其用途的论文:去陈述被认为有害的声明。

最新更新