2015-02-23 76 views
1

这里是我的问题。我用thise一段代码串发送到我的Arduino用的SerialPort:c#和arduino之间的serialdata通信

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#程序中读取字符串公司我得到一个格式错误,看起来像这样“.7,2 ???? 1.5”。

我从与所述命令Arduino的读取serialdata:

GlobaleVariablen.Input = Arduino.ReadLine(); 

波特率是相同的,奇偶性被设置为无停止位和对默认为好。 我希望你能帮助我,我为此疯狂,我找不到我的错误,或者为什么格式不对。

+0

你的Arduino代码只是外的同步与数据传输。您发送10个字节,而不是11个。并且您还发送换行符,但通过使用println()添加两个额外的字节。正确的Arduino代码只是将字符添加到* buffer *中,直到获得换行符('\ n')。 – 2015-02-23 15:57:30

+0

对不起,但这不是问题在这里。我解决了你指出的问题,但是问号仍然是四个?在字符串前面。难道只有打开串口后的第一个字符串有某种“标签”?不知道如何解决这个问题。 – DerBenutzer 2015-02-23 17:44:03

回答

0

这与Arduino 1.6在UNO兼容板上完美结合(请注意,此代码根本没有错误处理,因此仅以它作为起点)。

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; 
     } 
    } 
} 
+0

感谢您的帮助。它解决了这个问题,但不是因为代码中有错误。如果波特率设置为115200,问号似乎只会出现。如果我使用9600的波特率,它与我的代码完全兼容。我不知道为什么这是这种情况! – DerBenutzer 2015-02-24 10:57:49

+0

正如我刚刚发现的那样,它似乎只能在9600波特和更低的波段工作......我不明白。 – DerBenutzer 2015-02-24 11:11:31

+0

您是否尝试过我的示例?它适用于我在115200没有问题。 – Vagaus 2015-02-25 04:43:41