# 허니웰 바코드 리더기 COM 포트 리딩 프로그램

COM3 포트에 연결된 허니웰 바코드 리더기에서 바코드를 실시간으로 읽어 터미널에 출력하는 Python 프로그램입니다.

## 필수 라이브러리 설치

```bash
pip install pyserial
```

## 사용 방법

### 1. 기본 실행 (COM3 포트, 9600 bps)

```bash
python barcode_reader.py
```

### 2. 다른 COM 포트 사용

```bash
python barcode_reader.py --port COM5
```

### 3. 통신 속도 변경

```bash
python barcode_reader.py --baudrate 115200
```

### 4. 사용 가능한 COM 포트 목록 확인

```bash
python barcode_reader.py --list-ports
```

## 출력 예시

```
[시작] 바코드 리더기 연결 중...
포트: COM3
속도: 9600 bps
------------------------------------------------------------
[성공] COM3 포트 연결 완료!
[대기] 바코드를 스캔해주세요... (종료: Ctrl+C)
============================================================

[스캔 #1] 2026-01-07 15:30:45
바코드: 8801234567890
길이: 13자
원본(HEX): 383830313233343536373839300d0a
------------------------------------------------------------
[스캔 #2] 2026-01-07 15:30:52
바코드: ABC123XYZ
길이: 9자
원본(HEX): 4142433132335859 5a0d0a
------------------------------------------------------------
```

## 프로그램 종료

- **Ctrl + C** 키를 눌러 프로그램을 종료합니다.
- 종료 시 총 스캔한 바코드 개수가 표시됩니다.

## 트러블슈팅

### 1. "포트 연결 실패" 오류

**원인:**
- COM3 포트가 다른 프로그램에서 사용 중
- 바코드 리더기가 제대로 연결되지 않음
- 잘못된 포트 번호

**해결 방법:**
```bash
# 1. 사용 가능한 포트 목록 확인
python barcode_reader.py --list-ports

# 2. 올바른 포트 번호로 실행
python barcode_reader.py --port COM5
```

### 2. 바코드가 읽히지 않음

**확인 사항:**
- 바코드 리더기의 LED가 켜지는지 확인
- 바코드 리더기 설정 확인 (USB-COM 모드인지)
- 케이블 연결 상태 확인

### 3. 글자가 깨져서 나옴

**원인:**
- 잘못된 통신 속도(baudrate) 설정

**해결 방법:**
```bash
# 다른 통신 속도 시도
python barcode_reader.py --baudrate 115200
python barcode_reader.py --baudrate 19200
```

허니웰 바코드 리더기의 일반적인 통신 속도:
- 9600 bps (기본값)
- 19200 bps
- 38400 bps
- 115200 bps

## 허니웰 바코드 리더기 설정

일부 허니웰 바코드 리더기는 USB-COM 모드로 전환해야 할 수 있습니다.

### USB-COM 모드 활성화 방법:

1. 바코드 리더기 매뉴얼에서 "USB Serial Emulation" 설정 바코드 찾기
2. 해당 바코드 스캔하여 USB-COM 모드 활성화
3. 컴퓨터 재연결 후 장치 관리자에서 COM 포트 확인

## 장치 관리자에서 COM 포트 확인

1. `Windows + X` → **장치 관리자** 실행
2. **포트(COM & LPT)** 항목 확장
3. 바코드 리더기의 COM 포트 번호 확인 (예: COM3, COM5 등)

## 코드 구조

```python
# 주요 함수
read_barcode_from_com3(port, baudrate, timeout)
  ├─ 시리얼 포트 열기
  ├─ 바코드 데이터 실시간 읽기
  ├─ UTF-8/ASCII 디코딩
  └─ 터미널 출력

list_available_ports()
  └─ 사용 가능한 COM 포트 목록 출력
```

## 참고

- 프로그램은 바코드 스캔 시 자동으로 감지하여 출력합니다.
- 각 바코드마다 스캔 번호, 시간, 내용, HEX 값이 표시됩니다.
- 바코드 리더기는 일반적으로 스캔 후 개행문자(\r\n)를 전송합니다.
