Официальный сайт компании Arduino по адресу arduino.cc
Нулевые байты по serial port
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 19/01/2018 - 06:24
Добрый день
Есть необходимость принимать пакеты побайтовой информации, вот такого типа
A0 | 00 E6 02 00 00 88 |
Делаю это вроде обычным образом через побайтовое заполнение массива. Массив заполняется, но он состояит из не нулевых байт только, т е например вместо того что выше я получаю A0 E6 02 88, т е длина массива 4.
Подскажите, как сделать, чтобы получать весь пакет с нулевыми байтами? ниже кусок кода
[code]
byte resultPow[7];
int a = 0;
while (mySerial.available()) {
resultPow[a] = mySerial.read();
a++;
}
[/code]
Для начала проверьте, что именно Вы передаете.
Заливал скейч на прием и передачу с одного порта на другой виртуальный, и пробовал через COM port Toolkit отправлять и получать комманды, всё работает, как нужно. Вот скрин
Заливал скейч на прием и передачу с одного порта на другой виртуальный, и пробовал через COM port Toolkit отправлять и получать комманды, всё работает, как нужно. Вот скрин
Не надо скрин того, что работает. Давайте код приемника и передатчика, в которых теряются нулевые байты.
Нули не причем. Вы читаете из Сериала два байта - один в строке 28 и один 29, а сохраняете только первый.
Точно!! всё работает, большое спасибо
Странно вы как-то вольты с посылки вычисляете. Да и проверок нет никаких - ни валидности ответа, ни CRC.
Странно вы как-то вольты с посылки вычисляете. Да и проверок нет никаких - ни валидности ответа, ни CRC.
Последний байт это контрольная сумма пакета. Всё добавлю, сейчас для отладки связи так написано.
А вольты почему странно? Третий байт это целое число вольт. Как правильней?
А вольты почему странно? Третий байт это целое число вольт. Как правильней?
Третий? а в коде вы выводите второй...
А вольты почему странно? Третий байт это целое число вольт. Как правильней?
У меня вот так записано (деталей не вспомню, но полагается поделить на 10, чтобы десятые доли вольта получить):
Ну и там еще первый байт проверить на ==(command - 0x10), иначе веры нет ответу.
А вольты почему странно? Третий байт это целое число вольт. Как правильней?
Третий? а в коде вы выводите второй...
Третий в смысле 0 1 2
А вольты почему странно? Третий байт это целое число вольт. Как правильней?
У меня вот так записано (деталей не вспомню, но полагается поделить на 10, чтобы десятые доли вольта получить):
Ну и там еще первый байт проверить на ==(command - 0x10), иначе веры нет ответу.
На вольтах десятые не интересуют, а вот для ампер выведу.
Что значит такая запись _dst[1] << 8
Точно!! всё работает, большое спасибо
Да уж...
Оказывается еще и реальный исходник принципиально отличается от того, что бы опубликован в исходном сообщении.
На вольтах десятые не интересуют, а вот для ампер выведу
Для ампер можно с сотыми, у меня вот так (надо поделить на 100):
В принципе десятые уже идут [3] - можно ничего не умножать и пр., но мне такая формула нужна для своей процедуры.
Что значит такая запись _dst[1] << 8
То же самое, что у вас resultVol[1]*256 в ответ передается два байта, значит нужно сгрузить их все в одну переменную.
sadman41, а как вы реализовали отправку комманд по кругу с заданной задержкой?
У меня не по кругу, а по запросу. В чем, собственно, проблема с периодическим запросом?
У меня не по кругу, а по запросу. В чем, собственно, проблема с периодическим запросом?
Одну комманду, отправлял обычным if (millis() - timeread1 > updateFreq) { timeread1 = millis();...
Две коммманды тоже не проблема, таким же способо, только они сбрасывают по кругу друг-другу таймеры.
А вот с 4 коммандами так не получилось. Нужно еще условие, а какое не пойму пока.
Вот так работает, но выглядит не солидно
Солидно будет если вы ардуине разъемы позолотите...
А в вашей ситуации можно было бы сделать, например так:
Солидно будет если вы ардуине разъемы позолотите...
А в вашей ситуации можно было бы сделать, например так:
Локанично, спасибо, переделал
Здравствуйте!
Вопрос нубский, на новую тему не тянет, сорри, что тут задаю.
Хочу понять как использовать в коде бинарные данные. Например, для управления DFPlayer-ом. Как управлять помощью обычных функций (mp3_play;) в сети примеров масса и проблем нет. А вот как с serial командами, ни одной статьи не могу найти.
Что посоветуете почитать?
Что посоветуете почитать?
Документацию к Arduino, в частности, Serial.write пишет в UART данные в виде байт.
Спасибо! C практикой сложновато.
В даташите к плееру есть табличка:
0x01 Play next
0x02 Play previous
и т.д.
Во второй табличке пример:
7E FF 06 3D 00 00 01 xx xx EF.
Как с первой таблички перейти во вторую - об этом инфы негде не встречал.
Спасибо! C практикой сложновато.
В даташите к плееру есть табличка:
0x01 Play next
0x02 Play previous
и т.д.
Во второй табличке пример:
7E FF 06 3D 00 00 01 xx xx EF.
Как с первой таблички перейти во вторую - об этом инфы негде не встречал.
В даташите к командам плеера, ВНЕЗАПНО, описан формат пакета, который надо отсылать. Собирайте пакет ручками - и отсылайте, это не проблема. Собственно, библиотека так и делает - можете посмотреть, как там реализовано.
Так на английском написано. Понятно что можно перевести, дойти интуитивно.
Просто странно, что негде об этом внятно не рассказано. Инфы то на абзац будет. Скольким бы новичкам время сэкономило.
Так на английском написано. Понятно что можно перевести, дойти интуитивно.
Просто странно, что негде об этом внятно не рассказано. Инфы то на абзац будет. Скольким бы новичкам время сэкономило.
Раз занялись программированием - привыкайте, что подавляющее большинство документации - на английском, это нормально. Потом - есть гугл-переводчик, он вполне внятно переводит.
Не для спора но скажу. Сам не электронщик, занимаюсь по необходимости, (профессия связана со звуком). Заметил, что в электронной среде весьма распространено кокетничание своими знаниями. Вместо ответа - какие-то абстрактные суждения с нравоучительным подтекстом. Это отличный способ самоутверждения но с небольшой червоточинкой. Дело в том, что подлинное самоутверждение возможно лишь в случае творческой работы: например, написать код более изящно и лаконично чем другие. А здесь всего лишь обознанность с некими алгоритмами и схемами, которые по сути знанием и не являются. До этого преимущественно бывал на профильных форумах и сравнив с элетронными замечу - контрастность разительная. На вопрос по звуке, какой бы он дурацкий не был, я бы уже давно получил ответ, а здесь на нескольких сайтах одно и то же. Вероятно, это связано с тем, что в музыке техника вторична, и никто не заморачивается с хранением в неприкосновенности своих "знаний". А здесь же получается порочный круг. К примеру, задумай я стать элеткронщиком и пройдя сходный "путь обретения знаний" я бы сам так же ревниво обращался к новоприбывшим. Ни в коей не хочу обобщать всех завсегдатаев данного ресурса. На нем есть реально знающие люди (например автор, который этюды) пишет. Но а вы, ребята, не самоутвержайесь таким вот низким методом. Лучше не отвечайте, если вам нечего сказать. Без обид.
Возможно, что вы по звуку задаете вопросы правильно, а не "как вместо ля сыграть си"?
Как с первой таблички перейти во вторую - об этом инфы негде не встречал.
Вот, я вам за пяток минут нашёл: http://www.trainelectronics.com/Arduino/MP3Sound/TalkingTemperature/FN-M16P%20Embedded%20MP3%20Audio%20Module%20Datasheet.pdf
3.4. Examples of Sending Serial Commands
variator, сколько нот нужно знать чтобы написать симфонию?
И, самое главное - какие? (опубликуйте список необходимых)
Но а вы, ребята, не самоутвержайесь таким вот низким методом. Лучше не отвечайте, если вам нечего сказать. Без обид.
Каким низким-то? Совет почитать даташит, где всё как раз описано нормальным человеческим английским языком - теперь низкий метод? Али ты хочешь, чтобы тебе оттуда выдернули, что тебе нужно, перевели, прожевали, и за тебя ещё и проглотили? Некисло, чо.
Самоутверждение тут не при чём, если ты найдёшь в себе силы понять, что: а) ответ с указанием места, где искать - это грамотный ответ, ибо только так можно научиться, а не тупо копировать. И, б) повторюсь - раз уж влез в программмирование, будь добр изучить нотную грамоту, сиречь - научиться читать документацию на английском.
Ты налил бодяжной воды на три листа, вместо того, чтобы признаться себе - ты ленивая жопа и не хочешь вникать, тебе, как и 99% - надо вот прям щас и сразу.