Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.09.2017
Сообщений: 34

Узнать длину букв (не байт) буфера SerialPort'а

16.10.2017, 16:59. Показов 1602. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, поскажите пожалуйста, как узнать длинну букв (не байт) буфера SerialPort'а, в arduino есть функция serial.avaliable — возращает количство букв, ее нету у c#, есть BytesToRead - но возвращает количество байт, тоесть 0 (48) будет 2 байта, а d (100) - 3 байта, хотя буква одна...... Нужно узнать длинну именно букв порта, как ето сделать?
Помогите пожалуйста......
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2017, 16:59
Ответы с готовыми решениями:

Как узнать количество байт, необходимых для буфера UDP
Помогите пожалуйста новичку. Написал клиент передачи по UDP протоколу. Но когда запускаю вылетает ошибка что размер файла больше чем размер...

I2C - не успеваю прочитать байт из буфера
#include "stm32f10x.h" #define MMA_W 0x1D<<1 #define MMA_R (0x1D<<1)|0x01 #define MMA_MCR 0x16<<1 #define MMA_MCR_MODE 0x03 ...

Заполнения буфера размером 50 байт числом -313
Составить программу заполнения буфера размером 50 байт числом -313, начиная формировать буфер с конца, как формируется буфер!

5
Эксперт .NET
 Аватар для Rius
13078 / 7639 / 1669
Регистрация: 25.05.2015
Сообщений: 23,243
Записей в блоге: 14
16.10.2017, 17:50
Цитата Сообщение от volotor Посмотреть сообщение
длинну букв (не байт) буфера SerialPort'а
Нет такого понятия для буфера. В символах можно измерить длину строки. А строка из байтов получается с применением указанной вами кодировки.
Цитата Сообщение от volotor Посмотреть сообщение
Serial.available()
Функция получает количество байт(символов) доступных для чтения из последовательного интерфейса связи. Это те байты которые уже поступили и записаны в буфер последовательного порта. Буфер может хранить до 64 байт.
В этой вашей ардуине один байт и есть один символ.
Цитата Сообщение от volotor Посмотреть сообщение
0 (48) будет 2 байта, а d (100) - 3 байта, хотя буква одна
Поясните?

Добавлено через 3 минуты
Если вы символ d из кодировки ASCII перевели в строку, с текстовым представлением десятичного числа 100, то это не 1 символ, а уже 3. Хотите 1 - передавайте символы, а не их коды в строковом виде.
0
0 / 0 / 0
Регистрация: 14.09.2017
Сообщений: 34
16.10.2017, 19:14  [ТС]
Простите, что не обяснил, я имел ввиду, что ардуино, передавая букву "0" через порт передасть число 48, но использовав команду bytestoread в( приложении для пк, c#) ми получим 2, а єсли ардуино передаст "d", она пераст число 100, но bytestoread видаст 3, мненужно чтоб етот код конвертировался в букви и передавалась длинна букв...
C#
1
If(букв в порте == 7) {if (ети 7 букв =="OKstart") {SerialPort.Write("0");}
Arduino всегда (у меня) отсилает стиоку из 7 букв, символов, цифр...

Я писал так:

C#
1
2
3
4
5
Go:
If (SerialPort.BytesToRead == 7)
{ j = SerialPort.ReadLine();
If (j == "OKstart") { Console.Write("Ура");}
} else {goto Go;}
//не работает, єсли j вивести получится 17411034......(цифри не точние) но их 16.... Значит ascii, ардуино при serial.avaliable видаст 7, а не 16...

Ардуино работает хорошо, а приложение под пк — неочень....
0
Эксперт .NET
 Аватар для Rius
13078 / 7639 / 1669
Регистрация: 25.05.2015
Сообщений: 23,243
Записей в блоге: 14
16.10.2017, 20:10
Цитата Сообщение от volotor Посмотреть сообщение
что ардуино, передавая букву "0" через порт передасть число 48, но использовав команду bytestoread в( приложении для пк, c#) ми получим 2
Если вы там видите 2 байта, со значениями 0x34 ('4') и 0x38 ('8'), то это в самой ардуине переводите символ в число, а затем это число в строку.
Код с ардуины покажите.

Не по теме:

Цитата Сообщение от volotor Посмотреть сообщение
SerialPort.BytesToRead
Этот способ чтения данных может выдавать неожиданные для вас результаты. Всё далеко не так просто и очевидно.

Цитата Сообщение от volotor Посмотреть сообщение
Ардуино работает хорошо, а приложение под пк — неочень....
Ардуина по определению не может работать хорошо :D

0
HF
 Аватар для HF
1311 / 889 / 200
Регистрация: 09.09.2011
Сообщений: 2,623
Записей в блоге: 2
16.10.2017, 20:40
Подозреваю намешано volotor.ом всё в кучу. И буфер, и байты, и данные которые оттуда поступают.
Цитата Сообщение от volotor Посмотреть сообщение
а d (100) - 3 байта
Как так? "d" = "100" = "0x64". Откуда 3 байта взялись?

Обычный сценарий передачи по сериал порту
- прочитать количество доступного для чтения. Available - не везде, не всегда и не для всех устройств или драйверов доступен.
- поэтому читают кусками по размеру буфера, проверяя сколько прочтёно и есть ли вообще доступные.
Всё читают в байт массив и конвертируют уже в то что ожидается, не рассуждая про буквы. Слово пришедшее из порта - это всё равно массив байт.

А с BytesToRead какая-то мутная ситуация. Для хорошей работы, нужно использовать событие DataReceived. Я сколько читал что об этом пишут, так толком и не понял. Для работы с сериал портами использую сторонюю библиотеку.
0
Эксперт .NET
 Аватар для Rius
13078 / 7639 / 1669
Регистрация: 25.05.2015
Сообщений: 23,243
Записей в блоге: 14
16.10.2017, 20:48
Цитата Сообщение от HF Посмотреть сообщение
Как так? "d" = "100" = "0x64". Откуда 3 байта взялись?
Да оттуда, примерно:
C
1
2
3
4
char ch = 'd';
char buffer[10];
sprintf(buffer, "%d", ch);
serial.write(buffer, strlen(buffer));


Цитата Сообщение от HF Посмотреть сообщение
Для хорошей работы, нужно использовать событие DataReceived. Я сколько читал что об этом пишут, так толком и не понял.
Да, я об это частенько пишу. Этого события тоже бывает недостаточно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2017, 20:48
Помогаю со студенческими работами здесь

Узнать длину строки и длину каждого слова
есть код который реверсирует слова в строке. Как узнать длину слова(например 3 слова ) и количество символов ? #include...

Определить длину строки, а не количество байт
привет. читаю из сокета 1024 байт. в прочитанном буфере содержится 6 символов. но strlen() говорит что длина строки ровняется 1024...

Написать функцию, которая считывает из буфера клавиатуры строку в s и возвращает длину строки
*с указателями*- написать функцию которая считывает из буфера клавиатуры строку в s и возвращает длину строки. :scratch:

Как узнать путь к файлу из буфера обмена?
Я копирую в Explorer какой либо файл. В Explorer_Е хожу! На файле нажал копировать или ctr+c. Вопрос! Как проще,через мою прогу,...

Запрет на ввод букв и копирование из буфера обмена
Скажите при таком условии на OnKeyPress if Key in then key :=#0; У меня не срабатывает CTRL + V, а он мне необходим для условия...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru