большая задержка c# & arduino
- Войдите на сайт для отправки комментариев
Втр, 08/04/2014 - 14:46
есть прога на 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!!
Что не так? подскажите плз!
привет
1. в сишарпе байт называется byte (c маленькой буквы)
2. не заморачивайтесь с потоками пока в одном потоке не всё отладили
3. ...лучше сначала в консольном приложении
4. почитайте о SerialDataReceivedEventArgs. Наверняка полученные данные в нём уже есть и не нужно применять readLine.
5. хорошо ли работает ваш ардуиновский скетч при использовании "монитора порта" встроенного в ПО Ардуино ? (без с# программы)
6. скорость сом порта у вас небольшая. Дуина обрабатывает строки 8-13 скетча практически мгновенно. Получается, что задержка в 18 строке может влиять на скорость получения. Т.е. ваши семь байт она может получать семь секунд.
7. замените ваши данные 1,2,3... на 65,66,67...
и покажите результат
спс toc!) вместо serialPort1.ReadLine() написал serialPort1.ReadExisting() все работает без задержек. Только он выводит все что есть в буфере, получается все не упорядоченно.