Здравствуйте! Возникла следующая проблема: Написал код который передает из Arduino значения аналоговых пинов на ПК через com-порт (Мое ПО на ПК распознает эти заморочки связанные с особой записью в порт от Arduino. Теперь стоит другая задача, не трогая написанную программу, написать передачу из ПК на Arduino каких либо данных данных! По возможности требуется следующее для моего общего понимания 1. Простейшее ПО на ПК, передающее через com-порт данные для Arduino. 2. Как распознавать данные (от кого и кому были отправлены) com-порта, при одновременной передаче из двух источников (ПК или Arduino)
Что за заморочки с особой записью? Если вы написали для ПК прием из порта, то какие проблемы с передачей? Не понял насчет распознания данных. Кто их должен распознавать? То, что пришло на ардуино, много прийти только с ПК и наоборот. На чем написано ПО для ПК - язык и среда?
На ПК по 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 у нас поймается сообщение и из ПК! как избавиться от этого?
Вопрос упрощается до безобразия: на стороне 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); }
На стороне ардуино этим занимается Serial, вам ничего делать не нужно. Просто пишите в Serial и читайте из него.