IOT

Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD

Kort introduksjon

Termoprintere er svært vanlig i vårt daglige liv, og det finnes eksempler på termoprintere på restauranter, parkeringsplasser og shopping. Denne artikkelen vil fokusere på bruken av termiske skrivere i parkeringssystemer.

Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Materialer som skal brukes

  • STEIN STWI101WT-01
  • FTP termisk skriverhode
  • Raspberry Pi pico
    • Myntstyrt maskin
    FunksjonKontrollfunksjonen vises på serieskjermen, hovedgrensesnittet velger etasjen, etter å ha gått inn i hovedgrensesnittet velger den parkeringsplassen, samtidig vil den vise parkeringsplassnummeret i tekstboksen øverst til høyre, og deretter velges oppholdstid, det er to rulletekstvelgere, da vil også den samme vise bestillingsinformasjonen i tekstboksen øverst til høyre, i henhold til fast enhetspris som multipliseres med oppholdstiden for å få totalprisen. Da først når parkeringsplass og oppholdstid er valgt, kan du gå inn på betalingsknappen, ellers er den ugyldig. Etter å ha kommet inn på betalingsskjermen vil en myntmottaker bli brukt. Deretter vil skjermen vise antall mynter som skal settes inn og antall mynter som allerede er lagt inn. Etter at myntene er satt inn, vil en melding om betaling vises. Da kan du velge å skrive ut en liten billett for å skrive ut stedsnummer og tidspunkt på termopapiret.DesignprosessenFørst ønsket jeg å bruke Raspberry Pi pico å lage en liten skriver. Så i ferd med å velge komponenter, tror jeg den termiske skriveren er mer praktisk å oppnå, etter å ha bestemt programmet, begynte jeg å kjøpe maskinvare. Faktisk, i prosessen med online anskaffelser fant jeg ut at det er mange termiske skrivere med gode driverkretser, de fleste av dem er laget ved å bruke stm sin chip, og de er designet med sitt eget sett med instruksjoner. For eksempel, ved å bruke hans instruksjoner for å la skriveren skrive ut tegn eller gå papir, men denne skriveren praktiske er svært høy, men det er ingen verdi av læring. Det er å sende instruksjoner gjennom serieporten på linjen, du kan manipulere skriveren. Så jeg tenkte jeg skulle kjøpe et skrivehode og utvikle det selv. Når det gjelder skrivehodet, valgte jeg et termisk ftp-skrivehode.Det termiske ftp-skrivehodet
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Dette skrivehodet bør være tilgjengelig internasjonalt, de grunnleggende prinsippene er like. Venstre side er en trinnmotor. Da er det midterste hodet 6 varmeenheter. Hver varmeenhet har 64 varmepunkter på seg. Altså totalt 384 varmepunkter. Så nedenfor er en lås. Under låsen er det et skifteregister. Til slutt er det et klokkesignal som skal gis. Så hele operasjonsprinsippet er å gi et klokkesignal til skrivehodet og deretter sende en data hver klokkeperiode, etter å ha sendt 384 klokkesignaler og 384 data, vil dataene i skiftregisteret bli lagret i låsen. Deretter settes låsen til lavt nivå. Deretter vil de 384 varmepunktene velge å varme eller ikke varme i henhold til om hver data er 0 eller 1. La samtidig trinnmotoren rotere for å drive det termiske papiret til å designe ønsket karakter.Etter at jeg fikk termotrykket head, gikk jeg videre og ba om et datablad, og det var en 30pin fpc-kabel. Så det er åpenbart ikke veldig praktisk å koble til picoen direkte med den. Så jeg tenkte at det var bedre å designe en bakplankrets. Jeg har en STONE seriell skjerm er 12v strømforsyning, og så ser jeg på den termiske skrivehodets utskriftsspenning med en referanseverdi er 7.6v, maksimalverdien er 8v, og gir den deretter en spenning på ca 7.6v. Den har også en logisk spenning på 3.3v, og deretter Raspberry Pi pico maksimal støtte 5v strømforsyning og den har en 3.3v utgangsspenning, så kan strømforsyningsdesignen bruke to likestrøm, med 12v strømforsyning, en likestrømutgang 7.6v for å gi strøm til det termiske skrivehodet, gir den andre DCDC ut 5V til picoen, og bruk deretter 3.3V fra picoen til å drive logikkspenningen for det termiske skrivehodet. Deretter fører 12v vei direkte til serieskjermen.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Forresten, trinnmotoren til det termiske skrivehodet må også drives. Jeg har en integrert Darlington-rørintegrator. Men det er for stort, og det er en rett plug-in, så bare kjøp en driverbrikke. Da er dette aspektet av drivmotoren også OK. Utskrift krever utforming av en font, i utgangspunktet bruker alle spi flash for fontlagring, som er et stort prosjekt. Bare ascii-koden er mer enn 100, så du må kjøpe en annen SPF-blits. Da er hele planleggingen nesten slik.
    STONE Designer (GUI Designer-programvare)Desde:https://www.stoneitech.com/support/download/software
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Design kretsenSå begynte følgende å designe kretsen. Finn først strømforsyningen, faktisk, i begynnelsen brukte jeg en tre-terminal spenningsregulator, fordi kretsen er enkel, etter å ha blitt laget, var oppvarmingssituasjonen mer alvorlig under feilsøking, veldig varm å ta på, så jeg endrer til bruk dcdc. Bare følg brikkedataarket direkte for å gjøre kretsskjemaet. Jeg valgte mt2492 her, men jeg ignorerte en viktig parameter er skrivehodets driftsstrøm, den maksimale utgangsstrømmen til denne brikken er 2A, men skrivehodets driftsstrøm på 2.3A, en forskjell på 0.3A, den kan også brukes, men effektiviteten er ikke så høy, vi skal snakke om den spesifikke effekten senere.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Deretter er motordriverbrikken som jeg kjøpte lv8548, se skrivehodedataarket, som har et timingdiagram for trinnmotordrift, i henhold til timingen, for å gi den et fireveis pwm-signal.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Deretter er flash-brikken, med by25q32bs, kapasitet på 32Mbit er ganske stor, og koblet til pico, venter på å bli kalt av pico.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Etter det er det generelle kretsskjemaet slik, øvre venstre hjørne er kommunikasjonskontakten og strømforsyningskontakten, under er det en summer (brukes faktisk ikke i kretsen), det er en lysdiode til høyre, og det nedre høyre hjørnet er en 30pin fpc for tilkobling av skrivehodet.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Etter ferdig og kan brukes er som vist nedenfor, og etterlater en pinnehodekontakt på brettet for Raspberry Pi pico, du kan koble direkte til den.
    Raspberry Pi pico
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Slå på strømmen, først ikke koblet til pico og skrivehodet, mål utgangsspenningen til dcdc, i det normale tilfellet er den ene ca 7.5v, den andre er ca 5v.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Koble deretter til skrivehodet, seriell skjerm og pico, mål den logiske spenningen er ca 3.3v, uten problemer kan du skrive programmet.
    programJeg har tenkt å først justere trinnmotoren, denne delen er enkel å justere, se på tidsdiagrammet i dataarket, 8 klokkeperioder, hver klokkeperiode skal separat gi motorens fire pinner et logisk signal, etter 8 perioder vil motoren skru opp, og deretter justere hastigheten, men i midten må vi legge til en forsinkelse for å justere duty ratio ellers snur den for fort, forsinkelsestiden jeg setter er ca 5ms og så etter å ha latt den snu må du gi nivået til lav, ellers ser ikke motoren ut til å snu, faktisk er den interne spolen fortsatt på strøm, etter lang tid kan du lukte den brennende lukten. Skriv deretter funksjonen, sett kroppen i en løkke, antall sykluser representerer lengde på motorrotasjon, funksjonen ser litt lang ut, sett den et annet sted alene og vent på samtalen.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Dette er funksjonen etter noen få endringer, hastighet og varighet vil bli overført i hovedprogrammet. Den trenger fortsatt mye optimering. Så er poenget med å justere skrivehodet, denne delen er vanskelig for meg, den trenger et klokkesignal, dataarket er skrevet i maksimalt 8M, jeg trodde det trengte et signal på ca. 8M frekvens, det er vanskelig, først målte jeg frekvensen med io flip-nivå, forskjellen er for stor. Og så vil jeg bruke pio, og jeg undersøkte en hel dag, men resultatet er ikke bra, mine personlige ferdigheter er begrenset, sannsynligvis må jeg studere rp2040-brikkemanualen grundig. Vend deretter nivået 384-perioder for å prøve, det er en arbeidsflyt som dette, initialiser datainngangen 1 pin, lås 1 pin, klokkesignal 1 pin, 6 printenhet pinner, og så i tillegg til låsen alle andre pull low, og send deretter én data innen én klokkeperiode, etter å ha syklet 384 ganger for å sette låsen til 0, for å sette 6-utskriftsenheten til 1, og deretter hvilket punkt som har data hvilket punkt som skal varmes opp. Etter implementeringen av settet, trekk nivået tilbake. Så etter at programmet ble skrevet og startet testing, fungerte det virkelig ikke, faktisk fordi for mange utskriftsenheter ble kontrollert, men strømmen var ikke nok, så endre den for å gi mindre to utskriftsenheter høyt nivå og test på nytt.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Det fungerer virkelig! Den trykket en horisontal linje. Det betyr at det ikke er noen nedre grense på klokkefrekvensen, så kan du kjøre trinnmotoren for å skrive ut en vertikal linje. pico dual thread, la deretter den andre tråden til synkron kjøre motoren, skriv deretter programmet og kjør. Den vertikale linjen kommer ut.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Med de horisontale og vertikale linjene, få en diagonal linje, vær oppmerksom på at en utskriftsenhet har 64 punkter, som definerer en lengde, for eksempel 32, og deretter syklus 32 ganger 384 perioder, hver periode setter bare de første 64 dataene til 1 og sett de neste 320 dataene til 0, og deretter 32 ganger hver gang bare i den første enheten for å skrive ut et punkt og deretter syklus inkrementell, kombinert med hastigheten til trinnmotoren for å justere, og til slutt justert ut 64 * 32 størrelsen på diagonal linje, kan du også først stave ut en bokstav Z.  
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Da er omrisset av programmet der, hvis du vil skrive ut ordet må du gjøre fonten først. Gjør først en stor bokstav A, 32 * 32 størrelse, med en liste over definisjoner, jeg planlegger å gjøre her med pin.value (), så lag fonten, bruk deretter 32 rader og 32 kolonner med binære verdier som skal kalles, ta ut for å gjøre et skift og deretter gå til pin.value (), så dette er prosessen med implementering.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Med 0 som bakgrunn og 1 som forgrunn, ser da selve implementeringsprosessen slik ut.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Den mest eksterne store syklusen 32 representerer syklusen på 32 linjer, det vil si skriv ut 32 linjer, og deretter skal de første 32 syklusene inne varme opp halvparten av den første varmeenheten, deretter vil de resterende 352 periodene settes til 0, og deretter minus 1 fra 31 hver gang til 0, kan du telle den første linjen med punktene som må varmes opp fra venstre til høyre, og deretter hver 384. perioder som skal fullføres når låsen er satt til 0 og varmeenheten satt 1 og deretter du kan skrive ut, og deretter ett A word ut etter loop 32 ganger igjen.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Fortsatt fet, denne typen matriseord, det er verktøy på nettet som kan gjøres direkte, foran pluss 0b og deretter legge til et komma på baksiden, og så spiller du i henhold til dine egne ideer, fonten er faktisk i utgangspunktet ment å være lagret i flash-brikken, men jeg justerer lenge den kan fortsatt ikke åpnes.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Jeg vet ikke hvor problemet er, etter at jeg har tid vil jeg justere igjen, det gode er at pico selv har 16mbit størrelse flash, lagre et ascii-bibliotek er fortsatt nok, da er jeg så lagret.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  • Definer det med en ordbok, legg det i et eget stykke, og kall det tilbake 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.
  • Termisk skrivehode for et parkeringsstyringssystem basert på Raspberry Pi pico og STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikalt søk. 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