Я не работаю с устройствами Arduino, поэтому не могу быть чем-то конкретным, но за неимением других ответов я могу попытаться дать вам несколько общих советов (для UNIX/Linux )как как решить вашу конкретную проблему.
К сожалению, вы не можете настроить последовательный порт, чтобы он отправлял данные строками. За это отвечает приложение, то есть используемый вами эмулятор терминала screen
в вашем случае. Но я боюсь, (насколько я знаю ), что ни screen
, ни другие приложения-эмуляторы терминала не допускают линейный -режим того, что вы печатаете.
Вы могли бы получить что-то полезное с такими инструментами, как expect
или сопутствующая команда minicom
runscript
(, которая похожа на expect
), которая обычно отправляет данные по строкам.
В противном случае, в качестве еще одного, возможно, хорошего средства, вы могли бы реализовать (очень )рудиментарное -линейно-ориентированное «терминальное приложение».
Каким бы сумасшествием это обычно ни было, может оказаться очень просто сделать это для вашего конкретного случая с помощью всего нескольких команд оболочки.
(
set -e
prev_settings="$(stty -g -F /dev/ttyACM0)"
trap 'stty "${prev_settings}" -F /dev/ttyACM0' EXIT
stty -F /dev/ttyACM0 raw -echo -echoe -echok -echoctl -echoke
cat < /dev/ttyACM0 &
cat > /dev/ttyACM0
)
set -e
просто служит для прекращения выполнения при первой ошибке (, если какая-либо )обнаружена следующими командами.
stty -g
сохраняет текущие настройки последовательного порта.
Параметр trap
настраивает восстановление сохраненных настроек при ВЫХОДЕ из команд.
stty raw...
устанавливает (то, что, как мне кажется, должно быть )наиболее разумным (для данного конкретного случая )для последовательного порта.
Первая команда cat
просто выводит в окно терминала все, что поступает от Arduino.
Вторая команда cat
отправляет в Arduino все, что вы вводите с этого момента.
Чтобы выйти из этой группы команд, просто нажмите Ctrl -C.
«Хитрость» здесь просто в том, что команда cat
по своему замыслу отправляет выходные данные построчно, как вы и просили.
С другой стороны, ввод cat
команда (перваяcat
)сразу показывает каждый отдельный символ, поступающий от Arduino, благодаря настройке stty raw
. Если Arduino отправляет потоки данных, вы можете добавить настройки min 100 time 2
, которые я вижу в вашем текущем выводе stty -a
. Это может отображать вещи немного быстрее в случае потоков.
Круглые скобки служат для запуска этих команд в подоболочке, что удобно для восстановления настроек tty благодаря команде trap
. Вы также можете поместить команды в скрипт (, естественно, без круглых скобок ), а затем запустить его.
Обратите внимание, что лучше закрыть или иным образом приостановить любое другое приложение, которое может получить доступ к последовательному порту, пока вы используете вышеуказанные команды, иначе они могут мешать друг другу.
Это простое решение работает лучше всего, если ваше устройство Arduino не возвращает обратно то, что оно получает. Если это так, вы просто дважды увидите все, что вы набираете, один раз для фактического ввода и еще раз для отражения от Arduino. Дело в том, что то, что вы видите на своем терминале, не может управляться Arduino из-за установки, ориентированной на строку -. Это также можно отключить (, действуя локально, чтобы отключить отображение символов ), но я полагаю, вы предпочитаете видеть, что вы печатаете, прежде чем отправлять его в Arduino.
Последнее (и, надеюсь, не относящееся к делу )замечание: ваш последовательный порт классифицируется как ttyACM
. Обычно это означает, что используемый вами последовательный порт рекламировался как поддерживающий некоторые дополнительные функции, в противном случае он был бы классифицирован системой как более общий порт ttyUSB
. Быть ttyACM
более характерно для специализированных последовательных устройств (, таких как сотовые модемы 3G/4G ), чем для простых последовательных портов. Однако это может быть просто последовательный порт с дурацким чипом, и на практике это не должно вызывать особых проблем.но кто знает..
ХТХ
Поскольку cd
не является " utility
", это оболочка "bultin", обрабатываемая родительской оболочкой env
.
Прочитать man $SHELL
.