因此,我构建了一个 RPI 3 的 MLB 记分板。现在,显示屏可以显示我最喜欢的球队的比赛情况,也可以显示所有球队的比赛情况,并在比赛进行时循环播放。我想在记分板背面添加一个切换开关,以根据当时的参赛者选择“所有球队”或“我的球队”。我有两个独立的几乎相同的记分板目录,可容纳“All-Teams”或“My-Teams”。
现在我有一个名为“start-scoreboard.sh”的 cron 文件,它将启动记分板,显示所有球队或我的球队,具体取决于我在“cd /home/pi/mlb-led-scoreboard”中输入的内容-(此处为所有团队或我的团队)” cron 文件中。
有没有办法让 RPI 读取 GPIO 引脚的状态并运行 All-Teams 或 My-Teams 目录?这是我的“start-scoreboard.sh”cron 文件中的示例,其中列出了所有团队目录...
!/bin/bash
u/reboot sleep 60 $$ start-scoreboard.sh
cd /home/pi/mlb-led-scoreboard-All-Teams
n=0
until [ $n -ge 10 ]
do
python main.py --led-gpio-mapping=adafruit-hat --led-brightness=50 --led-slowdown-gpio=3 --led-rows=32 --led-cols=64 && break
n=$[$n+1]
sleep 10
done
答案1
首先:您正在 python 脚本中执行 GPIO 操作。老实说,您应该使用与那里使用的相同的库(我不知道)来读取 GPIO 状态并做出相应的行为!你的循环也是如此do python… ; sleep 10; done
:这确实是你应该集成到你的 python 脚本中的东西。
其次,当然,只需检查 GPIO 伪文件的值,具体取决于您的内核设置/sys/class/gpio/gpio{number}/value
(可能需要使用 来设置该引脚的方向echo in > /sys/class/gpio/gpio{number}/direction
;如果不存在,您可能需要出口首先是echo {number} > /sys/class/gpio/export
) ;那是已弃用的 sysfs 接口,但我打赌 RPi 的默认内核仍然处于启用状态。或者,使用gpio
可以为 Linux 发行版安装的工具,以及gpio read {id}
.
答案2
好吧,我最终使用了以下方法,它似乎已经成功了。希望发布此内容,以防有人自己遇到此问题并正在寻找答案。在 GPIO 引脚的接线中,我最终将开关连接在 39(接地)和引脚 40 之间。
#!/bin/bash
# Set GPIO pin number
GPIO_PIN=40 # Enter what GPIO pin is to be switched to ground
# Set up GPIO pin as input
echo "$GPIO_PIN" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$GPIO_PIN/direction
# Read the state of the GPIO pin
GPIO_STATE=$(cat /sys/class/gpio/gpio$GPIO_PIN/value)
# Depending on the GPIO state, choose the appropriate directory
if [ $GPIO_STATE -eq 0 ]; then
SCOREBOARD_DIR="/home/pi/mlb-led-scoreboard-All-Teams"
else
SCOREBOARD_DIR="/home/pi/mlb-led-scoreboard-My-Teams"
fi
# Change to the selected directory
cd "$SCOREBOARD_DIR"
# Start the scoreboard
n=0
until [ $n -ge 10 ]
do
python main.py --led-gpio-mapping=adafruit-hat --led-brightness=50 --led-slowdown-gpio=3 --led-rows=32 --led-cols=64 && break
n=$[$n+1]
sleep 10
done
# Clean up GPIO pin
echo "$GPIO_PIN" > /sys/class/gpio/unexport