большая задержка c# & arduino

hong_10
Offline
Зарегистрирован: 30.10.2013

есть прога на c# которая при нажатии на кнопку отправляет данные на ардуино

private void button4_Click(object sender, EventArgs e)
        {
            
            Byte[] data = { 1, 2, 3,4,5,6,7 };
            serialPort1.Write(data, 0, data.Length);
        }

а вот прога которая принимает данные и отправлет обратно

int mas[7],i=0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  while (Serial.available())
  {      
    mas[i]=Serial.read();   
  i=i+1;        
  }
  i=0; 
  for (int k=0; k<=6; k++)
  {
  Serial.println(mas[k]);
  }
  delay(1000);
  Serial.println();
}

а вот код, который принимает данные обратно

 private delegate void MyDelegate(string value);
         
        private void UpdateText(string value)
        {
            listBox1.Items.Add(value);
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
        }

      
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (InvokeRequired) //проверяем, в каком мы потоке
            {//если во вроричном, то через Invoke, создавая делегат
                Invoke(new MyDelegate(UpdateText), serialPort1.ReadLine().ToString());
                return;
            }
            UpdateText(serialPort1.ReadLine().ToString());
        }

При запуске программы на c#, на listbox"е отображаются нули. После нажатия на кнопку, отображаются также нули. Данные начинают отображаться ЧЕРЕЗ СЕКУНД 20!! 

Что не так? подскажите плз! 

 

toc
Offline
Зарегистрирован: 09.02.2013

привет
1. в сишарпе байт называется byte (c маленькой буквы)
2. не заморачивайтесь с потоками пока в одном потоке не всё отладили
3. ...лучше сначала в консольном приложении
4. почитайте о SerialDataReceivedEventArgs. Наверняка полученные данные в нём уже есть и не нужно применять readLine.
5. хорошо ли работает ваш ардуиновский скетч при использовании "монитора порта" встроенного в ПО Ардуино ? (без с# программы)

toc
Offline
Зарегистрирован: 09.02.2013

6. скорость сом порта у вас небольшая. Дуина обрабатывает строки 8-13 скетча практически мгновенно. Получается, что задержка в 18 строке может влиять на скорость получения. Т.е. ваши семь байт она может получать семь секунд.

toc
Offline
Зарегистрирован: 09.02.2013

7. замените ваши данные 1,2,3... на 65,66,67...
и покажите результат

hong_10
Offline
Зарегистрирован: 30.10.2013

спс toc!) вместо serialPort1.ReadLine() написал serialPort1.ReadExisting() все работает без задержек. Только он выводит все что есть в буфере, получается все не упорядоченно.