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;
}
}
}
这是我的问题。我使用这段代码通过串行端口向我的 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;
}
}
}