Давайте рассмотрим ваш вопрос:
Я пытаюсь отправить HEX линию на устройство через последовательную связь и прочитать ответ обратно ...
Вы не говорите, какое устройство, нужно предположить, что указанное устройство не является ни Arduino, о котором вы говорите позже, ни компьютером.
... при мониторинге транзакции.
Это просто невозможно, если у вас нет многоточечной последовательной связи (например, RS485). Если вы хотите контролировать последовательную связь, вам нужно сделать это с любой стороны, либо использовать специальное оборудование (аппаратный анализатор), либо реализовать собственный анализатор, используя пару дополнительных последовательных портов.
... но я не читаю правильную передачу и какой-либо ответ через USB.
Если ваш Arduino подключен к вашему компьютеру через USB, в общем сценарии (который вы не могли бы быть, но вы не хотели объяснять), вы уже используете аппаратный последовательный порт Arduino для этой цели (последовательный монитор включен твой компьютер).
Итак, где же "устройство" подключено к вашему Arduino? Если вы имеете в виду, что подключили его к контактам 0 и 1, когда Arduino подключен к компьютеру через USB, то мы нашли вашу проблему.
Из официальной документации :
На Uno, Nano, Mini и Mega контакты 0 и 1 используются для связи с компьютером. Подключение чего-либо к этим контактам может помешать этому обмену , в том числе вызвать неудачные загрузки на плату.
Наконец, вы говорите:
... хотя внешний адаптер USART показывает правильный ответ.
Очевидно, вы подразумеваете, что подключаете свое «устройство» к компьютеру с помощью адаптера USB-последовательный порт, в то время как Arduino вообще не вмешивается. Полагаю, вы имеете в виду, что у вас есть терминальная программа, такая как PuTTY или RealTerm для Windows или Minicom для Linux, вы открываете сеанс для виртуального последовательного порта (созданного при подключении вашего кабеля), вводите команду и нажимаете вводную команду. Если это так, учтите, что команда, которую вы пишете с помощью Arduino, не заканчивается на CR или LF. Ваше устройство требует завершения линии? Можно только догадываться ...
Теперь с вашим кодом. Не зная, что вы хотите сделать, или с большим количеством пробелов в догадках, не очень легко дать вам много отзывов.
Но эта строка кажется особенно загадочной:
Serial.write(&one_shot_FAST[0], sizeof(one_shot_FAST));
Поскольку one_shot_FAST
является байтовым массивом (для всех целей указателем), поэтому, когда вы используете &one_shot_FAST[0]
, вы просите записать адрес, который первый элемент массива занимает в памяти. Я не уверен, что вы думаете по этому поводу, но я думаю, что вы можете отказаться от &
, чтобы вместо этого отправлять фактические байты в вашей команде.
В вашем коде есть и другие странные вещи: вы пишете в порт и мгновенно (вероятно, даже до того, как данные отправляются в буфер TX) читаете один байт. Я предполагаю, что это приведет к Serial.read()
возвращению -1
.
РЕДАКТИРОВАТЬ : Я проверил ваш код, и часть записи (очевидно, у меня нет оборудования, чтобы ответить на команду) работает нормально. Квадрат и тире, которые вы видите, наиболее вероятны из-за того, что вы используете последовательную консоль Arduino, которая пытается отобразить значения HEX больше 127 в виде ASCII, поэтому она не знает, как их отображать. Если вы используете терминал, способный отображать HEX, команда будет отображаться правильно. И, конечно же, у вас есть проблема с попыткой подключения более двух устройств к шине.