Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2016, 15:07   #1
SpaceQuester
 
Аватар для SpaceQuester
 
Регистрация: 25.02.2013
Сообщений: 9
По умолчанию Считывание и запись в COM порт

Есть код на стороне Ардуины, он работает, с ним всё порядке:
Код:
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 порта и посылать туда данные?
SpaceQuester вне форума Ответить с цитированием
Старый 10.03.2016, 15:45   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Во-первых, разобыть ОС реального времени для ПК
Во-вторых, юзать АПИ это ОС и читать, и писать...
p51x вне форума Ответить с цитированием
Старый 10.03.2016, 15:56   #3
SpaceQuester
 
Аватар для SpaceQuester
 
Регистрация: 25.02.2013
Сообщений: 9
По умолчанию

Ну где же её раздобыть то? Есть только Windows 8.1. Как сделать такую синхронную передачу данных? Можете показать пример хороший?
SpaceQuester вне форума Ответить с цитированием
Старый 10.03.2016, 16:09   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Виндовс не система реального времени (хотя может и ее вам хватит). https://msdn.microsoft.com/ru-ru/library/ff802693.aspx
p51x вне форума Ответить с цитированием
Старый 11.03.2016, 11:29   #5
SpaceQuester
 
Аватар для SpaceQuester
 
Регистрация: 25.02.2013
Сообщений: 9
По умолчанию

По условию гранта из министерства образования, программу нужно реализовать в MATLAB, и там нет тредов.

Вот мне нужно читать три переменные из Ардуины всегда, и когда я нажму на кнопочку в своей MATLAB программе, мне нужно отправить данные в сериал порт в Ардуину. Как это сделать?
SpaceQuester вне форума Ответить с цитированием
Старый 11.03.2016, 11:51   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а гугл по matlab com port вам ничего не сказал?
p51x вне форума Ответить с цитированием
Старый 11.03.2016, 12:12   #7
SpaceQuester
 
Аватар для SpaceQuester
 
Регистрация: 25.02.2013
Сообщений: 9
По умолчанию

Сказал. Там все примеры либо читать, либо писать. А мне нужен алгоритм и читать и писать в реальном времени. Причем потоков и тредов в матлабе нет.
SpaceQuester вне форума Ответить с цитированием
Старый 11.03.2016, 12:25   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://undocumentedmatlab.com/blog/e...n-matlab-part1
https://www.mathworks.com/matlabcent...m-a-c-mex-file
https://www.mathworks.com/help/distcomp/batch.html
https://www.mathworks.com/company/ne...ple-cores.html
http://www.instructables.com/id/Matl...hreading-EASY/
https://www.bu.edu/tech/support/rese...t-parallelism/
и т.д.

И забудьте уже слова "в реальном времени" на виндовс.
П.С. Всегда можно из С++ кода дергать матлаб функции
p51x вне форума Ответить с цитированием
Старый 11.03.2016, 13:28   #9
SpaceQuester
 
Аватар для SpaceQuester
 
Регистрация: 25.02.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И забудьте уже слова "в реальном времени" на виндовс.
Как мне это поможет решить свою задачу, если мне нужно в реальном времени читать и писать?
SpaceQuester вне форума Ответить с цитированием
Старый 11.03.2016, 14:40   #10
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Как мне это поможет решить свою задачу, если мне нужно в реальном времени читать и писать?
Можно синхронно/асинхронно читать/писать,
но Вы должны осознать, что это не будет real-time.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и Запись в com порт Грендайзер Win Api 19 16.12.2013 22:39
Запись в com порт gromsgu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 26.11.2009 10:07
запись в порт 70h Makcydrl Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.06.2008 16:24
запись в порт по-максимуму :) Спартак Win Api 4 16.02.2008 22:22