0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 5

Как настраивать serial port под Linux для приёма данных от Arduino Uno

21.03.2016, 15:40. Показов 5261. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт команды, на ПК должен возвращаться байт состояния.

В скетче порт инициализирован так:
Serial.begin(9600);

Один раз в миллисекунду данные отправляются так:
Serial.write(Act_State);

Судя по монитору порта в IDE, данные приходят нормально. Приложение под Линукс нормально принимает данные только пока работает монитор. Как только я останавливаю монитор в приложение начинает сыпаться мусор.

В Линуксе приём настраивал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
fd = open ( "/dev/ttyACM0" , O_RDWR | O_NOCTTY | O_NONBLOCK , 0 ) ;
 
   tcgetattr  ( fd , &Port_Data ) ;
   cfsetspeed ( &Port_Data , B9600 ) ;
 
   Port_Data.c_cflag = Port_Data.c_cflag & ~PARENB ;  
   Port_Data.c_cflag = Port_Data.c_cflag & ~CSTOPB ; 
   Port_Data.c_cflag = Port_Data.c_cflag & ~CSIZE ;       
   Port_Data.c_cflag = Port_Data.c_cflag | CS8 ;          
   Port_Data.c_cc [ VMIN ]  = 1 ;
   Port_Data.c_cc [ VTIME ] = 1 ;
   Port_Data.c_lflag = ICANON ;
   Port_Data.c_oflag = 0 ;        
 
   tcsetattr  ( fd, TCSANOW, &Port_Data ) ;
 
Данные принимаю такой функцией:
int SDevice::Get_Data  ( unsigned char  * Item )
{
   ssize_t     Qty = 0 ;
 
   int         Res = 0 ;
 
   Poll_Data.fd     = fd ;
   Poll_Data.events = POLLIN  |   // There are data to read
                      POLLERR |   // Some error
                      POLLHUP |   // Hang up
                      POLLPRI ;   // There is high priority data to read immedeately
 
      while ( Res == 0 ) {
         Res = poll ( &Poll_Data ,      // Parameters: input -- file, events to wait; output -- what event had happend
                      1 ,               // Items quantity
                      50 ) ;            // Timeout [ ms ] ( 0 -- immedeately; -1 -- endless )
 
         if ( Res < 0 ) {
            return 0 ;
         } else if ( !( ( Poll_Data.revents & POLLIN ) || ( Poll_Data.revents & POLLPRI ) ) ) {
            return 0 ;
         }
      }
 
      Qty = read ( fd , Item , 1 ) ;
      if ( Qty < 1 ) {
         *Item = 0 ;
      }
 
   return  Qty ;
} // end SDevice::Get_Data ;
Подскажите, пожалуйста, что я делаю не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2016, 15:40
Ответы с готовыми решениями:

Как настраивать serial port под Linux для приёма данных от Arduino Uno
Здравствуйте! Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт...

Arduino UNO. Как работать c RFID-сканнером и Arduino на одном Serial-порту?
Рас уж тут речь зашла об ардуине и многопоточности COM порта, думаю могу обратиться именно сюда за помощью. Имеется у меня arduino...

Вывод данных из Serial Port в Linux в файл
Требуется считывать данные из COM-порта в тестовый файл. Данные туда попадают от Arduino UNO. Операционная система Linux-Ubuntu....

5
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.03.2016, 21:22
Может лучше обратится в раздел С++/Linux ?
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 5
30.03.2016, 10:52  [ТС]
Hello!

В общем, ситуация разрешилась крайне просто и в то же время пакостно. А именно: во всём этом участвует ещё "третья сторона" -- Qt. Как я понял, Qt что-то делает с портом вне зависимости от того просят её туда соваться или нет. Найденные мною примеры настройки порта и работы с ним после встраивания в Qt приложение перестают работать. В результате работа с портом может выполняться только через Qt библиотеки. Что и было сделано.
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.03.2016, 12:22
Цитата Сообщение от cs_994 Посмотреть сообщение
мною примеры настройки порта и работы с ним после встраивания в Qt приложение перестают работать.
Вряд ли кто-то понимает о чем ты.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 5
31.03.2016, 12:32  [ТС]
Hello!

Вот статья с работающим примером:

https://sites.google.com/site/... na-s-linux

Если встроить один в один работу с портом из примера в Qt приложение, то получим те же самые странности, что описаны в исходном посте.

Поэтому в приложении нужно объявить переменную:
QSerialPort Device_Port ;
и работать с портом средствами Qt через эту переменную.
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.03.2016, 13:21
Цитата Сообщение от cs_994 Посмотреть сообщение
Если встроить один в один работу с портом из примера в Qt приложение, то получим те же самые странности, что описаны в исходном посте.
зачем в приложении на С++Qt ташить сишный код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2016, 13:21
Помогаю со студенческими работами здесь

Arduino serial port
Скрипт должен отправлять число от 1 до 3, а МК должен включать соответствующий светодиод. помогите доработать\переделать код. int...

Arduino serial port VS
такая проблема ни как не могу получить данные с ариаднино. Ардуина постоянно шлем данные что то вроде &quot;GF2G54. мне их надо просто...

Serial port для приложения под магазин win 8
Не могу найти Serial port при создании приложения под магазин win 8

Simulink-serial port-arduino-serial port-Simulink
Здравствуйте! Мне нужно передать звук с одного компьютера на другой. Я собрал такую схему, где используется передатчик и приёмник. Я...

Linux видит Arduino Uno, но не прошивает
Всем доброго времени суток Недавно установил себе Ubuntu, нужно было поработать с Arduino, написал скетч(ошибок компилятор не выдает),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru