Raspberry Pi에서 핀 상태를 읽고 cron 파일의 두 항목(또는 둘 중 하나) 중에서 선택하는 방법은 무엇입니까?

Raspberry Pi에서 핀 상태를 읽고 cron 파일의 두 항목(또는 둘 중 하나) 중에서 선택하는 방법은 무엇입니까?

그래서 RPI 3 MLB 점수판을 만들었습니다. 이제 디스플레이에 내가 가장 좋아하는 팀의 게임이 표시될 수도 있고, 게임이 진행됨에 따라 모든 팀과 루프가 표시될 수도 있습니다. 점수판 뒷면에 토글 스위치를 추가하여 당시 누가 플레이하고 있는지에 따라 "모든 팀" 또는 "내 팀"을 선택할 수 있도록 하고 싶습니다. "All-Teams" 또는 "My-Teams"를 포함하는 두 개의 거의 동일한 점수판 디렉토리가 있습니다.

이제 "cd /home/pi/mlb-led-scoreboard"에 입력한 항목에 따라 모든 팀 또는 내 팀을 표시하는 점수판을 시작하는 "start-scoreboard.sh"라는 크론 파일이 있습니다. 또는 여기 내 팀)"을 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의 기본 커널은 여전히 ​​활성화되어 있을 것입니다. 또는 gpioLinux 배포용으로 설치할 수 있는 도구를 사용하고 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

관련 정보