Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание и запись в COM порт 
:(
    Опции темы
SpaceQuester
Дата 10.3.2016, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.3.2016

Репутация: нет
Всего: нет



Есть код на стороне Ардуины, он работает, с ним всё порядке:
Код

boolean dataReady = 0;
char incomingChar;
char typeMessage;
String input = "";

int defaultValueC4900ControlVoltage = 1; //[0:255]
int FromPCValueC4900ControlVoltage = defaultValueC4900ControlVoltage;

void setup()
{
  Serial.begin(9600);
}

void loop()
{

  while (Serial.available())
  {
    incomingChar = (char)Serial.read();

    if (incomingChar == 'F' /*|| incomingChar == 'C'*/)
    {
      dataReady = 0;
      typeMessage = incomingChar;
      input = "";

      continue;
    }

    //Serial.print("typeMessage:");
    //Serial.println(typeMessage);

    if (incomingChar != '!' && (typeMessage == 'F' /*|| typeMessage == 'C'*/))
    {
      input += incomingChar;
    }
    else
    {
      dataReady = 1;
    }
  }

  if (dataReady == 1 && typeMessage == 'F')
  {
    FromPCValueC4900ControlVoltage = input.toInt();
    Serial.print("FromPCValueC4900ControlVoltage:");
    Serial.println(FromPCValueC4900ControlVoltage);
    dataReady = 0;
    typeMessage = NULL;
  }

  /*if (dataReady == 1 && typeMessage == 'C')
  {
    int Vol = input.toInt();
    Serial.print("VolC:");
    Serial.println(Vol);
    dataReady = 0;
    typeMessage = NULL;
  }*/

  analogWrite(9, FromPCValueC4900ControlVoltage); // Необходимо подбирать коэффициэнт [0:255]
  
  int sensorRealValueC4900ControlVoltage = analogRead(A0); // [0:1023]
  //float realC4900ControlVoltage = sensorValueC4900ControlVoltage * (5.0 / 1023.0);
  Serial.print("C");
  Serial.print(sensorRealValueC4900ControlVoltage);
  Serial.println("!");

  int sensorSupplyOutputVoltage = analogRead(A1); // [0:1023]
  Serial.print("O");
  Serial.print(sensorSupplyOutputVoltage);
  Serial.println("!");

  int sensorPhotomultiplierOutputVoltage = analogRead(A2); // [0:1023]
  Serial.print("P");
  Serial.print(sensorPhotomultiplierOutputVoltage);
  Serial.println("!");
}

Ардуина считывает только команды F1234! и отдаёт C1234! O1234! P1234! Всё идеально работает. Теперь следующий вопрос - как мне из клиента на PC в C++ в режиме реального времени и считывать данные из COM порта и посылать туда данные?
PM MAIL   Вверх
xvr
Дата 10.3.2016, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(SpaceQuester @  10.3.2016,  15:10 Найти цитируемый пост)
Теперь следующий вопрос - как мне из клиента на PC в C++ в режиме реального времени и считывать данные из COM порта и посылать туда данные?

C++ не содержит средств для работы с СОМ портом. Этим занимается ОС. У вас какая ОС?

Добавлено через 1 минуту и 29 секунд
Добавление - Еще есть различные библиотеки для работы с СОМ портами (есть кросс платформенные). У вас есть какая нибудь?

PM MAIL   Вверх
SpaceQuester
Дата 10.3.2016, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.3.2016

Репутация: нет
Всего: нет



ОС - Windows 8.1.

Я вкурсе что это объект Serial. На самом деле не важно на чем будет реализация, на MATLAB, Python или C/C++. Вопрос - как организовать одновременный приём/передачу данных в/из сериал-порт. Я же не могу два бесконечных цикла крутить на считывание и запись в com порт. Как такая задачка решается? где почитать?
PM MAIL   Вверх
xvr
Дата 10.3.2016, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(SpaceQuester @  10.3.2016,  15:42 Найти цитируемый пост)
На самом деле не важно на чем будет реализация, на MATLAB, Python или C/C++.

Важно. У каждого из них есть свои собственные API для доступа к СОМ портам. На С++ можно использовать низкоуровневое API ОС (вот статья и вот референс)

Цитата(SpaceQuester @  10.3.2016,  15:42 Найти цитируемый пост)
Вопрос - как организовать одновременный приём/передачу данных в/из сериал-порт.

На уровне API это можно делать по разному:
  • Поочередно писать и читать (если протокол это позволяет)
  • Воспользоваться Overlapped IO
  • Воспользоваться thread'ами (в одном читать в другом писать)

PM MAIL   Вверх
SpaceQuester
Дата 10.3.2016, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.3.2016

Репутация: нет
Всего: нет



Всё равно не понятно. У нас требование по MATLAB поставлено.
Вот мне нужно читать три переменные из Ардуины всегда, и когда я нажму на кнопочку в своей MATLAB программе, мне нужно отправить данные в сериал порт в Ардуину. Как это сделать?
PM MAIL   Вверх
xvr
Дата 10.3.2016, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



PM MAIL   Вверх
SpaceQuester
Дата 11.3.2016, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.3.2016

Репутация: нет
Всего: нет



Ну так там команды всего лишь. Зачем они мне?
Цитата(SpaceQuester @  10.3.2016,  16:56 Найти цитируемый пост)
Вот мне нужно читать три переменные из Ардуины всегда, и когда я нажму на кнопочку в своей MATLAB программе, мне нужно отправить данные в сериал порт в Ардуину. Как это сделать? 

Мне алгоритм нужен. Я по этому к вам и обращаюсь. Помогите, пожалуйста.
PM MAIL   Вверх
Angel666
Дата 11.3.2016, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 8.9.2011

Репутация: нет
Всего: 1



Может как то так http://www.visualmicro.com/page/User-Guide...al-Monitor.html

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Alexeis
Дата 11.3.2016, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Цитата(SpaceQuester @  10.3.2016,  16:42 Найти цитируемый пост)
Я же не могу два бесконечных цикла крутить на считывание и запись в com порт. Как такая задачка решается? где почитать? 

  Винда работает с ком портами буферизировано, так что, чтобы отправить 2й байт не нужно ждать пока уйдет первый. Соответственно, после отправки можно ждать приема. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xvr
Дата 11.3.2016, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(SpaceQuester @  11.3.2016,  11:27 Найти цитируемый пост)
Мне алгоритм нужен.

Алогритм чего? Как общаться с вашей Ардуиной на уровне команд знаете только вы сами. А как общаться на уровне байтов - я вам дал ссылку (те самые команды). Там еще примеры были: Чтение и запись данных  

Вот оттуда:

Код

s = serial('COM1');
fopen(s)
fprintf(s,'F1234!')
out = fscanf(s)


В out будет ваш ответ (C1234! O1234! P1234!) Вам это нужно?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.