본문 바로가기

Study/Python 공부

[Python] ms 단위 sleep 주는 방법

반응형

라즈베리파이를 시작하면서 python도 같이 공부하며 기록중입니다. 

C는 상당히 능숙한데 python을 배우려고 하니 막히는 부분들이 좀 있습니다. 

python으로 작성한 프로그램의 1초 단위 delay를 ms단위로 바꾸고 싶은데 방법이 당장 떠오르지 않더군요. 

 

[python으로 초단위 delay 주는 예제]

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)

while True:
    GPIO.output(2, True)
    time.sleep(1)
    GPIO.output(2, False)
    time.sleep(1)

위의 예제는 python으로 초단위 delay를 주는 예제입니다. 

time.sleep(1) 구문이 의미하는 것은 1초동안 delay를 준 이후에 다음 구문을 실행하라는 의미인거죠. 

1초 단위로 GPIO2번 포트의 신호를 HIGH, LOW를 반복하는 구문인데, 좀 더 주기를 짧게 만들고 싶어졌습니다. 

C문법에 익숙한 저는 당연히 ms 단위의 sleep을 주는 함수가 따로 존재하는줄로 알았습니다. 

 

 

[C 문법에서의 delay]

왜냐하면 C문법에서는 1초 단위의 delay 함수와 ms 단위의 delay 함수가 다르기 때문입니다. 

아래는 C로 초단위를 주는 방법입니다.

 

c 문법에서 sleep(1)의 의미는 예상한것처럼 1초동안 delay를 주라는 의미입니다. 

하지만 인자의 자료형이 unsigned int 이므로 1초 이하의 delay를 줄 수는 없습니다. 

 

C에서는 1초보다 더 짧은 시간의 delay를 주기 위해서는 usleep(50) 이라는 함수를 이용해야 합니다. 

usleep(50)의 의미는 50ms동안의 delay를 주라는 의미인 것이지요. 

이런 이유로 python에서도 usleep 같은 함수가 따로 존재할 것이라고 생각을 했지만, 그건 어디까지나 저의 착각이었습니다. 

 

[python에서 ms 단위를 delay를 주는 방법]

하지만 저의 추측은 추측에 불과했고, pythons 에서는 제가 생각지도 못한 방법으로 ms 단위의 delay를 줄 수 있었던 것입니다. 

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)

while True:
    GPIO.output(2, True)
    time.sleep(0.05)
    GPIO.output(2, False)
    time.sleep(0.05)

time.sleep(1)time.sleep(0.05)로 바꿔주는 것만으로도 ms 단위의 delay를 줄 수 있었습니다. 

그러고보니 python에서는 자료형을 지정해주지 않았었네요. 

time.sleep(1)함수의 인자로 실수를 넣을 수 있었다니... C로 딱딱해진 나의 두뇌여... 

 

 

[끝 맺음말]

C 문법에 익숙해져있는 저에게 python에서의 ms 단위의 delay를 주는 방법은 다소 파격적이었습니다. 

 

이상입니다.

 

오만뒤 작성

반응형