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

时间:2015-02-23 15:45:19

标签: c# arduino serial-port

这是我的问题。我使用这段代码通过serialport将字符串发送到我的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#programm中读取字符串inc,我会收到格式错误,看起来像这样“.7,2 ???? 1.5”。

我使用命令从

GlobaleVariablen.Input = Arduino.ReadLine();

波特率相同,奇偶校验设置为无,默认值为stopbits。 我希望你能帮助我,我对此感到疯狂,我无法找到我的错误或为什么格式错误。

1 个答案:

答案 0 :(得分:0)

这与兼容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;
      }
   }  
}