-7 / 0 / 1
Регистрация: 11.06.2018
Сообщений: 50
1

Как поток данных с последовательного порта записать в массив типа char

09.02.2020, 10:01. Показов 1436. Ответов 5
Метки нет (Все метки)

Как реализовать запись символов приходящих с последовательного порта в массив char? Например при отправке строки String в последовательный порт она сохранилась в массиве array={'S','t','r','i','n','g'}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2020, 10:01
Ответы с готовыми решениями:

Записать число типа int в массив char -ов так, как оно представляется в памяти
Здравствуйте, моя цель - записать переменную какого-либо типа в массив char-ов (строку) так, как...

Есть переменная типа char содержащая цифру; как записать это значение в переменную типа int?
Пожалуйста, напомните стандартную функцию

Массив типа char записать в одну ячейку другого массива
Добрый день, есть массив типа char. В нем в одной ячейке элемент 'a', в другой 'b'. Я создать...

Распределение данных с последовательного порта
Имеется такой код в VB6 Private Sub Command1_Click() MSComm1.CommPort = 2 MSComm1.Settings =...

5
5 / 4 / 2
Регистрация: 09.05.2019
Сообщений: 117
09.02.2020, 15:22 2
Я в своём проекте делаю через String, но это можно фориком конвертировать в char*.

Например так:
C++
1
2
3
4
5
6
String Serial_string = Serial.readStringUntil('\n');
char ch1[256];
for(int i=0;i<Serial_string.length();i++)
{
  if(i<256) ch[i]=Serial_string[i];
}
Но в конце должен быть символ конца строки '\n'. (Если вы отправляете через монитор порта и нажимаете Enter, то он автоматом добавляется)
1
-7 / 0 / 1
Регистрация: 11.06.2018
Сообщений: 50
17.03.2020, 16:11  [ТС] 3
Решил сделать по своему, но есть одно но при отправке в порт несколько символов они записываются по нескольку раз
C++
1
2
3
4
5
6
while (Serial.available())
  {
    char sym = Serial.read();
    Text[s] = sym;
    s++;
  }
т.е. при вводе символов 'AB' в массив Text записываются {A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B}
При вводе задержки 16мс после увеличения индекса массива все работает как надо.
И ВОТ ВОПРОС: Почему так происходит, использую Terminal v1.93V
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
17.03.2020, 16:14 4
Цитата Сообщение от Mihacrasavchik Посмотреть сообщение
Почему так происходит
потому что отрабатывает Serial.available(), почитайте описание к этому методу
0
-7 / 0 / 1
Регистрация: 11.06.2018
Сообщений: 50
17.03.2020, 16:19  [ТС] 5
Можете объяснить подробнее или привести ссылки на источники
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
18.03.2020, 07:23 6
Serial.available()
Возвращает количество байт (символов) доступных для считывания из буфера последовательного порта. Под символами понимаются данные, которые уже приняты и хранятся в последовательном приемном буфере (который может хранить максимум 64 байта)
Т.е. она срабатывает каждый раз, когда в буфере есть какие-то данные (хоть старые, хоть новые)
Цитата Сообщение от Mihacrasavchik Посмотреть сообщение
при отправке в порт несколько символов они записываются по нескольку раз
Возможно в этом и проблема - в источнике, который формирует данные для отправки и отправляет их.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2020, 07:23
Помогаю со студенческими работами здесь

Как записать значение типа double в char?
Есть массив double massiv_str; Проверяем его и если 1,2 или 3 присваиваем соответствующее значение...

Добавление в массив типа char * одного элемента типа char
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения...

Получить среднее арифметическое принятых данных с последовательного порта
Добрый день! Столкнулся с такой задачей. Необходимо получить среднее арифметическое 8 значений...

Массив Структуры данных, проблемы с выводом переменных типа char
Писать не мастер, суть проблемы такова, есть задание (по учебе если что) − Описать структуру с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru