본문 바로가기
GUI 프로젝트/저울 연결하기 (시리얼통신) (Tkinter)

[파이썬 저울 연결] 6. 0점조절, tare 시 오류

by 만다린망고 2022. 1. 7.
반응형

지금까지 짠 코드는 아래와 같다.

 

import serial
import re

ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
                    parity=serial.PARITY_NONE, timeout=0.1)


while(True):
    ser.close()
    ser.open()
    #값 불러오기
    res=ser.readline()
    #문자열로 변환
    res=str(res)
    #숫자 부분 추출, 추출 결과는 ['숫자'] 형태
    res=re.findall("\d+.\d+",res)
    #문자열 추출
    res=res[0]
    #실수로 변환
    res=float(res)
    print(res)

 

영점 조절을 하거나 tare 를 할 때 코드가 종료된다. 또는 영점조절 직후 무게가 0인 경우 코드가 종료된다. 알고보니 지금까지는 무게가 0.03g 이 최소여서 오류가 안났던 것이었다. 

 

>>> res.readline()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'readline'

 

확인해보니 영점조절이나 tare시 숫자가 입력이 안되서, 숫자 추출 후 res 에 빈 리스트가 입력된다. 

 

>>> res
[]

 

리스트가 비어있어서 res=res[0] 이 코드에서 오류가 난 것이다. if문을 이용하여 리스트가 비어있는 경우 res에 "set0" 을 입력하도록 수정하였다. 진짜 0이 나오는 상황과 구분하기 위해 0.0으로 입력하지 않은 것이다. 

 

import serial
import re

ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
                    parity=serial.PARITY_NONE, timeout=0.1)


while(True):
    ser.close()
    ser.open()
    #값 불러오기
    res=ser.readline()
    #문자열로 변환
    res=str(res)
    #숫자 부분 추출, 추출 결과는 ['숫자'] 형태
    res=re.findall("\d+.\d+",res)
    #문자열 추출

    if len(res)==0 :
        res="set0"
    else :
        res=res[0]
        #실수로 변환
        res=float(res)
    print(res)

 

반응형

댓글