gpio read 하는 shell script 작성중 이상현상 질문 드립니다.



  • 안녕하세요 shell script를 이용해서 볼륨조절, 카메라로 사진찍기, 이미지처리(c++코드) 를 하려고 하는데 shell script를 처음 사용해봐서 이것저것 막히는게 많네요ㅜㅜ
    우선 gpio read명령어로 볼륨을 높이는 기능은 되는데 낮추는 버튼이 먹지를 않습니다… 그래서 값을 확인해본 결과 버튼을 눌르기 전에 7번핀 값을 받아와 echo를 해보면 1이 출력되고(이부분도 의문입니다 버튼 입력 전이면 0이 출력되어야 하는게 맞다고 생각하는데 1이 출력되네요…) 버튼을 누르면 0이 출력됩니다 그래서 0일 경우 amixer의 값을 높여주는 방식으로 잘 돌아갔습니다.
    문제는 down버튼을 누렀을때 echo로 확인한 8번핀의 값의 변화가 없습니다… 어떤 문제떄문에 값이 변하지 않는걸까요…?
    문제 원인을 아시거나 gpio버튼 입력을 받아오는 다른 방법 아시는분 답변좀 주시면 감사하겠습니다!


    제가 확인해본 방법

    1. 버튼, 선은 다른걸로 바꿔서 실험(증상이 똑같았습니다)
    2. 다른 핀에 물려서 실험
      ->8번핀(volume down) 말고 다른 핀에 물려봐도 같은 증상입니다
    3. gpio readall로 확인결과 10번 핀이 7번 핀과 같이 기본값이 1이길래
      down을 10번 핀에 물리고 버튼을 누른상태에서 readall로 확인했더니 값이 변했습니다 그러나 코드로 확인했을때는 여전히 값을 제대로 읽어오지 못합니다…
    4. 참고사이트 2를 참고하여 upButton=gpio -g read 7(gpio -g read 7 앞뒤에 `가 있습니다 이 홈페이지 텍스트 편집기에서 표시되지 않네요)
      이런식의 코드로 고쳐봤지만 이렇게 고치니 볼륨+버튼도 먹지 않습니다

    참고사이트
    (1) https://raspberrypi.stackexchange.com/questions/15283/how-to-get-the-state-of-a-gpio-pin-bash
    (2) http://blog.naver.com/PostView.nhn?blogId=junsung9182&logNo=220680692687&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView


    원래 코드
    #!/bin/sh

    #set pin
    gpio mode 7 in
    gpio mode 8 in

    #init vol
    vol=200

    while true
    do
    #set
    upButton=$(gpio read 7)
    downButton=$(gpio read 8)
    #출력
    echo "up : "$upButton
    echo "down : "$downButton

    #볼륨 + 버튼 입력시
    if [ $upButton -eq 0 ]; then
        vol=`expr $vol + 50`
        sudo amixer cset numid=1 $vol
    fi
    #볼륨 - 버튼 입력시
    if [ $downButton -eq 0 ]; then
        vol=`expr $vol - 50`
        sudo amixer cset numid=1 $vol
    fi
    sleep 2
    

    done



  • 또 자문자답이지만… 해결했습니다
    이 명령어가 리눅스에서 기본으로 사용할 수 있는 명령어인줄 알았더니
    wiringPi 명령어더군요… wiringPi 핀맵을 보고 사용하니 정상 작동합니다
    하지만 아직 의문인점은 왜 기본 신호가 0인것이 있고 1인 것이 있는지 모르겠습니다… 기본이 0인 핀은 버튼으로 입력을 해도 반응이 없고 기본이 1인 핀만 버튼 입력에 반응합니다


답글을 작성하기 위해 로그인
 

Rasplay Forum 사이트로의 연결이 끊어졌습니다. 다시 연결을 시도하는동안 잠시만 기다려 주십시오.