IOT

Termisk printhoved til et parkeringsstyringssystem baseret på Raspberry Pi pico og STONE TFT LCD

Kort introduktion

Termoprintere er meget almindelige i vores dagligdag, og der er eksempler på termoprintere på restauranter, parkeringspladser og indkøb. Denne artikel vil fokusere på anvendelsen af ​​termiske printere i parkeringssystemer.

Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Materialer, der skal bruges

  • STEN STWI101WT-01
  • FTP termisk printerhoved
  • Raspberry Pi pico
    • Møntbetjent maskine
    FunktionKontrolfunktionen vises på den serielle skærm, hovedgrænsefladen vælger etage, efter indtastning af hovedgrænsefladen vælger den parkeringsplads, samtidig vil den vise parkeringspladsnummeret i tekstboksen øverst til højre, og derefter vælges opholdstid er det to rullende tekstvælgere, så vil den samme også vise ordreinformationen i tekstboksen øverst til højre, ifølge den faste enhedspris som ganges med opholdstiden for at få den samlede pris. Så først når parkeringsplads og opholdstid er valgt, kan du gå ind på betalingsknappen, ellers er den ugyldig. Efter indtastning af betalingsskærmen vil der blive brugt en møntmodtager. Derefter vil skærmen vise antallet af mønter, der skal lægges i, og antallet af mønter, der allerede er lagt i. Efter mønterne er blevet sat ind, vises en meddelelse om succesfuld betaling. Så kan du vælge at printe en lille billet til at printe stedsnummer og tidspunkt på termopapiret.DesignprocessenFørst ville jeg bruge Raspberry Pi pico at lave en lille printer. Så i processen med at vælge komponenter, tror jeg, at den termiske printer er mere bekvem at opnå, efter at have bestemt programmet, begyndte jeg at købe hardware. Faktisk fandt jeg i processen med online indkøb ud af, at der er mange termiske printere med gode driverkredsløb, de fleste af dem er lavet ved at bruge stm's chip, og de er designet med deres eget sæt instruktioner. For eksempel ved at bruge hans instruktioner til at lade printeren udskrive tegn eller gå papir, men denne printer praktiske er meget høj, men der er ingen værdi af læring. Det er at sende instruktioner gennem den serielle port på linjen, du kan manipulere printeren. Så jeg tænkte, at jeg ville købe et printhoved og udvikle det selv. Så om printhovedet, valgte jeg et ftp termisk printhoved.Det termiske ftp-printhoved
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dette printhoved bør være tilgængeligt internationalt, de grundlæggende principper er ens. Den venstre side er en stepmotor. Så er det midterste hoved 6 varmeenheder. Hver varmeenhed har 64 varmepunkter. Altså i alt 384 varmepunkter. Så nedenfor er en lås. Under låsen er der et skifteregister. Endelig er der et clock-signal, der skal leveres. Så hele operationsprincippet er at give et clock-signal til printhovedet og derefter sende en data hver clock-periode, efter at have sendt 384 clock-signaler og 384 data, vil dataene i skifteregisteret blive lagret i låsen. Derefter sættes låsen til lavt niveau. Så vil de 384 varmepunkter vælge at opvarme eller ej at opvarme alt efter om hver data er 0 eller 1. Lad samtidig stepmotoren rotere for at drive det termiske papir til at designe den ønskede karakter. Efter at jeg fik termoprintet head, gik jeg videre og bad om et datablad, og det var et 30pin fpc-kabel. Så det er åbenbart ikke særlig praktisk at forbinde til picoen direkte med den. Så jeg tænkte, at jeg hellere måtte designe et backplane-kredsløb. Jeg har en STONE seriel skærm er 12v strømforsyning, og så ser jeg på det termiske printhoved printspænding af en referenceværdi er 7.6v, den maksimale værdi er 8v, så giver det en spænding på omkring 7.6v. Den har også en logisk spænding på 3.3V, og så understøtter Raspberry Pi pico maksimal 5v strømforsyning, og den har en 3.3v udgangsspænding, så kan strømforsyningsdesignet bruge to dcdc, med 12v strømforsyning, en dcdc output 7.6v for at forsyne det termiske printhoved, den anden dcdc-udgang 5v til pico'en, og brug derefter 3.3v fra pico'en til at forsyne det termiske printhovedlogikspænding. Derefter fører 12v vej direkte til den serielle skærm.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • I øvrigt skal stepmotoren til det termiske printhoved også drives. Jeg har en integreret Darlington-rørintegrator. Men det er for stort, og det er et lige plug-in, så køb bare en driver-chip. Så er dette aspekt af drivmotoren også OK. Udskrivning kræver design af en skrifttype, stort set alle bruger spi flash til fontlagring, hvilket er et kæmpe projekt. Kun ascii-koden er mere end 100, så du skal købe en anden SPF-flash. Så er hele planlægningen næsten sådan.
    STONE Designer (GUI Designer-software)Fra:https://www.stoneitech.com/support/download/software
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Design kredsløbetSå begyndte følgende at designe kredsløbet. Find først strømforsyningen, faktisk brugte jeg i begyndelsen en spændingsregulator med tre terminaler, fordi kredsløbet er enkelt, efter at være lavet, var opvarmningssituationen mere alvorlig under fejlfinding, meget varm at røre ved, så jeg skifter til brug dcdc. Bare følg chipdatabladet direkte for at lave kredsløbsdiagrammet. Jeg valgte mt2492 her, men jeg ignorerede en vigtig parameter er skrivehovedets driftsstrøm, den maksimale udgangsstrøm for denne chip er 2A, men printhovedets driftsstrøm på 2.3A, en forskel på 0.3A, den kan også bruges, men effektiviteten er ikke så høj, vi vil tale om den specifikke effekt senere.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Så er motordriverchippen, som jeg købte, lv8548, se printhoveddatabladet, som har et timingdiagram for stepmotordrevet, i henhold til dens timing, for at forsyne det med et fire-vejs pwm-signal.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Så er flash-chippen, med by25q32bs, kapacitet på 32Mbit er ret stor, og forbundet til pico'en, venter på at blive kaldt af pico'en.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Derefter er det overordnede kredsløbsdiagram sådan her, det øverste venstre hjørne er kommunikationsstikket og strømforsyningsstikket, nedenunder er der en summer (ikke faktisk brugt i kredsløbet), der er en lysdiode til højre, og nederste højre hjørne er en 30-pin fpc til tilslutning af printhovedet.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Efter færdig og kan bruges er som vist nedenfor, efterlader en pin header stik på brættet til Raspberry Pi pico, du kan tilslutte direkte til det.
    Raspberry Pi pico
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Tænd for strømmen, først ikke forbundet til pico og printhovedet, mål udgangsspændingen på dcdc'en, i det normale tilfælde er den ene omkring 7.5v, den anden er omkring 5v.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Tilslut derefter printhovedet, den serielle skærm og pico, mål den logiske spænding er omkring 3.3V, uden problemer kan du skrive programmet.
    ProgramJeg har tænkt mig først at justere stepmotoren, denne del er nem at justere, se på timing diagrammet i databladet, 8 clock perioder, hver clock periode skal separat give motorens fire ben et logisk signal, efter 8 perioder vil motoren skru op, og juster så hastigheden, men i midten skal vi tilføje en forsinkelse for at justere arbejdsforholdet ellers drejer det for hurtigt, forsinkelsestiden jeg indstiller er ca. 5ms og så efter at have ladet den dreje skal du give niveauet til lav, ellers ser motoren ikke ud til at dreje, faktisk er den interne spole stadig tændt, efter lang tid kan du lugte den brændende lugt. Skriv derefter funktionen, sæt kroppen i en løkke, antallet af cyklusser repræsenterer længde af motorrotation, funktionen ser lidt lang ud, sæt den et andet sted alene og vent på opkaldet.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dette er funktionen efter få ændringer, hastigheden og varigheden vil blive transmitteret i hovedprogrammet. Det har stadig brug for en masse optimering. Så er meningen med at justere printhovedet, denne del er svær for mig, den har brug for et ursignal, dataarket er skrevet i maksimalt 8M, jeg troede, det skulle et signal på omkring 8M frekvens, det er svært, først målte jeg frekvensen med io flip-niveau, forskellen er for stor. Og så vil jeg bruge pio, og jeg undersøgte en hel dag, men resultatet er ikke godt, mine personlige færdigheder er begrænsede, nok skal jeg studere rp2040-chipmanualen grundigt. Vend derefter niveauet 384 perioder for at prøve, det er en arbejdsgang som dette, initialiser datainput 1 pin, lås 1 pin, ursignal 1 pin, 6 printenhed pins, og ud over låsen alle andre pull low, og send derefter en data inden for en clock periode, efter at have cyklet 384 gange for at indstille låsen til 0, for at indstille 6 printenheden til 1, og derefter hvilket punkt der har data, hvilket punkt vil blive opvarmet. Efter implementeringen af ​​sættet, træk niveauet tilbage. Så efter at programmet var skrevet og begyndte at teste, virkede det virkelig ikke, faktisk fordi der blev kontrolleret for mange printenheder, men strømmen var ikke nok, så skift det til at give mindre to printenheder højt niveau og test igen.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Det virker virkelig! Det udskrev en vandret linje. Det betyder, at der ikke er nogen nedre grænse for clockfrekvensen, så kan du køre stepmotoren for at udskrive en lodret linje. pico dual thread, lad derefter den anden tråd køre motoren synkront, skriv derefter programmet og kør. Den lodrette linje kommer ud.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Med de vandrette og lodrette linjer, få så en diagonal linje, vær opmærksom på, at en printenhed har 64 punkter, der definerer en længde, såsom 32, og cyklus derefter 32 gange 384 perioder, hver periode indstiller kun de første 64 data til 1 og indstil de næste 320 data til 0, og derefter 32 gange hver gang kun i den første enhed for at udskrive et punkt og derefter cykle trinvist, kombineret med hastigheden på stepmotoren for at justere, og til sidst justeret ud 64 * 32 størrelsen af diagonal linje, kan du også først stave et bogstav Z.  
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Så er omridset af programmet der, hvis du vil udskrive ordet skal du lave skrifttypen først. Lav først et stort bogstav A, 32 * 32 størrelse, med en liste over definitioner, jeg planlægger at gøre her med pin.value (), så lav skrifttypen, og brug derefter 32 rækker og 32 kolonner med binære værdier, der skal kaldes, tage ud for at lave et skift og derefter gå videre til pin.value (), så dette er implementeringsprocessen.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Med 0 som baggrund og 1 som forgrund ser selve implementeringsprocessen således ud.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Den mest eksterne store cyklus 32 repræsenterer cyklussen på 32 linjer, det vil sige udskriv 32 linjer, og så skal de første 32 cykler indeni opvarme halvdelen af ​​den første varmeenhed, så vil de resterende 352 perioder blive sat til 0, og derefter minus 1 fra 31 hver gang indtil 0, du kan tælle den første linje af de punkter, der skal opvarmes fra venstre mod højre, og derefter hver 384. perioder, der skal afsluttes, når låsen er indstillet til 0 og varmeenheden indstillet 1 og derefter du kan udskrive, og derefter et A word ud efter at have sløjfet 32 ​​gange igen.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Stadig fed, denne slags dot matrix ord, der er værktøjer online kan gøres direkte, forsiden plus 0b og derefter tilføje et komma på bagsiden, og så spiller du efter dine egne ideer, skrifttypen er faktisk oprindeligt beregnet til at være gemt i flash-chippen, men jeg justerer i lang tid, den kan stadig ikke åbnes.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Jeg ved ikke hvor problemet er, når jeg har tid vil jeg justere igen, det gode er at pico selv har 16mbit størrelse flash, gemme et ascii bibliotek er stadig nok, så er jeg så gemt.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Definer det med en ordbog, læg det i et separat stykke, og kald det tilbage i hovedprogrammet. 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.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. 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()
  • Kilde: Platon Data Intelliigence