사용하는 부분은 이 두 부분이다.
버튼은 2,3번을 사용했기에 핀번호 6, 16을 정의해주고 시작했음
import time
import CK_SPI_ADC as spi_adc
import CK_SPI_DEV as spi_dev
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
#DC 모터 Enable 핀번호 = 17
DCMOT_EN = 17
GPIO.setup(DCMOT_EN, GPIO.OUT)
GPIO.output(DCMOT_EN, 1)
BUTTON_3 = 16
BUTTON_2 = 6
GPIO.setup(BUTTON_3, GPIO.IN)
GPIO.setup(BUTTON_2, GPIO.IN)
#DC모터 방향 시계방향 0, 반시계방향 1
DCMOT_DIR_SW_FWD = 0
DCMOT_DIR_SW_BWD = 1
#디바이스의 값을 초기화해준다
spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)
#map 함수 정의 (아날로그 값의 범위를 변화시켜주는 함수)
def ck_map(x, in_min, in_max, out_min, out_max) :
out_val = (((x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min
return out_val
while (1) :
for i in range(30) :
#speed 는 acd에서 VR1(가변저항)의 값을 읽어온다
#map 함수를 이용하여 아날로그값 0~1023에서 0~100으로 범위를 바꿔준다.
speed = spi_adc.ck_adcRd(spi_adc.ADC_CH_VR1)
speed = ck_map(speed, 0, 1023, 0, 100)
#버튼 3만 눌렸을때
if ((GPIO.input(SWITCH_3) != DCMOT_DIR_SW_FWD) and (GPIO.input(SWITCH_2) != DCMOT_DIR_SW_BWD)) :
#반시계방향만 가변저항 값에 따라 작동한다.
spi_dev.ck_pwmDCMot_fwd(1000, 0)
spi_dev.ck_pwmDCMot_bwd(1000, speed)
#속도와 방향 프린트
print i, ": SPEED : ", speed, " DIR : Backward"
#버튼 2만 눌렸을때
elif ((GPIO.input(SWITCH_3) == DCMOT_DIR_SW_FWD) and (GPIO.input(SWITCH_2) != DCMOT_DIR_SW_BWD)) :
#시계방향만 가변저항 값에 따라 작동한다.
spi_dev.ck_pwmDCMot_fwd(1000, speed)
spi_dev.ck_pwmDCMot_bwd(1000, 0)
#속도와 방향 프린트
print i, ": SPEED : ", speed, " DIR : Forward"
#둘다 아니라면
else:
#어느 방향으로도 움직이지 않는다.
spi_dev.ck_pwmDCMot_fwd(1000, 0)
spi_dev.ck_pwmDCMot_bwd(1000, 0)
#속도와 방향 프린트
print i, ": SPEED : ", speed, " DIR : STOP"
time.sleep(0.5)
#key 에 입력을 받는다
key = raw_input('Quit?? (y/n) : ')
#y값을 받았다면
if (key == 'y') :
#루프를 빠져나온다.
break;
# Off
spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)
작동영상
'Electronics > Raspberry Pi' 카테고리의 다른 글
[Raspberry Pi] 일정 밝기 이상의 빛이 감지되면 세그먼트에 숫자 출력하기 (2) | 2020.12.30 |
---|---|
[Raspberry Pi] 가변저항 VR1 으로 서보모터 각도(0~180도) 컨트롤하기 (0) | 2020.12.30 |
[Raspberry Pi] 빛 센서의 값에 따라 일정 값 이상이면 정방향, 이하이면 역방향으로 모터 회전 시키기 (0) | 2020.12.17 |
[Raspberry Pi] 코딩키트 구성 (0) | 2020.12.17 |
댓글