Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
SpaceQuester
2 / 2 / 0
Регистрация: 19.01.2016
Сообщений: 125
1

Считывание и запись в COM порт

10.03.2016, 15:06. Просмотров 652. Ответов 4
Метки нет (Все метки)

Есть код на стороне Ардуины, он работает, с ним всё порядке:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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 порта и посылать туда данные?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2016, 15:06
Ответы с готовыми решениями:

Считывание бинарных значений из реестра и запись их в одну строку
//9.Функция для считывание бинарных значений из реестра и передачи значения в...

Запись в СОМ-порт
Здравствуйте! Столкнулся с проблемой: Для общения с com-портом, разумеется,...

Чтение и запись в com порт
Порт открывается для асинхронного режима, затем мне надо чтобы по нажатию...

считывание и запись в файл
здравствуйте! есть прожка на с++ билдер, расчетная, которая выдает одно...

Считывание с txt и запись в ado
Добро всем! :senor: в тхт файле у меня порядка 1000 строк с шапкой, вот в...

4
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
10.03.2016, 17:21 2
Цитата Сообщение от SpaceQuester Посмотреть сообщение
Теперь следующий вопрос - как мне из клиента на PC в C++ в режиме реального времени
Для этого нужна система реального времени.
0
SpaceQuester
2 / 2 / 0
Регистрация: 19.01.2016
Сообщений: 125
11.03.2016, 11:15  [ТС] 3
Нет у нас никакой системы реального времени. Есть Windows 8.1 и MATLAB. Такие условия гранта из министерства образования.

Программа должна ловить три команды, вычленять из них цифры и отрисовывать на графики. Но программа должна и уметь посылать одну команду ардуине когда мы нажмём кнопочку в GUI. Как такое сделать?
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
11.03.2016, 13:41 4
Цитата Сообщение от SpaceQuester Посмотреть сообщение
Но программа должна и уметь посылать одну команду ардуине когда мы нажмём кнопочку в GUI. Как такое сделать?
Небольшие примеры взаимодействия с Arduino есть в теме Старый добрый COMPORT
0
CyberKatana
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 12
11.03.2016, 14:31 5
Цитата Сообщение от SpaceQuester Посмотреть сообщение
как мне из клиента на PC в C++ в режиме реального времени и считывать данные из COM порта и посылать туда данные?
вам нужно просто постоянно считывать данные с COM-порта, при необходимости отправить туда данные, прерывать считывание, отправлять и опять начинать считывать
0
11.03.2016, 14:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2016, 14:31

Считывание данных с базы и запись в Label
Подскажите такой вопрос: куда написать вот этот код(его мне тоже тут...

Считывание ячеек из StringGrid и запись их в динамический массив C++
Доброго времени суток! Совсем недавно начал осваивать Builder C++ и сам...

Считывание и запись hex-файлов
Задача состоит в том, чтобы считать с hex-файла(Intel hex) с начала файла до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru