IOT

Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD

Breve introdução

As impressoras térmicas são muito comuns em nosso dia a dia, e há exemplos de impressoras térmicas em restaurantes, estacionamentos e lojas. Este artigo se concentrará na aplicação de impressoras térmicas em sistemas de estacionamento.

Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Materiais a serem usados

  • PEDRA STWI101WT-01
  • Cabeça de impressora térmica FTP
  • Pico de Raspberry Pi
    • Máquina operada por moedas
    funçãoA função de controle é exibida na tela serial, a interface principal seleciona o andar, após entrar na interface principal seleciona a vaga, ao mesmo tempo irá exibir o número da vaga na caixa de texto no canto superior direito, em seguida, seleciona o tempo de permanência, são dois seletores de texto de rolagem, então também o mesmo exibirá as informações do pedido na caixa de texto no canto superior direito, de acordo com o preço unitário fixo que se multiplica pelo tempo de permanência para obter o preço total. Então, somente quando o lugar de estacionamento e o tempo de estadia forem selecionados, você pode ir para o botão de pagamento, caso contrário, é inválido. Após entrar na tela de pagamento, um moedeiro será usado. Em seguida, a tela mostrará o número de moedas a serem colocadas e o número de moedas já colocadas. Após as moedas terem sido colocadas, uma mensagem de sucesso do pagamento será exibida. Em seguida, você pode optar por imprimir um pequeno tíquete para imprimir o número do local e a hora no papel térmico.O processo de designNo começo eu queria usar o Pico de Raspberry Pi para fazer uma pequena impressora. Então, no processo de seleção de componentes, acho que a impressora térmica é mais conveniente de se conseguir, depois de determinar o programa, comecei a comprar hardware. Na verdade, no processo de aquisição online descobri que existem muitas impressoras térmicas com bons circuitos de driver, a maioria delas são feitas usando o chip stm e são projetadas com seu próprio conjunto de instruções. Por exemplo, usando suas instruções para deixar a impressora imprimir caracteres ou ir no papel, mas essa praticidade da impressora é muito alta, mas não vale a pena aprender. É para enviar instruções através da porta serial na linha, você pode manipular a impressora. Então, pensei em comprar um cabeçote de impressão e desenvolvê-lo sozinho. Então, sobre a cabeça de impressão, escolhi uma cabeça de impressão térmica ftp.A cabeça de impressão térmica ftp
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Esta cabeça de impressão deve estar disponível internacionalmente, os princípios básicos são semelhantes. O lado esquerdo é um motor de passo. Então a cabeça do meio tem 6 unidades de aquecimento. Cada unidade de aquecimento possui 64 pontos de aquecimento. Portanto, um total de 384 pontos de aquecimento. Então abaixo está uma trava. Abaixo da trava há um registrador de deslocamento. Finalmente, há um sinal de relógio a ser fornecido. Portanto, todo o princípio de operação é fornecer um sinal de clock para a cabeça de impressão e então enviar dados a cada período de clock, após enviar 384 sinais de clock e 384 dados, os dados no registrador de deslocamento serão armazenados na trava. Em seguida, a trava é colocada em nível baixo. Em seguida, os 384 pontos de aquecimento escolherão aquecer ou não, dependendo de cada dado ser 0 ou 1. Ao mesmo tempo, deixe o motor de passo girar para acionar o papel térmico para projetar o caractere desejado. cabeça, fui em frente e pedi uma folha de dados e era um cabo fpc de 30 pinos. Portanto, obviamente não é muito conveniente conectar-se diretamente ao pico com ele. Então pensei que seria melhor projetar um circuito backplane. Tela serial STONE é a fonte de alimentação de 12v, e então eu olho para a voltagem de impressão da cabeça de impressão térmica de um valor de referência é 7.6v, o valor máximo é 8v, então forneço uma voltagem de cerca de 7.6v. Ele também tem uma tensão lógica é de 3.3 V, e o Raspberry Pi pico suporta a fonte de alimentação de 5 V e tem uma tensão de saída de 3.3 V, então o projeto da fonte de alimentação pode usar dois dcdc, com fonte de alimentação de 12 V, uma saída dcdc de 7.6 V para alimentar a cabeça de impressão térmica, a outra saída dcdc 5v para o pico e, em seguida, use os 3.3 V do pico para alimentar a voltagem lógica da cabeça de impressão térmica. Em seguida, 12v lidera o caminho diretamente para a tela serial.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • A propósito, o motor de passo dessa cabeça de impressão térmica também precisa ser acionado. Eu tenho um integrador de tubo Darlington integrado. Mas é muito grande e é um plug-in simples, então basta comprar um chip de driver. Então, esse aspecto do motor de acionamento também está OK. A impressão requer o design de uma fonte, basicamente todo mundo está usando spi flash para armazenamento de fontes, o que é um projeto enorme. Apenas o código ASCII é superior a 100, então você precisa comprar outro flash SPF. Aí todo o planejamento fica quase assim.
    STONE Designer (software GUI Designer)A partir de:https://www.stoneitech.com/support/download/software
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Projete o circuitoEntão, o seguinte começou a projetar o circuito. Primeiro encontre a fonte de alimentação, aliás, no início usei um regulador de tensão de três terminais, pois o circuito é simples, depois de feito, a situação de aquecimento ficou mais grave durante a depuração, muito quente ao toque, então mudo para usar dcdc. Basta seguir a folha de dados do chip diretamente para fazer o diagrama de circuito. Eu escolhi mt2492 aqui, mas ignorei um parâmetro importante é a corrente operacional da cabeça de impressão, a corrente de saída máxima deste chip é 2A, mas a corrente operacional da cabeça de impressão de 2.3A, uma diferença de 0.3A, também pode ser usada, mas a eficiência não é tão alta, falaremos sobre o efeito específico mais tarde.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Então, o chip do driver do motor que comprei é o lv8548, consulte a folha de dados do cabeçote de impressão, que tem um diagrama de sincronização do motor de passo, de acordo com seu tempo, para fornecer um sinal pwm de quatro vias nele.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Depois vem o chip flash, com by25q32bs, capacidade de 32Mbit é bem grande, e conectado ao pico, esperando ser chamado pelo pico.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Depois disso, o diagrama geral do circuito é assim, o canto superior esquerdo é o soquete de comunicação e o soquete da fonte de alimentação, abaixo há uma campainha (não usada de fato no circuito), há um diodo emissor de luz à direita, e o canto inferior direito é um fpc de 30 pinos para conectar a cabeça de impressão.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Depois de feito e pode ser usado conforme mostrado abaixo, deixando um receptáculo de cabeçalho de pino na placa para o pico do Raspberry Pi, você pode conectá-lo diretamente.
    O pico de Raspberry Pi
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Ligue a energia, primeiro não conectado ao pico e cabeça de impressão, meça a tensão de saída do dcdc, no caso normal um é cerca de 7.5v, o outro é cerca de 5v.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Em seguida, conecte a cabeça de impressão, a tela serial e o pico, meça a tensão lógica de cerca de 3.3v, sem problemas, você pode escrever o programa.
    AgendaPretendo primeiro ajustar o motor de passo, esta parte é fácil de ajustar, veja o diagrama de tempo na folha de dados, 8 períodos de clock, cada período de clock deve fornecer separadamente um sinal lógico aos quatro pinos do motor, após 8 períodos o motor irá aumente e depois ajuste a velocidade, mas no meio temos que adicionar um atraso para ajustar a taxa de serviço, caso contrário ele gira muito rápido, o tempo de atraso que defini é de cerca de 5ms e depois de deixá-lo girar você deve dar o nível para baixo, caso contrário o motor parece não girar na verdade a bobina interna ainda está ligada, depois de muito tempo você pode sentir o cheiro de queimado. Em seguida escreva a função, coloque o corpo em um loop, o número de ciclos representa o comprimento de rotação do motor, a função parece um pouco longa, coloque-a em outro lugar sozinho e aguarde a chamada.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Esta é a função após algumas alterações, a velocidade e a duração serão transmitidas no programa principal. Ainda precisa de muita otimização. Aí é o ponto de ajustar o cabeçote de impressão, essa parte é difícil para mim, precisa de sinal de clock, a ficha técnica está escrita no máximo 8M, pensei que precisava de um sinal de uns 8M frequência, é difícil, primeiro medi a frequência com io flip level, a diferença é demais. E aí eu quero usar o pio, e pesquisei um dia inteiro mas o resultado não é bom, minhas habilidades pessoais são limitadas, provavelmente preciso estudar profundamente o manual do chip rp2040. Em seguida, vire os períodos do nível 384 para tentar, é um fluxo de trabalho como este, inicialize a entrada de dados 1 pino, trave 1 pino, sinal de relógio 1 pino, 6 pinos da unidade de impressão e, além da trava, todos os outros pull low e, em seguida, envie um dado dentro de um período de clock, após o ciclo 384 vezes para definir a trava como 0, para definir a unidade de impressão 6 como 1 e, em seguida, qual ponto possui dados sobre qual ponto será aquecido. Após a implementação do conjunto, puxe o nível para trás. Depois que o programa foi escrito e começou a testar, ele realmente não funcionou, na verdade porque muitas unidades de impressão foram controladas, mas a corrente não era suficiente, então altere-o para fornecer menos duas unidades de impressão de alto nível e teste novamente.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Está realmente funcionando! Ele imprimiu uma linha horizontal. Isso significa que não há limite inferior na frequência do clock, então você pode operar o motor de passo para imprimir uma linha vertical. pico dual thread, então deixe o outro thread funcionar síncronamente o motor, então escreva o programa e execute. A linha vertical sai.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Com as linhas horizontais e verticais, em seguida, obter uma linha diagonal, preste atenção a uma unidade de impressão com 64 pontos, que define um comprimento, como 32, e depois faça um ciclo de 32 vezes 384 períodos, cada período configurando apenas os primeiros 64 dados para 1 e definir os próximos 320 dados para 0 e, em seguida, 32 vezes de cada vez apenas na primeira unidade para imprimir um ponto e, em seguida, ciclo incremental, combinado com a velocidade do motor de passo para ajustar e, finalmente, ajustar o tamanho de 64 * 32 do linha diagonal, você também pode primeiro soletrar a letra Z.  
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Então o esboço do programa está lá, se você quiser imprimir a palavra, você precisa fazer a fonte primeiro. Primeiro faça uma letra A maiúscula, tamanho 32 * 32, com uma lista de definições, estou planejando fazer aqui com pin.value (), então faça a fonte, então use 32 linhas e 32 colunas de valores binários para serem chamados, tire para fazer um shift e depois passe para pin.value (), então este é o processo de implementação.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Com 0 como plano de fundo e 1 como primeiro plano, o processo de implementação real fica assim.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • O grande ciclo mais externo 32 está representando o ciclo de 32 linhas, ou seja, imprime 32 linhas e, em seguida, os primeiros 32 ciclos internos são para aquecer metade da primeira unidade de aquecimento, então os 352 períodos restantes serão definidos como 0, e em seguida, menos 1 de 31 de cada vez até 0, você pode contar a primeira linha dos pontos que precisam ser aquecidos da esquerda para a direita e, em seguida, a cada 384 períodos para serem concluídos quando a trava definir 0 e a unidade de aquecimento definir 1 e, em seguida, você pode imprimir e, em seguida, uma palavra A depois de repetir 32 vezes.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Ainda em negrito, este tipo de palavra matricial, existem ferramentas online que podem ser feitas diretamente, a frente mais 0b e, em seguida, adicione uma vírgula na parte de trás, e então você joga de acordo com suas próprias ideias, a fonte é inicialmente destinada a ser armazenado no chip flash, mas eu ajusto muito tempo ainda não pode ser aberto.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Não sei onde está o problema, depois de um tempo irei ajustar novamente, o bom é que o próprio pico tem tamanho flash de 16mbit, armazenar uma biblioteca ascii ainda é o suficiente, então estou tão armazenado.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Defina-o com um dicionário, coloque-o em uma parte separada e chame-o de volta no programa principal. Then after debugging, the available version looks like this.from machine import Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motor#import sysdelaytime = 0.0000001 # Printer clock delaymotor = 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 motormov_bit = 0PRINTER_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 libraryshuru = 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) + 1if (len(shuru) % 12) == 0:    line -= 1lins = 0supper = 0slower = 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()I am separate control printing unit, because the current is not enough so like this, but in order to print clear, making my printing speed becomes particularly slow, the more words the slower, and then the lowercase letters is 24 * 32 dot matrix, that it is less print points to use, but can not give it to leave 32 heating points of space then the character spacing is large, so the capital letters and lowercase letters are separated, the numbers are still 32 * 32.
  • Cabeça de impressão térmica para um sistema de gerenciamento de estacionamento baseado em Raspberry Pi pico e STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  • Finally, the whole program is attached.from machine import UART,Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motorfrom os import uname#import sysuart1 = 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 delaycoin = Pin(22, Pin.IN,Pin.PULL_UP)coin_num = 0motor = 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 motormov_bit = 0PRINTER_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 -= 1lins = 0supper = 0slower = 0danjia = 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 +=                         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 += 1def 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 = Falsedef floor2def():    passdef floor3def():    passdef 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()
  • Fonte: Plato Data Intelliigence