728x90
반응형
import os
import serial
import time
import threading

PORT = "COM3" #윈도우
# PORT = "/dev/ttyUSB0" #리눅스, $ sudo chmod 666 /dev/ttyUSB0
BAUDRATE = 9600
# BAUDRATE = 115200

# 시리얼 포트와 통신 준비
# ser = serial.Serial(PORT, baudrate=BAUDRATE)

ser:serial.Serial = None

def prepare():
    global ser

    ser = serial.Serial(PORT, baudrate=BAUDRATE)

    # 스레드 생성 (target = 스레드가 수행할 처리가 담긴 함수, args = target을 호출할때 전달할 args)
    # t = threading.Thread(target=sum, args=(1, 100000000))
    # t.daemon = True # 데몬스레드 = 메인스레드가 죽을때 따라죽는다
    # t.start() # 스레드 시작
    t = threading.Thread(target=readSerial)
    t.daemon = True # 데몬스레드 = 메인스레드가 죽을때 따라죽는다
    t.start() # 스레드 시작

    pass

def readSerial():

    while True:
        line = ser.readline().decode().replace('\n', '').replace('\r', '')
        
        # "" == False
        if not line:
            # time.sleep(1)
            continue
        
        print("readline: " + line)
        pass

    pass

def writeSerial():

    while True:

        os.system('cls')
        msg = input('각도를 입력하세요 (0-180)(종료:q): \n')     
        if msg == 'q':
            break

        # 음수표기로 '-'는 문자라 isdigit() 결과가 False
        # 미리 '-'표기를 지우고 숫자만 남겨 isdigit()이 True라면 숫자라 볼 수 있다
        if not msg.lstrip('-').isdigit():
            print('숫자가 아닙니다')
            time.sleep(2)
            continue

        # 문자형을 숫자형으로 변경
        angle = int(msg)

        # 숫자형이기에 숫자로써 범위지정이 가능
        if 0 > angle or angle > 180:
            print('유효 각도를 벗어나 다시 입력')
            time.sleep(2)
            continue

        # 시리얼통신으로 전송시엔 다시 문자형으로 변경 및 인코딩하여 전송
        ser.write(str(angle).encode())
        print('정상적으로 전송: ', angle)
        time.sleep(2)

        # line = ser.readline().decode().replace('\n', '').replace('\r', '')
        # print("받아온 값: ", line)
        # time.sleep(2)

        pass

    pass

def sum(low, high):

    while True:
        total = 0
        for i in range(low, high):
            total += i
        print('sum: ', total)

    pass

if __name__ == '__main__':
    prepare()

    # 블럭.. 사용자 입력을 계속해서 받음
    writeSerial()

    pass
728x90
반응형

'Qt' 카테고리의 다른 글

serial_write_read++Qt  (0) 2022.11.04
groupBox_frame(How to implement toggle)  (0) 2022.11.04
label  (0) 2022.11.04
spinbox_slider_progressorBar  (0) 2022.11.04
test  (0) 2022.11.04

+ Recent posts