用于Arduino的C#串行读线';我不能正常工作

用于Arduino的C#串行读线';我不能正常工作,c#,arduino,serial-port,C#,Arduino,Serial Port,我想使用C#IDE Visual Studio从Arduino向应用程序发送串行数据。我将发送40个字符,波特率9600。C#中Arduino之间的连接很好,问题是当我使用ReadLine命令将数据发送到C#时。我没有得到全部数据,总是会有一些第一次数据丢失,例如,如果我发送123456789,在C#中,它的读数仅为456789或89或3456789 #define TC1 A0 #define TC2 A1 #define TC3 A2 #define TC4 A3 #define TC5 A

我想使用C#IDE Visual Studio从Arduino向应用程序发送串行数据。我将发送40个字符,波特率9600。C#中Arduino之间的连接很好,问题是当我使用
ReadLine
命令将数据发送到C#时。我没有得到全部数据,总是会有一些第一次数据丢失,例如,如果我发送123456789,在C#中,它的读数仅为456789或89或3456789

#define TC1 A0
#define TC2 A1
#define TC3 A2
#define TC4 A3
#define TC5 A4
#define TC6 A5
#define TC7 A6
#define TC8 A7
//#define TC9 A8
//#define TC10 A9

float K1 = 1;
float K2 = 1;
float K3 = 1;
float K4 = 1;
float K5 = 1;
float K6 = 1;
float K7 = 1;
float K8 = 1;
float K9 = 1;
float K10 = 1;

int n = 10;
int temp[10];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int x = 100;
  temp[0]=analogRead(TC1)*K1*x*5/1023;
  temp[1]=analogRead(TC2)*K2*x*5/1023;
  temp[2]=analogRead(TC3)*K3*x*5/1023;
  temp[3]=analogRead(TC4)*K4*x*5/1023;
  temp[4]=analogRead(TC5)*K5*x*5/1023;
  temp[5]=analogRead(TC6)*K6*x*5/1023;
  temp[6]=analogRead(TC7)*K7*x*5/1023;
  temp[7]=analogRead(TC8)*K8*x*5/1023;
  temp[8]=analogRead(TC8)/5*200*K9;
  temp[9]=analogRead(TC8)/5*200*K10;

//  temp[0] = 1101;
//  temp[1] = 2327;
//  temp[2] = 114;
//  temp[3] = 6753;
//  temp[4] = 50;
//  temp[5] = 1;
//  temp[6] = 24;
//  temp[7] = 123;
//  temp[8] = 1269;
//  temp[9] = 3;


  for (int i = 0; i <= n - 1; i++) {
    char buff[] = {'0', '0', '0', '0'};
    int length_temp = String(temp[i]).length();

    for (int j = length_temp - 1; j >= 0; j--) {
      buff[j] = String(temp[i])[length_temp - j - 1];
    }

    for (int j = 0; j <= 3; j++) {
      Serial.write(buff[3 - j]);
    }

  }
  Serial.write('\n');
}

那么问题是什么呢?是否需要锁定打开端口命令?

好的,我不太清楚,但是如果您将“\n”作为行结尾写入串行端口,然后在c#中使用ReadLine(我想您使用的是windows?),则会给我带来问题。我用了我自己的“行尾cahr”。只需使用类似“!”然后始终只读取一个字符,并将其与“!”进行比较

伪代码:

string msg = ""
char read = readchar()
if(read == '!')
    //stop reading
else
    //add char to string
    msg += read

解决了,伙计们,我的问题是arduino的第一行串行数据和我想发送的不完全一样,但第二行和之后的数据和我打印到串行的数据一样正常。我仍然不知道为什么,但我的方法是跳过我的第一行输入数据

string msg = ""
char read = readchar()
if(read == '!')
    //stop reading
else
    //add char to string
    msg += read