Управление Arduino через USB

Тема в разделе "Arduino & Shields", создана пользователем AlexTeos, 13 фев 2014.

  1. AlexTeos

    AlexTeos Нерд

    Мне необходимо реализовать управление Arduin-кой с помощью C++. На сколько я понял Arduino общается с компьютером через COM порт, потому вся задача сводиться к тому, что бы из под плюсов отправлять в нужный порт нужную информацию. Но тут у меня появились трудности, ардуина же подключена через USB, причем тут вообще COM порт? Да вопрос идиотский, но я не понимаю. На ноутбуке вообще нет COM портов. Примеров работы с портами куча, но не один не заработал, т.к. ни один порт не открылся. Программа Com Port ToolKit не находит ни одного COM порта, хотя "Монитор порта" в Arduino IDE показывает некий COM9.
    Помогите разобраться!
     
  2. sagis

    sagis Нерд

    При подключении arduino создается виртуальный com порт который и общается по средствам usb.
    Именно при подключенном оборудовании и ищите свой com-порт в любой программе в том числе он появляется и в диспетчере устройств.
     
    AlexTeos нравится это.
  3. geher

    geher Гуру

    Ком-порт (последовательный порт) виртуальный, через USB.
    Когда ардуина подключается к ПК, то в виндовсе возникает новое устройство, видное как COM с номером. Вот это тот самый порт, через который надо передавать команды, и есть.
     
    AlexTeos нравится это.
  4. AlexTeos

    AlexTeos Нерд

    Да, действительно. Порт появился, но по прежнему не открывается, возможно из-за того что занят.

    Вот код который я использую:

    #include "stdafx.h"

    #include <windows.h>
    #include <iostream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE hCOM=CreateFile(L"COM9",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if (hCOM!=INVALID_HANDLE_VALUE)
    {
    cout << "COM is open OK!" << endl;
    char buffer[30];
    memset(buffer,0,sizeof(buffer));
    strcpy(buffer,"SAVE TO COM");
    DWORD nb;
    OVERLAPPED ov;
    WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov);
    CloseHandle(hCOM);
    }
    else cout << "Error Open COM" << endl;
    return 0;
    }

    Как можно решить эту проблему?
     
  5. sagis

    sagis Нерд

    Если он занят например монитором Arduino IDE, то и не откроется.
    надо сначала проверить что порт не используется сторонними программами, а потом уже открывать его для записи-чтения. По коду подробно не подскажу, если честно уже не помню
     
    AlexTeos нравится это.
  6. AlexTeos

    AlexTeos Нерд

    Закрыл монитор и все заработало! Большое спасибо!