Процесс чтения SerialPort не работает должным образом в С#

Я разрабатываю приложение, которое взаимодействует с моей электронной схемой через порт 4. Я могу без проблем отправлять данные с ПК на схему; Затем я получаю данные из схемы. Однако, когда я пытаюсь получить данные из своей схемы во второй раз, я получаю от нее неверные данные. Любые указатели на то, как решить эту проблему?

Это код С#:

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

Это код Ардуино:

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
Это не так. Он имеет четыре кнопки. Подключить, отключить, отправить данные и получить данные   -  person Onur Akgun    schedule 04.02.2014
comment
Как это не так? Твоей схеме все равно, что есть 4 кнопки, не так ли? Если он общается через последовательный порт, вы сможете поговорить с ним с помощью чего-то вроде гипертерма. Просто откройте соединение (с соответствующими настройками) и попробуйте отправить A и посмотрите, ответит ли он. Это основная процедура устранения неполадок последовательной связи.   -  person Matt Burland    schedule 04.02.2014
comment
Number==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 отсутствует, может быть, у вас заканчивается оперативная память? Или играть с указкой?   -  person Lesto    schedule 04.02.2014
comment
Я нашел проблему, но не знаю, как ее решить Вот массив, который мне нужно получить из схемы (правильные данные) Массив[0]=88 Массив[1]=2 Массив[2]=188 Массив[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