IOT

Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD

Kort introduktion

Termoskrivare är mycket vanliga i vårt dagliga liv, och det finns exempel på termoskrivare på restauranger, parkeringsplatser och shopping. Den här artikeln kommer att fokusera på tillämpningen av termiska skrivare i parkeringssystem.

Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Material som ska användas

  • STEN STWI101WT-01
  • FTP termiskt skrivarhuvud
  • Raspberry Pi pico
    • Myntstyrd maskin
    Funktion Kontrollfunktionen visas på serieskärmen, huvudgränssnittet väljer våningen, efter att ha gått in i huvudgränssnittet väljer den parkeringsplats, samtidigt visar den parkeringsplatsnumret i textrutan uppe till höger, väljer sedan vistelsetid, det är två rullande textväljare, då kommer även samma att visa beställningsinformationen i textrutan uppe till höger, enligt det fasta enhetspriset som multipliceras med vistelsetiden för att få det totala priset. Då först när parkeringsplats och vistelsetid är vald kan du gå till betalningsknappen, annars är den ogiltig. Efter att ha gått in på betalningsskärmen kommer en myntmottagare att användas. Sedan kommer skärmen att visa antalet mynt som ska läggas in och antalet mynt som redan lagts in. Efter att mynten har lagts in kommer ett meddelande om betalningsframgång att visas. Då kan du välja att skriva ut en liten biljett för att skriva ut platsnummer och tid på termopappret.DesignprocessenFörst ville jag använda Raspberry Pi pico att göra en liten skrivare. Sedan i processen att välja komponenter tror jag att den termiska skrivaren är mer bekväm att uppnå, efter att ha bestämt programmet började jag köpa hårdvara. I själva verket upptäckte jag i processen med onlineupphandling att det finns många termiska skrivare med bra drivkretsar, de flesta av dem är gjorda med hjälp av stm:s chip, och de är designade med sin egen uppsättning instruktioner. Till exempel genom att använda hans instruktioner för att låta skrivaren skriva ut tecken eller gå papper, men denna skrivare praktiska är mycket hög, men det finns inget värde av att lära sig. Det är att skicka instruktioner genom serieporten på linjen, du kan manipulera skrivaren. Så jag tänkte köpa ett skrivhuvud och utveckla det själv. Sen om skrivhuvudet valde jag ett termiskt ftp-skrivhuvud.Det termiska ftp-skrivhuvudet
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Detta skrivhuvud bör vara tillgängligt internationellt, grundprinciperna är liknande. Den vänstra sidan är en stegmotor. Sedan är mitthuvudet 6 värmeenheter. Varje värmeenhet har 64 värmepunkter på sig. Alltså totalt 384 värmepunkter. Sedan nedan är en spärr. Under spärren finns ett skiftregister. Slutligen finns det en klocksignal som ska tillhandahållas. Så hela operationsprincipen är att tillhandahålla en klocksignal till skrivhuvudet och sedan skicka en data varje klockperiod, efter att ha skickat 384 klocksignaler och 384 data kommer data i skiftregistret att lagras i låset. Därefter ställs spärren på låg nivå. Sedan kommer de 384 värmepunkterna att välja att värma eller inte värma beroende på om varje data är 0 eller 1. Låt samtidigt stegmotorn rotera för att driva termopapperet för att designa önskad karaktär. Efter att jag fick termotrycket head, jag gick vidare och bad om ett datablad och det var en 30pin fpc-kabel. Så det är uppenbarligen inte särskilt bekvämt att ansluta till pico direkt med den. Så jag tänkte att det är bättre att designa en bakplanskrets. Jag har en STONE seriell skärm är 12v strömförsörjning, och sedan tittar jag på det termiska skrivhuvudets skrivspänning med ett referensvärde är 7.6v, det maximala värdet är 8v, förse det med en spänning på ca 7.6v. Den har också en logisk spänning på 3.3V, och sedan stöder Raspberry Pi pico maximalt 5v strömförsörjning och den har en 3.3v utgångsspänning, då kan strömförsörjningsdesignen använda två likström, med 12v strömförsörjning, en strömkälla på 7.6v. för att driva det termiska skrivhuvudet, den andra DCDC-utgången 5v till pico, och använd sedan 3.3V från pico för att driva det termiska skrivhuvudets logikspänning. Sedan leder 12v direkt till serieskärmen.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Förresten, stegmotorn för det termiska skrivhuvudet måste också drivas. Jag har en integrerad Darlington-rörintegrator. Men det är för stort och det är en rak plug-in, så köp bara ett drivrutinchip. Sedan är denna aspekt av drivmotorn också OK. Utskrift kräver design av ett teckensnitt, i princip alla använder spi flash för teckensnittslagring, vilket är ett enormt projekt. Endast ascii-koden är mer än 100, så du måste köpa en annan SPF-blixt. Då är hela planeringen nästan så här.
    STONE Designer (GUI Designer programvara)Från:https://www.stoneitech.com/support/download/software
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Designa kretsenSedan började följande designa kretsen. Hitta först strömförsörjningen, faktiskt, i början använde jag en spänningsregulator med tre terminaler, eftersom kretsen är enkel, efter att ha gjorts var uppvärmningssituationen allvarligare under felsökning, mycket varm att röra vid, så jag byter till användning dcdc. Följ bara chipdatabladet direkt för att göra kretsschemat. Jag valde mt2492 här, men jag ignorerade en viktig parameter är skrivhuvudets driftsström, den maximala utströmmen för detta chip är 2A, men skrivhuvudets arbetsström på 2.3A, en skillnad på 0.3A, den kan också användas, men effektiviteten är inte så hög, vi ska prata om den specifika effekten senare.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Sedan är motordrivrutinchippet som jag köpte lv8548, se skrivhuvudets datablad, som har ett timingdiagram för stegmotordrift, enligt dess timing, för att förse det med en fyrvägs pwm-signal på den.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Sedan är flash-chipet, med by25q32bs, kapaciteten på 32Mbit är ganska stor, och ansluten till pico, väntar på att bli anropad av pico.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Efter det är det övergripande kretsschemat så här, det övre vänstra hörnet är kommunikationsuttaget och strömförsörjningsuttaget, nedanför finns en summer (som faktiskt inte används i kretsen), det finns en lysdiod till höger och det nedre högra hörnet är en 30pin fpc för anslutning av skrivhuvudet.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Efter gjort och kan användas är som visas nedan, lämnar ett stifthuvud uttag på kortet för Raspberry Pi pico, du kan ansluta direkt till det.
    Raspberry Pi pico
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Slå på strömmen, först inte ansluten till pico och skrivhuvud, mät utgångsspänningen på dcdc, i normalfallet är en ca 7.5v, den andra är ca 5v.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Anslut sedan skrivhuvudet, seriell skärm och pico, mät logikspänningen är ca 3.3v, utan problem kan du skriva programmet.
    ProgramJag tänker först justera stegmotorn, denna del är lätt att justera, titta på tidsdiagrammet i databladet, 8 klockperioder, varje klockperiod ska separat ge motorns fyra stift en logisk signal, efter 8 perioder kommer motorn att vrid upp, och justera sedan hastigheten, men i mitten måste vi lägga till en fördröjning för att justera arbetsförhållandet annars svänger den för fort, fördröjningstiden jag ställer in är ca 5ms och sedan efter att ha låtit den svänga måste du ge nivån till låg, annars verkar motorn inte snurra i själva verket är den interna spolen fortfarande på ström, efter en lång tid kan du känna lukten av brännande lukt. Skriv sedan funktionen, lägg kroppen i en slinga, antalet cykler representerar längd på motorrotation, funktionen ser lite lång ut, placera den någon annanstans ensam och vänta på samtalet.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Detta är funktionen efter några ändringar, hastighet och varaktighet kommer att överföras i huvudprogrammet. Det behöver fortfarande en hel del optimering. Sedan är poängen med att justera skrivhuvudet, den här delen är svår för mig, den behöver en klocksignal, databladet är skrivet i maximalt 8M, jag trodde att det behövde en signal på cirka 8M frekvens, det är svårt, först mätte jag frekvensen med io flip-nivå, skillnaden är för stor. Och sedan vill jag använda pio, och jag undersökte en hel dag men resultatet är inte bra, mina personliga färdigheter är begränsade, förmodligen måste jag studera rp2040-chipmanualen på djupet. Vänd sedan nivån 384 perioder för att prova, det är en arbetsflöde som detta, initiera dataingången 1 stift, lås 1 stift, klocksignal 1 stift, 6 stift för utskriftsenhet och sedan utöver låset alla andra dra lågt och skicka sedan en data inom en klockperiod, efter cykling 384 gånger för att ställa in spärren på 0, för att ställa in 6 utskriftsenheten på 1, och sedan vilken punkt som har data vilken punkt kommer att värmas upp. Efter implementeringen av uppsättningen, dra tillbaka nivån. Sedan efter att programmet skrevs och började testas, fungerade det verkligen inte, faktiskt för att för många utskriftsenheter kontrollerades men strömmen räckte inte, ändra sedan den för att ge mindre två utskriftsenheter hög nivå och testa igen.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Det fungerar verkligen! Den tryckte en horisontell linje. Det betyder att det inte finns någon nedre gräns för klockfrekvensen, då kan du köra stegmotorn för att skriva ut en vertikal linje. pico dubbeltråd, låt sedan den andra tråden köra motorn synkront, skriv sedan programmet och kör. Den vertikala linjen kommer ut.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Med de horisontella och vertikala linjerna, få sedan en diagonal linje, var uppmärksam på att en utskriftsenhet har 64 punkter, som definierar en längd, till exempel 32, och cykla sedan 32 gånger 384 perioder, varje period ställer bara in de första 64 data till 1 och ställ in nästa 320 data till 0, och sedan 32 gånger varje gång endast i den första enheten för att skriva ut en punkt och sedan cykla inkrementellt, kombinerat med stegmotorns hastighet för att justera, och slutligen justerade ut 64 * 32 storlek på diagonal linje kan du också först stava ut en bokstav Z.  
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Då finns konturerna av programmet där, om du vill skriva ut ordet behöver du göra typsnittet först. Gör först en stor bokstav A, 32 * 32 storlek, med en lista med definitioner, jag planerar att göra här med pin.value (), så gör typsnittet, använd sedan 32 rader och 32 kolumner med binära värden som ska anropas, ta ut för att göra ett skift och skicka sedan till pin.value (), så detta är implementeringsprocessen.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Med 0 som bakgrund och 1 som förgrund ser då själva implementeringsprocessen ut så här.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Den mest externa stora cykeln 32 representerar cykeln på 32 rader, det vill säga skriv ut 32 rader, och sedan är de första 32 cyklerna inuti att värma hälften av den första värmeenheten, sedan kommer de återstående 352 perioderna att sättas till 0, och sedan minus 1 från 31 varje gång till 0, du kan räkna den första raden av punkterna som behöver värmas från vänster till höger, och sedan var 384:e period som ska slutföras när spärren ställer in 0 och värmeenheten ställer in 1 och sedan du kan skriva ut, och sedan ett A word ut efter loop 32 gånger igen.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Fortfarande fetstil, den här typen av punktmatrisord, det finns verktyg på nätet som kan göras direkt, framsidan plus 0b och lägg sedan till ett kommatecken på baksidan, och sedan spelar du enligt dina egna idéer, typsnittet är faktiskt initialt tänkt att vara lagras i flash-chip, men jag justerar en lång tid det fortfarande inte kan öppnas.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Jag vet inte var problemet ligger, efter att jag har tid kommer jag att justera igen, det som är bra är att pico själv har 16mbit storlek flash, lagra ett ascii-bibliotek räcker fortfarande, då är jag så lagrad.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  • Definiera den med en ordbok, lägg den i ett separat stycke och kalla tillbaka den i huvudprogrammet. 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.
  • Termiskt skrivhuvud för ett parkeringshanteringssystem baserat på Raspberry Pi pico och STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertikal sökning. 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()
  • Källa: Plato Data Intelliigence