Можете посоветовать скрипт для отправки данных на порт?
Нужно, чтобы скрипт при определенном условии отправлял на порт какое-либо слово или просто символ, а со стороны порта эти данные принимала Arduino и в свою очередь после приема тоже выполняла свою операцию. Данные для отправки желательно не из файла какого-то брать, а напрямую командой. Как именно выглядит на Bash команда, которая отправляет на СOM-порт USB0 какие-либо данные?
Saboteur: стоит Ардуино Нано, которая ловит через Serial.avalaible() все изменения со стороны порта
Проблема решилась таким образом - нужно поставить перемычку в виде кондера на 10 мкф через Reset и землю. Вот только перестала работать другая часть скрипта, которая отвечает за таймер бездействия
#!/bin/sh
set -x
IDLE_TIME=$((5000))
trigger_cmd() {
zenity --question --title="Бездействие пользователя" \
--text="Вы возле компьютера?" \
--timeout=10
if [ $? -eq "0" ]
then
triggered=false
sleep_time=$((IDLE_TIME-idle+100))
else echo 1>/dev/ttyUSB2
triggered=true
sleep_time=$IDLE_TIME
fi
}
sleep_time=$IDLE_TIME
triggered=false
while [ 0 ]
do
read R < /dev/ttyUSB2
if [ "$R" = "Sleep" ]
then
echo "Test"
fi
idle=$(xprintidle)
if [ $idle -ge $IDLE_TIME ]; then
if ! $triggered; then
trigger_cmd
fi
fi
sleep 1
done
Saboteur: есть проблема с тем, что команда read забивает остальные процессы. Такое возможно?
Потому что xprintidle с read отказывается считать время бездействия.
Da3z1e: команда read ждет, пока из usb2 к ней прийдет строка, завершающаяся enter-ом
Если вам нужно считывать что-то периодически, то укажите в read timeout.
Например считать что-то, если через 3 секунды ничего не получили, едем дальше, при этом R будет пустое.
read -t 3 R < /dev/tryUSB2
P.S. Уточните, что ваше устройство шлет Sleep\n и Test\n, а не просто Sleep и Test
sudo относится только к echo, перенаправление вывода выполняется тукущим шеллом, поэтому если $USER не входит в группу dialout, эта конструкция не сработает. Рабочий вариант: echo "blablabla" | sudo tee /dev/ttyUSB0
Я использую Python и не парюсь :
import serial
arduino = serial.Serial('/dev/ttyUSB1', 115200, timeout=.1)
arduino.writelines("Hello")
print arduino.readline()