c#和arduino之间的串行数据通信

Serialdata communication between c# and arduino

这是我的问题。我使用这段代码通过串行端口向我的 arduino 发送一个字符串:

Arduino.Open();
Arduino.WriteLine("1.5,3.7,2");

之后我用我的arduino收到它是这样的:

char buffer[12];
String inc;

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

void loop()
{
 if (Serial.available() >= 11) 
 {
    for (int i=0; i<11   ; i++) 
    {
      buffer[i] = Serial.read();
      inc += buffer[i];
    }
    memset(buffer, 0, sizeof(buffer));
    Serial.println(inc);
    inc = "";
  }
}

如果我使用串行监视器,arduino 程序会按预期运行,读取所有字符并将它们打印为一个字符串。但是,如果我尝试从我的 C# 程序中读取字符串 inc,我会收到类似“.7,2?????1.5”的格式错误。

我使用以下命令从 arduino 读取串行数据:

GlobaleVariablen.Input = Arduino.ReadLine();

波特率相同,奇偶校验设置为 none,停止位也默认设置。 我希望你能帮助我,我对此很着迷,我找不到我的错误或格式错误的原因。

这与 UNO 兼容板上的 Arduino 1.6 完美配合(请注意,此代码根本没有错误处理,因此仅将其用作起点)。

C# 示例

using System;
using System.IO.Ports;

namespace SerialPortTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var p = new SerialPort(args[0], 9600, Parity.None, 8, StopBits.One);
            p.Open();

            Console.WriteLine("Sending ({1}) {0}", args[1], args[1].Length);

            p.WriteLine(args[1]);

            Console.WriteLine("Reading back");

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(p.ReadLine());

            Console.ResetColor();
        }
    }
}

Arduino 代码

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

char buffer[64];
char *p = buffer;

void loop() 
{
    char ch = ' ';
    while (Serial.available() > 0)
    {
       ch = Serial.read();
       *p++ = ch;    

       if (ch == '\n')
       {
         *p = 0;
         Serial.print("got ");
         Serial.println(buffer);      
         p = buffer;
         break;
      }
   }  
}