Приём данных c COM порта С++

Приём данных c COM порта С++

Сообщение illusive » 16 мар 2013, 16:06

Прочитал много статей на эту тему, попробовал несколько методов, но в итоге получаю всегда примерно одно и тоже. Залил скетч:

Код: Выделить всё
void loop()
{
   float distantion = sr04.Ranging(CM);
   Serial.print(distantion);
   delay(1000); // Задержка на секунду
}


На выходе получаю набор значений вроде этого: 88.0089.0091.0091.0090.0088.0090.0090.00 и т.д. за 3 секунды (Откуда берутся 4 разных значения? Ведь должно было быть максимум 3)
Есть способ от этого избавиться? Пока думаю только отправлять [ и ] как начало и конец сообщения. Тогда можно будет читать просто ReadFile() используя такой скетч?

Код: Выделить всё
float distantion = sr04.Ranging(CM);
char c;
for(;;)
{
    if (Serial.available())
    {
      c = Serial.read();
    }
    if (c == 'q') break;   // q у меня сообщение от компьютера что данные приняты и больше слать не требуется
    Serial.println();
    Serial.print('[');
    Serial.print(distantion);
    Serial.print(']');
    delay(10); // Чем меньше задержка тем больше получаю значений
}


Приходится входить в цикл иначе на ReadFile() программа на компьютере зависает. Хотя если создать отдельные потоки чтения/записи, то можно и без цикла, но проблема с большим количеством значений остается.

И к тому же все эти методы очень медлительные, а я рассчитывал максимум на 50мс.
illusive
 
Сообщения: 20
Зарегистрирован: 23 фев 2013, 16:28

Re: Приём данных c COM порта С++

Сообщение illusive » 16 мар 2013, 17:00

Используя потоки решил проблему все работает достаточно быстро и лишних данных нет. Но все таки потоки это сложно и много, есть ли более короткие и легкие способы?
illusive
 
Сообщения: 20
Зарегистрирован: 23 фев 2013, 16:28

Re: Приём данных c COM порта С++

Сообщение noonv » 16 мар 2013, 21:35

отдельный поток - это нормально, но и в нём можно, например, использовать неблокирующее чтение.
Аватара пользователя
noonv
Администратор
 
Сообщения: 557
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |