Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
1

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

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

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

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

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

Работа с COM портом
по COM порту через Agilen подключается вольтметр с адресом 1. необходимо...

Работа с COM-портом
Подскажите, какие компоненты нужны для работы с ком-портами? а именно (хотя бы...

Работа с COM портом
Здравствуйте! В процессе написания программы работы с устройством, подключенным...

Работа с Com портом
Привет всем! У меня собственно такая ситуация, есть bluetooth и телефон Nokia...

14
Почтальон
Модератор
711 / 590 / 121
Регистрация: 22.03.2015
Сообщений: 4,031
Завершенные тесты: 2
01.12.2017, 13:14 2
Что значит не работает ?
0
Kuzia domovenok
2394 / 2115 / 509
Регистрация: 25.03.2012
Сообщений: 7,615
Записей в блоге: 1
01.12.2017, 13:24 3
скачать архив.
глянуть файл app.cpp
сделать аналогично.
0
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
01.12.2017, 16:13 4
Цитата Сообщение от ProHacker2006 Посмотреть сообщение
Скачал библиотеку CSerialPort, написал программу - не работайт!
1. Приведи свой код.
2. Что именно не работает?
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
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
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
02.12.2017, 22:48 6
Цитата Сообщение от ProHacker2006 Посмотреть сообщение
Вроде работает
Что-то я не вижу в этом коде непосредственно отправки данных (WriteFile)...
1
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
05.12.2017, 17:30  [ТС] 7
О, спасибо БОЛЬШОЕ! До этого не заметил.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
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
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
27.01.2018, 16:56 9
Если что, в теме Старый добрый COMPORT имеется пример соединения с Arduino с помощью boost::asio.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
27.01.2018, 22:16  [ТС] 10
Нее, непонятно там. ��
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
28.01.2018, 05:59 11
ProHacker2006, ну надо же когда-то учиться.
1
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
10.02.2018, 13:24  [ТС] 12
Как найду свободное время - обязательно
0
Avazart
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,478
Записей в блоге: 17
10.02.2018, 16:24 13
Я бы советовал использовать С++Qt классы QSerialPort, QSerialPortInfo.

Я их везде использую (как раз для ардуины)
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
30.03.2018, 12:03  [ТС] 14
Спасибо за помощь! Но я решил использовать С#. С++ — классика, но не всегда удобно.
0
ProHacker2006
1 / 1 / 0
Регистрация: 01.12.2017
Сообщений: 36
Завершенные тесты: 3
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 портом и вообще...
Друзья спасайте! Для обмена необходимо выдать сигналы DTR = 1(+) и RTS =...

Работа с COM портом на С++ Builder 6
Работаю я с GSM модемами, пишу под них программу на C++ Builder 6. Посылаю в...

И снова работа с COM портом
Приветствую всех. Уже измучился и измаялся весь пытаясь написать функцию....


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

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

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