Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
#1

Работа с COM-портом в C++ (соединение с Arduino) - C++

01.12.2017, 12:51. Просмотров 805. Ответов 14
Метки нет (Все метки)

Доброго времени суток, уважаемые коллеги!
Мне для проекта требуется соединить Arduino и компьютер через СОМ-порт. Скачал библиотеку CSerialPort, написал программу - не работайт! Пожалуйста, помогите разобраться, желательно с примерами кода, поменьше WinAPI (Я не профи в этой области).
Заранее благодарю.

Добавлено через 1 минуту
P. S.: Я использую VisualStudio!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2017, 12:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с COM-портом в C++ (соединение с Arduino) (C++):

работа с COM портом - C++
здравствуйте всем,я в форумах в первие ,и просил бы не судить очень строго. помогите пожалуйста , хочу реализовать приложение работающую с...

Работа с COM портом - C++ Builder
Здравствуйте! В процессе написания программы работы с устройством, подключенным к ПК через преобразователь интерфейсов RS485 - USB,...

Работа с COM-портом - C++ Builder
Подскажите, какие компоненты нужны для работы с ком-портами? а именно (хотя бы для начала) отправка шестнадцатиричного кода на порт, к...

Работа с Com портом - C++ Builder
Привет всем! У меня собственно такая ситуация, есть bluetooth и телефон Nokia устанавливаю соединение через виртуальный com порт, мне...

Работа с COM портом - C++ Builder
по COM порту через Agilen подключается вольтметр с адресом 1. необходимо "прозвонить" все порты и автоматически сделать рабочим тот, куда...

Работа с COM портом в Builder C++ 6.0 - C++ Builder
Добрый день, уважаемые форумчане. Никогда не спрашивал совета на форумах, но нужна подсказка. Кто располагает временем, буду очень...

14
Почтальон
Модератор
558 / 497 / 88
Регистрация: 22.03.2015
Сообщений: 3,505
Завершенные тесты: 1
01.12.2017, 13:14 #2
Что значит не работает ?
0
Kuzia domovenok
2125 / 1955 / 194
Регистрация: 25.03.2012
Сообщений: 6,806
Записей в блоге: 1
01.12.2017, 13:24 #3
скачать архив.
глянуть файл app.cpp
сделать аналогично.
0
CheshireCat
Эксперт С++
2903 / 1252 / 81
Регистрация: 27.05.2008
Сообщений: 3,437
01.12.2017, 16:13 #4
Цитата Сообщение от ProHacker2006 Посмотреть сообщение
Скачал библиотеку CSerialPort, написал программу - не работайт!
1. Приведи свой код.
2. Что именно не работает?
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
01.12.2017, 20:35  [ТС] #5
Давно это было...
Не работало: ноль реакции на программу.
Ну, я и "обиделся" на библиотеку, удалил ее, а прогу не сохранил.
Но нашел другой источник. Тестирую.

Добавлено через 26 минут
Вроде работает :
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
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
 
HANDLE hSerial;
 
int main(int argc, CHAR* argv[]) {
    LPCTSTR sPortName = LPCTSTR("COM4");
    hSerial = ::CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hSerial == INVALID_HANDLE_VALUE) {
        if (GetLastError() == ERROR_FILE_NOT_FOUND) {
            cerr << "Serial port does not exist.\n";
        }
        cerr << "Some other error occurred.\n";
    }
    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        cerr << "Getting state error.\n";
    }
    dcbSerialParams.BaudRate = CBR_9600;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        cerr << "Error setting serial port state.\n";
    }
    char data[] = "Hello from C++";
    DWORD dwSize = strlen(data);
    DWORD dwBytesWritten = sizeof(data);
    cout << dwSize << " Lengh string. " << dwBytesWritten << " Bytes sended." << endl;
    /*void ReadCOM() {;
        DWORD iSize;
        char sReceivedChar;
        while (true) {
            ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);
            if (iSize > 0) { cout << sReceivedChar; }
        }
    }*/
    while (_getch() != 13) {}
    return 0;
}
0
shmkv
630 / 349 / 43
Регистрация: 21.07.2015
Сообщений: 1,002
02.12.2017, 22:48 #6
Цитата Сообщение от ProHacker2006 Посмотреть сообщение
Вроде работает
Что-то я не вижу в этом коде непосредственно отправки данных (WriteFile)...
1
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
05.12.2017, 17:30  [ТС] #7
О, спасибо БОЛЬШОЕ! До этого не заметил.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
27.01.2018, 11:36  [ТС] #8
Ребята, сие заработало!!! Спасибо, blablacode.
Вот рабочий код, комп:
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
#include <windows.h>
#include <iostream>
using namespace std;
 
HANDLE hSerial;
 
void ReadCOM() {
    DWORD iSize;
    char sReceivedChar;
    while(true) {
        ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);  // получаем 1 байт
        if(iSize > 0)   // если что-то принято, выводим
            cout << sReceivedChar;
    }
}
 
int main() {
    LPCTSTR sPortName = "COM3";
    hSerial = ::CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if(!GetCommState(hSerial, &dcbSerialParams)){
        cout << "getting state error\n";
    }
    dcbSerialParams.BaudRate = CBR_9600;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;
    if(!SetCommState(hSerial, &dcbSerialParams)){
        cout << "error setting serial port state\n";
    }
    char data[] = "Hello from C++";  // строка для передачи
    DWORD dwSize = sizeof(data);   // размер этой строки
    DWORD dwBytesWritten;    // тут будет количество собственно переданных байт
    BOOL iRet = WriteFile(hSerial, data, dwSize, &dwBytesWritten, NULL);
    while(true) {
        ReadCOM();
    }
}
И ардуино:
C++
1
2
3
4
5
6
7
8
void setup() {
  Serial.begin(9600);
  while (Serial.available() == 0) {}
}
 
void loop() {
  Serial.write("HI!!!\n");
}
(Бесконечно выводит на порт "HI!!!")
0
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,739
Записей в блоге: 3
Завершенные тесты: 1
27.01.2018, 16:56 #9
Если что, в теме Старый добрый COMPORT имеется пример соединения с Arduino с помощью boost::asio.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
27.01.2018, 22:16  [ТС] #10
Нее, непонятно там. ��
0
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,739
Записей в блоге: 3
Завершенные тесты: 1
28.01.2018, 05:59 #11
ProHacker2006, ну надо же когда-то учиться.
1
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
10.02.2018, 13:24  [ТС] #12
Как найду свободное время - обязательно
0
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
10.02.2018, 16:24 #13
Я бы советовал использовать С++Qt классы QSerialPort, QSerialPortInfo.

Я их везде использую (как раз для ардуины)
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
30.03.2018, 12:03  [ТС] #14
Спасибо за помощь! Но я решил использовать С#. С++ — классика, но не всегда удобно.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 34
Завершенные тесты: 2
08.04.2018, 19:48  [ТС] #15
Но вообще на Python перехожу
0
08.04.2018, 19:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2018, 19:48
Привет! Вот еще темы с ответами:

Асинхронная работа с COM портом. - C++ Builder
Здравствуйте, Как известно, в Windows с COM портом можно работать в синхронном и асинхронном режиме. Для работы в асинхронном режиме...

И снова работа с COM портом - C++ Builder
Приветствую всех. Уже измучился и измаялся весь пытаясь написать функцию. Помогите, пожалуйста... Описание задачи Создается...

Работа с USB портом. - C++ Builder
Доброго всем времени суток! Суть задачи в следующем: Есть устройство (USB принтер этикеток) и им можно управлять при помощи...

Работа с Com портом - VB
Столкнулся с проблемой не могу найти литературу По Visualbaisic работа с com портом! Подскажите литературу! Хочу написать программу по...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru