LINUX.ORG.RU

Отслеживание нажатия кнопки на Raspberri pi

 , ,


0

1

Приветствую!

На Raspberry pi подключена кнопка для управления приложением

Написан скрипт для управления:

#!/bin/bash

GPIO_PIN=587
START_STOP=$1
if [ $# -lt 1 ]; then
echo "Use: $0 start/stop"
else
if [ "${START_STOP}" = "start" ]; then
echo ${GPIO_PIN} >/sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio${GPIO_PIN}/direction 
while true; do 
if  [ "$(cat /sys/class/gpio/gpio${GPIO_PIN}/value)" == '0' ]
then
echo "Push button event"
/path/to/apps > /dev/null 2>&1
sleep 0.5
fi
done
elif [ "${START_STOP}" = "stop" ]; then
echo ${GPIO_PIN} >/sys/class/gpio/unexport
else
exit
fi
fi

Написан systemd unit:

[Unit]
Description=Button event
After=network.target

[Service]
Type=simple
User=root
ExecStart=/bin/bash /usr/local/sbin/script.sh start
ExecStop=/bin/bash /usr/local/sbin/script.sh stop
PIDFile=/run/button.pid

[Install]
WantedBy=multi-user.target

Все работает но запущенный таким образом скрипт потребляет много процесорного времени (25-27%)

Возможно есть более элегантный способ опрашивать содержимое файла /sys/class/gpio/gpio${GPIO_PIN}/value? Возможно ли использовать для этого incrond?

У кого есть какие идеи?

Используй libgpiod, там есть возможность реагировать на изменение состояния пина.

nipper
()
Ответ на: комментарий от oleg_kravchenko

Твой внутри if-а. Этот if не срабатывает. Вынеси его наружу или добавь снаружи второй, смотря как тебе надо.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Спасибо! Я ведь так и делал, когда отлаживал скрипт…. А потом ошибся

1 секунда много для четкого отслеживания, 0.2 - нормально.

Всем спасибо!!! Проблема закрыта

oleg_kravchenko
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.