Proses membaca SerialPort tidak berfungsi dengan baik di C#

Saya sedang mengembangkan aplikasi yang berkomunikasi dengan sirkuit elektronik saya melalui Port 4. Saya dapat mengirim data dari PC ke sirkuit tanpa masalah; Saya kemudian mendapatkan data kembali dari sirkuit. Namun, ketika saya mencoba mengambil data dari sirkuit saya untuk kedua kalinya, saya menerima data yang salah dari sirkuit tersebut. Adakah petunjuk tentang cara mengatasi ini?

Ini adalah kode 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); 
}

Ini kode 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 sumber
comment
Apakah ini berfungsi dari program terminal seperti hyperterm?   -  person Matt Burland    schedule 03.02.2014
comment
Tidak seperti itu. Ini memiliki empat tombol. Hubungkan, Putuskan, KirimData dan GetData   -  person Onur Akgun    schedule 04.02.2014
comment
Bagaimana tidak seperti itu? Sirkuit Anda tidak peduli karena ada 4 tombol bukan? Jika berkomunikasi melalui port serial, Anda seharusnya dapat berkomunikasi dengannya dengan sesuatu seperti hyperterm. Buka saja koneksi (dengan pengaturan yang sesuai) dan coba kirim A dan lihat apakah ada respons. Ini adalah pemecahan masalah komunikasi serial dasar.   -  person Matt Burland    schedule 04.02.2014
comment
Nomor==Serial.readBytes(Data_Diterima,6); salah karena == bagaimanapun, data apa yang Anda harapkan, dan apa yang Anda terima?   -  person Lesto    schedule 04.02.2014
comment
@MattBurland Saya menghubungkannya dan mengirim data dari PC ke sirkuit dengan mengklik tombol sendData tanpa masalah. Jika saya mencoba mengambil data dari rangkaian setelah saya mengirim data ke rangkaian, saya gagal. Saya mendapatkan data yang salah. Namun, jika saya menjalankan program dan menghubungkan sirkuit dan mencoba mendapatkan data, itu berfungsi dengan baik. Mendapatkan data berfungsi dengan baik sekaligus   -  person Onur Akgun    schedule 04.02.2014
comment
@lesto Ya ada kesalahan tapi saya membuat kesalahan itu saat menyalin kode di sini   -  person Onur Akgun    schedule 04.02.2014
comment
Bisakah Anda memposting di mana Anda menginisialisasi Sent_data? Juga apa yang kamu terima? Kode arduinonya hilang, mungkin ramnya habis? Atau bermain dengan pointer?   -  person Lesto    schedule 04.02.2014
comment
Saya menemukan masalahnya tetapi saya tidak tahu bagaimana menyelesaikannya. Berikut adalah array yang perlu saya dapatkan dari sirkuit (data yang benar) Array[0]=88 Array[1]=2 Array[2]=188 Array[3 ]=2 Array[4]=32 Array[5]=3 Array[6]=132 Array[7]=3 Array[8]=232 Array[9]=3 Berikut data yang salah Array[0]=2 Array[1]=188 Array[2]=2 Array[3]=32 Array[4]=3 Array[5]=132 Array[6]=3 Array[7]=232 Array[8]=3 Array[ 9]=0   -  person Onur Akgun    schedule 04.02.2014


Jawaban (1)


Saya menemukan solusinya.

Saya mengubah kode ini

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

ke dalam yang ini

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());
            }
    }

Terima kasih semuanya telah membantu saya

person Onur Akgun    schedule 04.02.2014