[해결] Python Code 좀 봐주세요...



  • input_pin = 4
    
    GPIO.setmode(GPIO.BCM)
    
    GPIO.setup(input_pin, GPIO.IN)
    GPIO.setup(23, GPIO.OUT)
    atexit.register(unregister)
    
    setup_linphone()
    
    while True:
        if not GPIO.input(input_pin):
           make_call()
           camera_call()
            GPIO.output(23, Fales)
            GPIO.output(23, True)
            time.sleep(1)
           while not GPIO.input(input_pin):
               time.sleep(0.1)
    

    위의 코드는 4번 GPIO에 스위치를 달아 스위치를 누르면 make_call과 camera_call을 호출함과
    동시에 23 GPIO에 연결된 LED를 1초간격으로 ON/OFF하는 코드입니다.
    무엇이 잘못된 것인지…부탁합니다.
    make_call과 camera_caal까지는 정상입니다.
    LED만 문제네요…


  • Global Moderator

    @hipertech

    while True:
        if not GPIO.input(input_pin):
            make_call()
            camera_call()
            GPIO.output(23, Fales)
            GPIO.output(23, True)
            time.sleep(1)
    

    이 부분을 말씀하신 것 같은데,
    아래 세줄을 보면 이부분은

    1. 23을 0로 만들고
    2. 아주 찰나를 기다린 다음 ( 그냥 안기다린다고 보면 됨 )
    3. 23을 1로 만들고
    4. 1초를 기다리고
    5. while문의 시작으로 돌아감

    이렇게 동작합니다.



  • 감사합니다.
    그런데 에러가 납니다. ㅠ
    제가 필요한 것은 본래 4번을 누르면
    make_call과 camera)call이 동작하고 그와 동시에 23번을 1초 간격으로 30초간 깜박이는
    기능이거든요…
    제가 워낙 초짜라서 도움좀 받을 수 있을까요?


  • Global Moderator

    @hipertech 에러 메세지 좀 올려 주시겠어여.


  • Global Moderator

    @hipertech

    while True:
        if not GPIO.input(input_pin):
            make_call()
            camera_call()
            GPIO.output(23, Fales)
            time.sleep(1)
            GPIO.output(23, True)
    

    이렇게 하시면 될겁니다.
    다만, time.sleep(1) 이 다른 어딘가에 필요할 수도 있습니다.



  • 이 게시물은 삭제되었습니다.

  • Global Moderator

    @Seungrok-Han @hipertech 기존에 제가 PIR Sensor 를 사용 시에 사용하던 건데

    import RPi.GPIO as GPIO
    import time
     
    PIR = 23
    LED = 24
     
    pirState = False                        # we start, assuming no motion detected
    pirVal = False                          # we start, assuming no motion detected
     
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIR, GPIO.IN)
    GPIO.setup(LED, GPIO.OUT)
     
    while True:
        pirVal = GPIO.input(PIR)            # read input value
        if (pirVal == True):                # check if the input is HIGH
            GPIO.output(LED, True)          # turn LED ON
            if (pirState == False):
                # we have _just_ turned on
                pirState = True
        else:
            GPIO.output(LED, False)         # turn LED OFF
            if (pirState == True):
                # we have _just_ turned off
                time.sleep(2)
                pirState = False;
    

    위에서도 보시면 @Seungrok-Han 답처럼

    GPIO23 LOW 
    wait 1 sec
    GPIO 23 HIGH
    

    로 되어 있네여.


  • Global Moderator

    @hipertech 43번 라인에 보시면 Fales 가 아닌 False 로 수정하시고 sleep 도 아래 위를 변경 해 보셔여.



  • 감사합니다.
    시험해보고 결과 올리겠습니다.


  • Global Moderator

    @hipertech
    Python 들여쓰기 정말 짱나죠.

    while True:
        if not GPIO.input(input_pin):
           make_call()
           camera_call()
            GPIO.output(23, Fales)
            GPIO.output(23, True)
            time.sleep(1)
           while not GPIO.input(input_pin):
               time.sleep(0.1)
    

    에서 GPIO.output부터 들여쓰기가 한칸 더 갔네요.



  • 아~~네…
    정상 동작합니다. 감사합니다.
    그런데 한가지 만 더요…
    LED(23)이 계속 들어와 있네요…


  • Global Moderator

    @hipertech 마지막을 True(LED ON) 로 하셔서 그러릴 거 같은데여.


  • Global Moderator

    @hipertech
    현재 소스에는 1초 간격으로 30초간 깜박이는 기능은 찾아볼 수 없네요.
    음…제가 이해를 잘 하고 있는 부분인지는 모르겠으나,
    구현하고자 하는 부분은 thread나, interrupt 기능을 넣으셔야 구현 가능합니다.
    그냥 돌린다면 원하시는데로 동작하질 않아요.
    저 프로그램에서는 깜박이는 30초간 어떠한 다른일도 할 수 없습니다.



  • 네…30초동안 1초간격으로 깜박이는 기능은 못 넣었습니다.
    가능하시다면 알려 주실 수 있으실까요?
    죄송합니다.


  • Global Moderator

    @hipertech 죄송하지만, 직접 작성을 해 보시고, 막히는 것에 대한 질의를 하는 것이 저희 포럼의 성격에도 맞는것 같습니다.



  • 알겠습니다.
    감사합니다.


답변을 위해 로그인하기