กระบวนการอ่าน SerialPort ทำงานไม่ถูกต้องใน C #

ฉันกำลังพัฒนาแอพพลิเคชั่นที่สื่อสารกับวงจรอิเล็กทรอนิกส์ของฉันผ่านทางพอร์ต 4 ฉันสามารถส่งข้อมูลจากพีซีไปยังวงจรได้โดยไม่มีปัญหา จากนั้นฉันก็รับข้อมูลกลับจากวงจร อย่างไรก็ตาม เมื่อฉันพยายามรับข้อมูลจากวงจรของฉันเป็นครั้งที่สอง ฉันได้รับข้อมูลที่ไม่ถูกต้องจากวงจรนั้น ตัวชี้ใด ๆ เกี่ยวกับวิธีแก้ปัญหานี้?

นี่คือรหัส C #:

byte[] Sent_Byte = {1,2,3,4,5,6};
byte[] Received_Byte = new byte[10];

private void button_sendData_Click(object sender, EventArgs e)
{
    // I send this data because the circuit is ready to get data
    serialPort1.Write("G");
    serialPort1.Write(Sent_Byte, 0, 6);
}

private void button_getData_Click(object sender, EventArgs e)
{
    // I send this data because the circuit is ready to send data
    serialPort1.Write("A");
}


private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
        serialPort1.Read(Received_Byte, 0, 10); 
}

นี่คือรหัส Arduino:

char Control_OP=0;
char Received_Data[6]; 
byte Sent_Data[10];

void loop()
{
  while(Serial.available())
  {
    Control_OP = Serial.read(); // determines whether receiving data or sending data

    if(Control_OP=='G') // receiving data
    {   
      Number=Serial.readBytes(Received_Data,6); 
    }

    else if(Control_OP=='A') // sending data
    {
      Serial.write(Sent_Data,10);
    }
  }
}

person Onur Akgun    schedule 03.02.2014    source แหล่งที่มา
comment
มันทำงานจากโปรแกรมเทอร์มินัลเช่นไฮเปอร์เทอมหรือไม่?   -  person Matt Burland    schedule 03.02.2014
comment
มันไม่ใช่แบบนั้นหรอก. มันมีสี่ปุ่ม เชื่อมต่อ ตัดการเชื่อมต่อ SendData และ GetData   -  person Onur Akgun    schedule 04.02.2014
comment
ไม่เป็นแบบนั้นได้ยังไง? วงจรของคุณไม่สนใจว่ามี 4 ปุ่มใช่ไหม? หากกำลังสื่อสารผ่านพอร์ตอนุกรม คุณควรจะสามารถพูดคุยกับมันด้วยบางอย่างเช่นไฮเปอร์เทอร์มได้ เพียงเปิดการเชื่อมต่อ (ด้วยการตั้งค่าที่เหมาะสม) แล้วลองส่ง A และดูว่าตอบสนองหรือไม่ นี่คือการแก้ไขปัญหาการสื่อสารแบบอนุกรมขั้นพื้นฐาน   -  person Matt Burland    schedule 04.02.2014
comment
หมายเลข==Serial.readBytes(Received_Data,6); ผิดเพราะ == ยังไงก็ตาม คุณคาดหวังข้อมูลอะไร และคุณจะได้อะไร?   -  person Lesto    schedule 04.02.2014
comment
@MattBurland ฉันเชื่อมต่อและส่งข้อมูลจากพีซีไปยังวงจรโดยคลิกปุ่ม sendData โดยไม่มีปัญหาใด ๆ หากฉันพยายามรับข้อมูลจากวงจรหลังจากที่ส่งข้อมูลไปยังวงจรแล้ว ฉันจะล้มเหลว ฉันได้รับข้อมูลที่ไม่ถูกต้อง อย่างไรก็ตาม ถ้าฉันรันโปรแกรมและเชื่อมต่อวงจรแล้วลองรับข้อมูล มันจะทำงานได้ตามปกติ การรับข้อมูลทำงานอย่างถูกต้องในครั้งเดียว   -  person Onur Akgun    schedule 04.02.2014
comment
@lesto ใช่มีข้อผิดพลาด แต่ฉันทำผิดพลาดขณะคัดลอกโค้ดที่นี่   -  person Onur Akgun    schedule 04.02.2014
comment
คุณสามารถโพสต์ตำแหน่งที่คุณเริ่มต้น Sent_data ได้หรือไม่ แล้วคุณกำลังรับอะไรอยู่? รหัส Arduino หายไป บางที RAM ของคุณกำลังจะหมดใช่ไหม หรือเล่นกับพอยน์เตอร์?   -  person Lesto    schedule 04.02.2014
comment
ฉันพบปัญหาแต่ฉันไม่รู้วิธีแก้ นี่คืออาร์เรย์ที่ฉันต้องได้รับจากวงจร (ข้อมูลที่ถูกต้อง) Array[0]=88 Array[1]=2 Array[2]=188 Array[3 ]=2 อาร์เรย์[4]=32 อาร์เรย์[5]=3 อาร์เรย์[6]=132 อาร์เรย์[7]=3 อาร์เรย์[8]=232 อาร์เรย์[9]=3 นี่คือข้อมูลที่ไม่ถูกต้อง อาร์เรย์[0]=2 อาร์เรย์[1]=188 อาร์เรย์[2]=2 อาร์เรย์[3]=32 อาร์เรย์[4]=3 อาร์เรย์[5]=132 อาร์เรย์[6]=3 อาร์เรย์[7]=232 อาร์เรย์[8]=3 อาร์เรย์[ 9]=0   -  person Onur Akgun    schedule 04.02.2014


คำตอบ (1)


ฉันพบวิธีแก้ปัญหา

ฉันเปลี่ยนรหัสนี้

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
            serialPort1.Read(Received_Byte, 0, 10); 
}

ลงในสิ่งนี้

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
            for (int i = 0; i <Received_Byte.Length; i++)
            {
                Received_Byte[i] = Convert.ToByte(serialPort1.ReadByte());
            }
    }

ขอบคุณทุกคนที่ช่วยเหลือฉัน

person Onur Akgun    schedule 04.02.2014