Raspberry Pi Pico를 기반으로 한 주차 관리 시스템용 열전사 프린트 헤드 및 STONE TFT LCD

간략한 소개

열전사 프린터는 우리 일상 생활에서 매우 일반적이며 레스토랑, 주차장 및 쇼핑에서 열전사 프린터의 예가 있습니다. 이 기사에서는 주차 시스템에 열전사 프린터를 적용하는 데 중점을 둘 것입니다.

사용할 재료

  1. STONE STWI101WT-01
  2. FTP 열전사 프린터 헤드
  3. 라즈베리 파이 피코
  4. 동전 주입식 기계

기능

제어 기능은 직렬 화면에 표시되고, 메인 인터페이스는 층을 선택하고, 메인 인터페이스에 들어간 후 주차 공간을 선택하고, 동시에 오른쪽 상단의 텍스트 상자에 주차 공간 번호를 표시한 다음 선택합니다. 체류 시간, 그것은 두 개의 스크롤 텍스트 선택기이며, 총 가격을 얻기 위해 체류 시간을 곱한 고정 단가에 따라 오른쪽 상단의 텍스트 상자에 주문 정보도 표시됩니다. 그러면 주차공간과 숙박시간을 선택해야만 결제버튼으로 이동이 가능하며, 그렇지 않을 경우 무효입니다. 결제 화면 진입 후 코인 수납기가 사용됩니다. 그러면 화면에 넣을 코인의 개수와 이미 넣은 코인의 개수가 표시됩니다. 코인을 넣으면 결제 성공 메시지가 표시됩니다. 그런 다음 작은 티켓을 인쇄하여 감열지에 장소 번호와 시간을 인쇄하도록 선택할 수 있습니다.

디자인 프로세스

처음에는 라즈베리파이 피코를 이용해 소형 프린터를 만들고 싶었다. 그런 다음 구성 요소를 선택하는 과정에서 열전 사 프린터가 더 편리하다고 생각하고 프로그램을 결정한 후 하드웨어를 구입하기 시작했습니다. 사실 온라인 조달 과정에서 좋은 드라이버 회로를 가진 열전사 프린터가 많이 있다는 것을 알게 되었고, 대부분이 STM의 칩을 사용하여 만들어지고 자체 지침 세트로 설계되었습니다. 예를 들어, 그의 지시에 따라 프린터가 문자를 인쇄하거나 종이를 인쇄하게 하지만 이 프린터의 실용성은 매우 높지만 학습 가치가 없습니다. 라인의 직렬 포트를 통해 명령을 보내는 것으로 프린터를 조작할 수 있습니다. 그래서 프린트 헤드를 사서 직접 개발해야겠다고 생각했습니다. 그런 다음 프린트 헤드에 대해 FTP 열전사 프린트 헤드를 선택했습니다.

FTP 열전사 프린트 헤드

주차관리시스템

이 프린트 헤드는 국제적으로 사용 가능해야 하며 기본 원칙은 유사합니다. 왼쪽은 스테퍼 모터입니다. 그런 다음 중간 헤드는 6개의 가열 장치입니다. 각 가열 ​​장치에는 64개의 가열점이 있습니다. 총 384개의 가열 지점이 있습니다. 다음은 래치입니다. 래치 아래에는 시프트 레지스터가 있습니다. 마지막으로 제공할 클럭 신호가 있습니다. 따라서 전체 작동 원리는 프린트 헤드에 클록 신호를 제공한 다음 매 클록 주기마다 데이터를 보내는 것입니다. 384 클록 신호와 384 데이터를 보낸 후 시프트 레지스터의 데이터는 래치에 저장됩니다. 그런 다음 래치가 낮은 수준으로 설정됩니다. 그런 다음 384개의 가열 지점은 각 데이터가 0 또는 1인지 여부에 따라 가열할지 여부를 선택합니다. 동시에 스테퍼 모터를 회전시켜 감열지를 구동하여 원하는 문자를 디자인합니다.
열전사 프린트 헤드를 받은 후 데이터시트를 요청했는데 30핀 FPC 케이블이었습니다. 따라서 Pico에 직접 연결하는 것은 분명히 매우 편리하지 않습니다. 그래서 백플레인 회로를 설계하는 것이 더 낫다고 생각했습니다.
나는이 STONE 직렬 화면은 12v 전원 공급 장치이고 기준 값은 7.6v, 최대 값은 8v의 열전사 프린트 헤드 인쇄 전압을 확인한 다음 약 7.6v의 전압을 제공합니다. 또한 논리 전압이 3.3v이고 Raspberry Pi pico 최대 지원 5v 전원 공급 장치와 3.3v 출력 전압이 있는 경우 전원 공급 장치 설계는 12v 전원 공급 장치, 하나의 dcdc 출력 7.6v와 함께 5개의 dcdc를 사용할 수 있습니다. 열전사 프린트 헤드에 전원을 공급하기 위해 다른 dcdc 출력 3.3v를 pico로 출력한 다음 pico의 12v를 사용하여 열전사 프린트 헤드 논리 전압에 전원을 공급합니다. 그런 다음 XNUMXv는 직렬 화면으로 직접 연결됩니다.
그건 그렇고, 그 열전사 프린트 헤드용 스테퍼 모터도 구동해야 합니다. 저는 Darlington 튜브 통합기가 통합되어 있습니다. 하지만 너무 크고 스트레이트 플러그인이므로 드라이버 칩을 구입하십시오. 그렇다면 구동 모터의 이러한 측면도 괜찮습니다.
인쇄에는 글꼴 디자인이 필요합니다. 기본적으로 모든 사람들이 글꼴 저장을 위해 스핀 플래시를 사용하고 있습니다. 이는 거대한 프로젝트입니다. ASCII 코드만 100 이상이므로 다른 SPF 플래시를 구입해야 합니다. 그러면 전체 계획은 대략 이렇습니다.

회로 설계

그런 다음 다음과 같이 회로를 설계하기 시작했습니다. 먼저 전원 공급 장치를 찾으십시오. 사실 처음에는 2492 단자 전압 조정기를 사용했습니다. 회로가 간단하기 때문에 만든 후 가열 상황이 디버깅 중에 더 심각하고 만지기에 매우 뜨거워서 변경합니다. dcdc를 사용합니다. 회로도를 수행하려면 칩 데이터 시트를 직접 따르십시오. 여기에서 mt2를 선택했지만 중요한 매개 변수는 프린트 헤드 작동 전류를 무시했습니다. 이 칩의 최대 출력 전류는 2.3A이지만 프린트 헤드 작동 전류는 0.3A, 차이는 XNUMXA이며 사용할 수도 있습니다. 하지만 효율은 그리 높지 않습니다. 구체적인 효과에 대해서는 나중에 이야기하겠습니다.

주차관리시스템

그런 다음 내가 구입한 모터 드라이버 칩은 lv8548입니다. 타이밍에 따라 스테퍼 ​​모터 드라이브 타이밍 다이어그램이 있는 프린트 헤드 데이터 시트를 참조하여 XNUMX방향 pwm 신호를 제공합니다.

주차관리시스템

다음은 플래시 칩으로, by25q32bs, 32Mbit의 용량이 상당히 크며 Pico에 연결되어 Pico에 의해 호출되기를 기다리고 있습니다.

주차관리시스템

그 후 전체 회로도는 이렇습니다. 왼쪽 상단 모서리는 통신 소켓과 전원 공급 소켓, 아래에는 부저(회로에서 실제로 사용되지 않음)가 있고, 오른쪽에는 발광 다이오드가 있고, 오른쪽 하단 모서리는 프린트 헤드를 연결하기 위한 30핀 FPC입니다.

주차관리시스템주차관리시스템

라즈베리 파이 피코

주차관리시스템

먼저 피코와 프린트 헤드에 연결되지 않은 전원을 켜고 dcdc의 출력 전압을 측정합니다. 일반적인 경우 하나는 약 7.5v이고 다른 하나는 약 5v입니다.

주차관리시스템

주차관리시스템

주차관리시스템

그런 다음 프린트 헤드, 직렬 화면 및 피코를 연결하고 논리 전압이 약 3.3v인지 측정하면 문제가 없으면 프로그램을 작성할 수 있습니다.

프로그램

나는 먼저 스테퍼 모터를 조정하려고 합니다. 이 부분은 조정하기 쉽습니다. 데이터시트의 타이밍 다이어그램을 보십시오. 8 클록 주기, 모든 클록 주기는 별도로 모터의 8개 핀에 논리 신호를 제공해야 합니다. 5 주기 후에 모터가 회전합니다. 위로 올린 다음 속도를 조정하지만 중간에 듀티 비율을 조정하기 위해 지연을 추가해야 합니다. 그렇지 않으면 너무 빨리 회전합니다. 내가 설정한 지연 시간은 약 XNUMXms이고 회전시킨 후 레벨을 주어야 합니다. 낮음, 그렇지 않으면 모터가 실제로 회전하지 않는 것 같습니다. 실제로 내부 코일이 여전히 전원이 켜져 있고 오랜 시간이 지나면 타는 냄새를 맡을 수 있습니다.
그런 다음 함수를 작성하고 몸체를 루프에 넣고 사이클 수는 모터 회전 길이를 나타내며 함수는 약간 길어 보이고 다른 곳에 따로 놓고 호출을 기다립니다.

주차관리시스템

주차관리시스템

이것은 몇 가지 변경 후 기능이며, 속도와 지속 시간은 기본 프로그램에서 전송됩니다. 아직 최적화가 많이 필요합니다.
그 다음이 프린트 헤드를 조절하는 포인트인데 이 부분이 저에게는 어렵네요 클럭 신호가 필요한데 데이터시트가 최대 8M로 쓰여져 있는데 대략 8M 주파수의 신호가 필요하다고 생각했는데 어렵네요 우선 io 플립 레벨로 주파수를 측정했는데 차이가 너무 큽니다.
그리고 핀을 사용하고 싶어서 하루 종일 연구했지만 결과가 좋지 않고 개인 기술이 제한되어 있습니다. 아마도 rp2040 칩을 수동으로 깊이 연구해야 할 것입니다.
그런 다음 레벨 384 주기를 뒤집어서 시도하는 것과 같은 워크플로입니다. 데이터 입력 1핀, 래치 1핀, 클록 신호 1핀, 인쇄 장치 핀 6개를 초기화한 다음 래치 외에 다른 모든 핀을 로우로 풀고, 그런 다음 래치를 384으로 설정하기 위해 0번 순환한 후 한 클록 기간 내에 하나의 데이터를 전송하고 6 인쇄 단위를 1로 설정한 다음 어느 지점이 가열될 데이터를 가지고 있습니다. 세트를 구현한 후 레벨을 뒤로 당깁니다.
그런 다음 프로그램을 작성하고 테스트를 시작한 후 실제로 너무 많은 인쇄 단위가 제어되었지만 전류가 충분하지 않았기 때문에 실제로 작동하지 않았습니다. 그런 다음 두 개의 인쇄 단위보다 적은 수준으로 변경하고 다시 테스트하십시오.

주차관리시스템

정말 효과가 있습니다! 가로선을 인쇄했습니다.
즉, 클럭 주파수에 하한선이 없으며 스테퍼 모터를 실행하여 수직선을 인쇄할 수 있습니다. 피코 듀얼 스레드, 다른 스레드가 모터를 동기식으로 실행하도록 한 다음 프로그램을 작성하고 실행합니다. 세로줄이 나옵니다.

주차관리시스템

수평선과 수직선을 사용하여 대각선을 얻은 다음 하나의 인쇄 단위에 64 포인트가 있다는 점에 주의하십시오. 이 점은 32와 같은 길이를 정의한 다음 32 x 384 주기를 순환하며 각 기간은 처음 64 데이터만 1로 설정합니다. 다음 320 데이터를 0으로 설정한 다음 첫 번째 단위에서만 32번씩 점을 인쇄한 다음 증분 주기를 조정하고 스테퍼 모터의 속도와 결합하여 조정하고 마지막으로 64*32 크기를 조정합니다. 대각선으로 먼저 문자 Z를 철자할 수도 있습니다.

주차관리시스템

그런 다음 프로그램의 개요가 있습니다. 단어를 인쇄하려면 먼저 글꼴을 지정해야 합니다. 먼저 정의 목록과 함께 대문자 A, 32 * 32 크기를 수행하고 여기에서 핀으로 수행할 계획입니다. 값()이므로 글꼴을 만든 다음 호출할 바이너리 값의 32행 32열을 사용하여 시프트를 수행한 다음 핀에 전달합니다. 값()이므로 구현하는 과정입니다.

주차관리시스템

배경이 0이고 전경이 1인 경우 실제 구현 프로세스는 다음과 같습니다.

주차관리시스템

가장 바깥쪽의 큰 주기 32는 32줄의 주기를 나타냅니다. 즉, 32줄을 인쇄한 다음 내부의 처음 32주기는 첫 번째 가열 장치의 절반을 가열하고 나머지 352주기는 0으로 설정하고 그런 다음 1까지 매번 31에서 0을 뺀 다음 왼쪽에서 오른쪽으로 가열해야 하는 지점의 첫 번째 줄을 계산한 다음 래치가 384으로 설정되고 가열 장치가 0로 설정되면 완료될 1 주기마다 계산할 수 있습니다. 다시 32번 반복한 후 출력할 수 있습니다.

주차관리시스템

여전히 굵게, 이런 종류의 도트 매트릭스 단어는 온라인에서 직접 수행할 수 있는 도구가 있습니다. 앞면에 0b를 더한 다음 뒷면에 쉼표를 추가한 다음 자신의 아이디어에 따라 재생합니다. 글꼴은 실제로 처음에 의도된 것입니다. 플래시 칩에 저장했지만 오랜 시간 동안 여전히 열 수 없습니다.

주차관리시스템

문제가 어디에 있는지 모르겠습니다. 시간이 있으면 다시 조정할 것입니다. 좋은 점은 Pico 자체에 16mbit 크기의 플래시가 있고 ASCII 라이브러리를 저장하는 것으로 충분하다는 것입니다. 그러면 저장됩니다.

주차관리시스템

사전으로 정의하고 별도의 조각에 넣고 메인 프로그램에서 다시 호출하십시오. 그런 다음 디버깅 후 사용 가능한 버전은 다음과 같습니다.
from machine import Pin
from time import sleep
import _thread
import rp2
from array import array
import ascii_ku
import speed_motor
#import sys
delaytime = 0.0000001 # Printer clock delay
motor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer's internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motor
mov_bit = 0
PRINTER_DIN = Pin(20, Pin.OUT)
PRINTER_CLK = Pin(19, Pin.OUT)
PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)
STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)
STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)
STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)
STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)
STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)
STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)
lock = _thread.allocate_lock()
ascii_code = ascii_ku.ascii_code() # Importing an ascii character library
shuru = input("Please enter text:")
line_word = []
for item in range(len(shuru)):
line_word.append(shuru[item])
# line_num = len(shuru)
# bottom_line_num = len(shuru)%
# global motor_speed = 0
# global line = 0
# if len(shuru) > 12:
#     motor_speed = len(shuru) % 6
#     if (len(shuru) % 6) == 0:
#         motor_speed = 12
# else:
#     motor_speed = len(shuru)
# print(motor_speed)
motor_speed = len(shuru)
line = (len(shuru) // 12) + 1
if (len(shuru) % 12) == 0:
line -= 1
lins = 0
supper = 0
slower = 0
# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))
_thread.start_new_thread(motor.run_stop, (motor_speed, 1))
# _thread.start_new_thread(motor.run_stop, (0.03, 56))
def last_word_size32 (word_line, linss, lins, supper, slower):
for mov_bit in range((supper*32)+(slower*24)):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(31, -1, -1):
word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(word_bit)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(352-((supper*32)+(slower*24))):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
if (supper*32)+(slower*24) < 192:
PRINTER_LAT.value(0)
STB1.value(1)
STB2.value(1)
STB3.value(1)
sleep(0.005)
STB1.value(0)
STB2.value(0)
STB3.value(0)
PRINTER_LAT.value(1)
else:
PRINTER_LAT.value(0)
STB4.value(1)
STB5.value(1)
STB6.value(1)
sleep(0.005)
STB4.value(0)
STB5.value(0)
STB6.value(0)
PRINTER_LAT.value(1)
def word_size24 (word_line, linss, lins, supper, slower):
for mov_bit in range((supper*32)+(slower*24)):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(23, -1, -1):
word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(word_bit)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(360-((supper*32)+(slower*24))):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
if (supper*32)+(slower*24) < 192:
PRINTER_LAT.value(0)
STB1.value(1)
STB2.value(1)
STB3.value(1)
sleep(0.005)
STB1.value(0)
STB2.value(0)
STB3.value(0)
PRINTER_LAT.value(1)
else:
PRINTER_LAT.value(0)
STB4.value(1)
STB5.value(1)
STB6.value(1)
sleep(0.005)
STB4.value(0)
STB5.value(0)
STB6.value(0)
PRINTER_LAT.value(1)
for linss in range(32):
supper=slower=0
if linss < 32:
for lins in range(len(line_word)):
#             if lins//12:
#                 break
if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):
last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)
supper += 1
elif (line_word[lins].islower()):
word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)
slower += 1
else:
if linss == 32:
sleep(5.8)
for lins in range(motor_speed):
if (line_word[lins].isupper()):
last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))
#     elif:
#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))
#     for linss in range(32):
#         for lins in range(len(line_word)):
#             if (line_word[lins].isupper()):
#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word))
line_word.clear()

저는 별도의 제어 인쇄부입니다. 이렇게 전류가 부족하여 인쇄를 선명하게 하기 위해서는 특히 인쇄 속도가 느려지므로 단어가 많을수록 느려지고 소문자는 24 * 32 도트 매트릭스입니다. , 사용할 인쇄 포인트가 적지만 공백의 32 가열 포인트를 남겨 둘 수 없다는 점에서 문자 간격이 커서 대문자와 소문자가 분리되어 숫자가 여전히 32 * 32입니다. 그런 다음 인쇄 할 수 있습니다 기본 기능을 달성했지만 수행되지 않은 두 가지 보조 기능이 있습니다. 하나는 용지 감지 및 과열 방지 기능이 부족하고 회로 부분은 완료되었으며 프로그램은 아직 수행할 시간이 없습니다.
종이를 갱신하기 위해 일시적으로 먼저 수동 주의를 기울이고 가열 헤드가 오랫동안 가열하지 않도록 합니다.
다음 단계는 동전 수납기를 하는 것인데 회로가 동전 수납기의 배선 포트를 남겨두는 것을 잊었다는 것을 알았으므로 보드 뒷면에서 전선을 연결하겠습니다.
다행이도 동전수납기에 신호선 하나만 사용하다가 제 피코를 보면 오른쪽에 GP28이 있는데 연결 후 신호를 측정할 수 없어 GP22를 사용하도록 변경했습니다. , 같은 프로그램인데 왜 GP28을 사용할 수 없는지 이해가 되지 않습니다.

주차 관리 시스템(20)

Finally, the whole program is attached.
from machine import UART,Pin
from time import sleep
import _thread
import rp2
from array import array
import ascii_ku
import speed_motor
from os import uname
#import sys
uart1 = UART(0, baudrate = 115200, tx =Pin(0), rx = Pin(1))
floor1 = ['f', 'l', 'o', 'o', 'r','1']
floor2 = ['f', 'l', 'o', 'o', 'r','2']
floor3 = ['f', 'l', 'o', 'o', 'r','3']
button_cmd = [16,1]
selector_cmd = [16,129]
print(uname()[0])
delaytime = 0.0000001 # Printer clock delay
coin = Pin(22, Pin.IN,Pin.PULL_UP)
coin_num = 0
motor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer's internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motor
mov_bit = 0
PRINTER_DIN = Pin(20, Pin.OUT)
PRINTER_CLK = Pin(19, Pin.OUT)
PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)
STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)
STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)
STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)
STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)
STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)
STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)
lock = _thread.allocate_lock()
ascii_code = ascii_ku.ascii_code() # Importing an ascii character library
# shuru = 'aa'
# line_word = []
# for item in range(len(shuru)):
#     line_word.append(shuru[item])
# line_num = len(shuru)
# bottom_line_num = len(shuru)%
# global motor_speed = 0
# global line = 0
# if len(shuru) > 6:
#     motor_speed = len(shuru) % 6
#     if (len(shuru) % 6) == 0:
#         motor_speed = 12
# else:
#     motor_speed = len(shuru)
# # print(motor_speed)
#
# line = (len(shuru) // 12) + 1
# if (len(shuru) % 12) == 0:
#     line -= 1
lins = 0
supper = 0
slower = 0
danjia = 0
# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))
# _thread.start_new_thread(motor.run_stop, (motor_speed, line))
# _thread.start_new_thread(motor.run_stop, (0.03, 56))
def pay(pay):
global coin_num
line_word = {'line_word1':['s','i','t','e',':','F','1','-','0'],'line_word2':['0','d','a','y','2','h','o','u','r'],'line_word3':['t','o','t','a','l',':','4','.','0'],'line_word4':['T','o','t','a','l',':','4','.','0']}
line_wors = {'line_word1':['U','n','i','t',':','2','.','0','0'],'line_word2':['T','o','t','a','l',':','4','.','0'],
'line_word3':['U','n','i','t',':','2','.','0','0'],'line_word4':['T','o','t','a','l',':','5','.','0']}
#     line_word1 = ['S','i','t','e',':','F','1','-','0']
#     line_word2 = ['1','D','a','y','1','H','o','u','r']
#     line_word3 = ['U','n','i','t',':','2','.','0','0']
#     line_word4 = ['T','o','t','a','l',':','5','.','0']
#     line_word1[8]=str(pay[0])
#     line_word2[0]=str(pay[1])
#     line_word2[4]=str(pay[2])
#     line_word4[6]=str(pay[3])
(line_word['line_word1'])[8]=str(pay[0])
#     (line_word['line_word2'])[0]=str(pay[1])
#     (line_word['line_word2'])[4]=str(pay[2])
#     (line_word['line_word4'])[6]=str(pay[3])
sleep(1)
uart1.write('ST<{"cmd_code":"set_value","type":"image_value","widget":"image_value4","value":'+str(pay[3])+'}>ET')
#     sleep(2)
#     print(line_word.get('line_word'+str(1))[0])
#     print('zfdszfz',line_word)
#     sleep(2)
#     uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message5","text":"F1 - '+pay[0]+'"}>ET')
#     uart1.sendbreak()
#     sleep(1)
#     uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message6","text":"'+str(pay[1])+'"}>ET')
#     uart1.sendbreak()
#     sleep(1)
# #     uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message22","text":"'+str(pay[2])+'"}>ET')
#     uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message8","text":"'+str(pay[3])+'"}>ET')
while True:
if coin.value()==0:
coin_num += 1
print("Number of coins deposited:",coin_num)
sleep(0.1)
uart1.write('ST<{"cmd_code":"set_value","type":"image_value","widget":"image_value2","value":'+str(coin_num)+'}>ET')
if coin_num == pay[3]:
uart1.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"image37","visible":true}>ET')
if uart1.any()>1:
rx2 = []
data_name2 = ''
bin_data = uart1.read(40)
uart1.sendbreak()
rx1 = list(bin_data)
for item in rx1:
rx2.append(chr(item))
print(rx2)
if rx1[3:5:1] == button_cmd:
data_name_len = rx1[6] - 1
data_name = rx2[7:data_name_len+6:1]
data_name2 = ''.join(data_name)
print(data_name2)
if data_name2 == 'back':
break
elif data_name2 == 'print' and coin_num == pay[3] and rx1[13] == 2:
data_name2=''
_thread.start_new_thread(motor.run_stop, (9, 4))
for iii in range(1,3):
for linss in range(32):
supper=slower=0
for lins in range(9):
#                                 temp_list=ascii_code.code.get(('line_word'+str(iii))[lins])
#                                 print(temp_list,type(temp_list))
if (line_word.get('line_word'+str(iii))[lins]).islower():
word_size24 (ascii_code.code.get(line_word.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
slower += 1
else:
last_word_size32 (ascii_code.code.get(line_word.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
supper += 1
sleep(6)
#                     for iii in range(1,2):
#                         for linss in range(32):
#                             supper=slower=0
#                             for lins in range(9):
# #                                 temp_list=ascii_code.code.get(('line_word'+str(iii))[lins])
# #                                 print(temp_list,type(temp_list))
#                                 if (line_wors.get('line_word'+str(iii))[lins]).islower():
#                                     word_size24 (ascii_code.code.get(line_wors.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
#                                     slower += 1
#                                 else:
#                                     last_word_size32 (ascii_code.code.get(line_wors.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
#                                     supper += 1
#                     sleep(6)
#                     for iii in range(1,2):
#                         for linss in range(32):
#                             supper=slower=0
#                             for lins in range(9):
# #                                 temp_list=ascii_code.code.get(('line_word'+str(iii))[lins])
# #                                 print(temp_list,type(temp_list))
#                                 if (line_wors.get('line_word'+str(iii))[lins]).islower():
#                                     word_size24 (ascii_code.code.get(line_wors.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
#                                     slower += 1
#                                 else:
#                                     last_word_size32 (ascii_code.code.get(line_wors.get('line_word'+str(iii))[lins]), linss%32, lins%12, supper, slower)
#                                     supper += 1
def floor1def():
day_jia = 0
hour_jia = 0
day_flag = False
hour_flag = False
price_flag = False
posltion = False
zongjia = 0
pay1 = [0,0,0,0]
print("floor1 now")
#     uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message3","text":"2.00$/H"}>ET')
uart1.sendbreak()
while True:
if uart1.any()>1:
rx2 = []
data_name2 = ''
bin_data = uart1.read(40)
uart1.sendbreak()
rx1 = list(bin_data)
for item in rx1:
rx2.append(chr(item))
print(rx2)
if rx1[3:5:1] == button_cmd:
data_name_len = rx1[6] - 1
data_name = rx2[7:data_name_len+6:1]
data_name2 = ''.join(data_name)
print(data_name2)
if data_name2 == 'back':
break
elif data_name2 == 'position':
posltion = True
pay1[0]=rx2[15]
write1(rx2[15])
elif data_name2 == 'pay' and posltion and price_flag:
uart1.write('ST<{"cmd_code":"open_win","type":"window","widget":"window7"}>ET')
pay(pay1)
#                 if data_name2 == 'pay' and posltion = True and (day_flag or hour_flag):
#                     posltion = True
#                     uart1.write('ST<{"cmd_code":"open_win","type":"window","widget":"window7"}>ET')
if rx1[3:5:1] == selector_cmd:
data_name_len = rx1[6] - 4
data_name = rx2[7:data_name_len+7:1]
data_name2 = ''.join(data_name)
print(data_name2)
if data_name2 == 'time_day1':
pay1[1]=rx2[19]
write2(ord(rx2[19]))
day_jia = ord(rx2[19])
day_flag = True
elif data_name2 == 'time_hour1':
pay1[2]=rx2[20]
write3(ord(rx2[20]))
hour_jia = ord(rx2[20])
hour_flag = True
if hour_flag or day_flag:
price_flag = True
zongjia = (day_jia*48) + (hour_jia*2)
pay1[3]=zongjia
print(str(zongjia))
uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message4","text":"'+str(zongjia)+'"}>ET')
hour_flag = day_flag = False
def floor2def():
pass
def floor3def():
pass
def write1(num):
#print(ss)
for item in range(49,55):
uart1.write('ST<{"cmd_code":"set_image","type":"image","widget":"image1_'+chr(item)+'","image":"nocar_bg"}>ET')
uart1.write('ST<{"cmd_code":"set_image","type":"image","widget":"image1_'+num+'","image":"selectedcar_bg2"}>ET')
uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message1","text":"F1 - '+num+'"}>ET')
def write2(num):
#     danjia = 1
uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message2","text":"'+str(num)+'"}>ET')
#     if danjia == 1:
#         uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message3","text":"2.00$/H"}>ET')
def write3(num):
#     danjia = 1
uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message22","text":"'+str(num)+'"}>ET')
#     if danjia == 1:
#         uart1.write('ST<{"cmd_code":"set_text","type":"edit","widget":"message3","text":"2.00$/H"}>ET')
def last_word_size32 (word_line, linss, lins, supper, slower):
for mov_bit in range((supper*32)+(slower*24)):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(31, -1, -1):
word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(word_bit)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(352-((supper*32)+(slower*24))):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
if (supper*32)+(slower*24) < 192:
PRINTER_LAT.value(0)
STB1.value(1)
STB2.value(1)
STB3.value(1)
STB4.value(1)
sleep(0.005)
STB1.value(0)
STB2.value(0)
STB3.value(0)
STB4.value(0)
PRINTER_LAT.value(1)
else:
PRINTER_LAT.value(0)
STB4.value(1)
STB5.value(1)
STB6.value(1)
sleep(0.005)
STB4.value(0)
STB5.value(0)
STB6.value(0)
PRINTER_LAT.value(1)
#         PRINTER_LAT.value(0)
#         STB1.value(1)
#         STB2.value(1)
#         STB3.value(1)
#         STB4.value(1)
#         STB5.value(1)
#         STB6.value(1)
#         sleep(0.005)
#         STB1.value(0)
#         STB2.value(0)
#         STB3.value(0)
#         STB4.value(0)
#         STB5.value(0)
#         STB6.value(0)
#         PRINTER_LAT.value(1)
def word_size24 (word_line, linss, lins, supper, slower):
for mov_bit in range((supper*32)+(slower*24)):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(23, -1, -1):
word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(word_bit)
PRINTER_CLK.value(1)
sleep(delaytime)
for mov_bit in range(360-((supper*32)+(slower*24))):
PRINTER_CLK.value(0)
sleep(delaytime)
PRINTER_DIN.value(0)
PRINTER_CLK.value(1)
sleep(delaytime)
if (supper*32)+(slower*24) < 192:
PRINTER_LAT.value(0)
STB1.value(1)
STB2.value(1)
STB3.value(1)
sleep(0.005)
STB1.value(0)
STB2.value(0)
STB3.value(0)
PRINTER_LAT.value(1)
else:
PRINTER_LAT.value(0)
STB4.value(1)
STB5.value(1)
STB6.value(1)
sleep(0.005)
STB4.value(0)
STB5.value(0)
STB6.value(0)
PRINTER_LAT.value(1)
#         PRINTER_LAT.value(0)
#         STB1.value(1)
#         STB2.value(1)
#         STB3.value(1)
#         STB4.value(1)
#         STB5.value(1)
#         STB6.value(1)
#         sleep(0.005)
#         STB1.value(0)
#         STB2.value(0)
#         STB3.value(0)
#         STB4.value(0)
#         STB5.value(0)
#         STB6.value(0)
#         PRINTER_LAT.value(1)
while True:
if uart1.any()>1:
rx2 = []
data_name2 = ''
bin_data = uart1.read(40)
uart1.sendbreak()
rx1 = list(bin_data)
for item in rx1:
rx2.append(chr(item))
print(rx2)
if rx2[7:13:1] == floor1:
floor1def()
elif rx2[7:13:1] == floor2:
floor2def()
elif rx2[7:13:1] == floor3:
floor3def()
for linss in range(32):
supper=slower=0
if linss < 32:
for lins in range(len(line_word)):
#             if lins//12:
#                 break
if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):
last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)
supper += 1
elif (line_word[lins].islower()):
word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)
slower += 1
else:
if linss == 32:
sleep(5.8)
for lins in range(motor_speed):
if (line_word[lins].isupper()):
last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))
#     elif:
#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))
#     for linss in range(32):
#         for lins in range(len(line_word)):
#             if (line_word[lins].isupper()):
#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word))
line_word.clear()

위쪽으로 스크롤