Обмен данными при помощи com-порта!

Тема в разделе "Arduino & Shields", создана пользователем Mihay, 16 сен 2015.

  1. Mihay

    Mihay Гик

    Здравствуйте!
    Возникла следующая проблема:
    Написал код который передает из Arduino значения аналоговых пинов на ПК через com-порт (Мое ПО на ПК распознает эти заморочки связанные с особой записью в порт от Arduino. Теперь стоит другая задача, не трогая написанную программу, написать передачу из ПК на Arduino каких либо данных данных! По возможности требуется следующее для моего общего понимания
    1. Простейшее ПО на ПК, передающее через com-порт данные для Arduino.
    2. Как распознавать данные (от кого и кому были отправлены) com-порта, при одновременной передаче
    из двух источников (ПК или Arduino)
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Что за заморочки с особой записью?
    Если вы написали для ПК прием из порта, то какие проблемы с передачей?
    Не понял насчет распознания данных. Кто их должен распознавать?
    То, что пришло на ардуино, много прийти только с ПК и наоборот.
    На чем написано ПО для ПК - язык и среда?
     
  3. Mihay

    Mihay Гик

    На ПК по com-порту приходят данные с аналоговых пинов. ПО на ПК, написанное на С++ Builder, распознает эти данные, вот часть ПО распознавания данных с arduino идущих в com-порт:

    gResult = ReadFile(hCom, &c, 1, &bytesWritten, NULL);
    // т.к. приход данных посимвольный, то
    if (gResult != 0)
    {
    if (prev_c == '\n') // проверка конца передачи данных с одного источника
    {
    unsigned int num = 0;
    while (c != '\r') // т.к. передаются числа, то собираем данные посимвольно в одно число num
    {
    num = num * 10 + (c - '0');
    ReadFile(hCom, &c, 1, &bytesWritten, NULL);
    }
    .................................................
    }
    Это что касается приема данных на ПК от Arduino по сom- порту. С этим разобрались и вопросов нет!
    Вопрос следующий: из ПК на Arduino через com-порт посылаем
    char s = 'a';
    gResult = WriteFile(hCom, &s, 1, &bytesWritten, NULL);
    Как на Arduino отловить этот символ, когда Аrduino забивает com-порт собственными сообщениями и обратная задача: на ПК при ловле сообщения с Arduino у нас поймается сообщение и из ПК! как избавиться от этого?
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Никто ничего лишнего не поймает. Данные в разные стороны идут по разным линиям.
     
  5. Mihay

    Mihay Гик

    Вопрос упрощается до безобразия: на стороне Arduino могу ли создать что то либо вот этого:
    hCom = CreateFile("Com3",GENERIC_READ | GENERIC_WRITE, 0,
    NULL, OPEN_EXISTING, 0, NULL);
    if(hCom == INVALID_HANDLE_VALUE)
    {
    Logs->Lines->Add("Îøèáêà COM-ïîðòà!");
    CloseHandle(hCom);
    }
    else
    {
    GetCommState(hCom, &dcb);
    dcb.BaudRate = CBR_19200;
    dcb.fParity = false;
    dcb.ByteSize = 8;
    dcb.Parity = 0;
    dcb.StopBits = 1;
    SetCommState(hCom,&dcb);
    Logs->Lines->Add("Com-ïîðò îòêðûò è óñòàíîâëåí!");
    TimerPort->Enabled = true;
    Logs->Lines->Add("Íà÷èíàåì ñëóøàòü ïîðò...");
    Chart1->LeftAxis->Automatic = false;
    Chart1->LeftAxis->SetMinMax(0, 1023);
    }
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    На стороне ардуино этим занимается Serial, вам ничего делать не нужно. Просто пишите в Serial и читайте из него.