IOT

Raspberry Pi picol ja STONE TFT LCD-l põhineva parkimishaldussüsteemi termoprindipea

Lühitutvustus

Termoprinterid on meie igapäevaelus väga levinud ning näiteid termoprinteritest on restoranides, parklates ja poodides. See artikkel keskendub termoprinterite kasutamisele parkimissüsteemides.

Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.

Kasutatavad materjalid

  • KIVI STWI101WT-01
  • FTP termoprinteri pea
  • Raspberry Pi pico
    • Müntidega töötav masin
    funktsioonJuhtfunktsioon kuvatakse jadaekraanil, põhiliides valib korruse, pärast põhiliidesesse sisenemist valib parkimiskoha, samal ajal kuvab paremas ülanurgas olevas tekstikastis parkimiskoha numbri, seejärel valib viibimisaeg, see on kaks keritavat tekstivalijat, siis kuvab see ka paremas ülanurgas olevas tekstikastis tellimuse teabe vastavalt fikseeritud ühikuhinnale, mis koguhinna saamiseks korrutatakse viibimisajaga. Siis saab alles siis, kui parkimiskoht ja viibimisaeg valitud, minna maksenupule, muidu on see kehtetu. Pärast makseekraanile sisenemist kasutatakse mündiaktseptorit. Seejärel kuvatakse ekraanil sisestatavate müntide arv ja juba sisestatud müntide arv. Pärast müntide sisestamist kuvatakse makse õnnestumise teade. Seejärel saad valida väikese pileti printimiseks termopaberile kohanumbri ja kellaaja trükkimiseks.DisainiprotsessAlguses tahtsin kasutada Raspberry Pi pico väikese printeri tegemiseks. Seejärel arvan, et komponentide valimise käigus on termoprinterit mugavam saavutada, pärast programmi kindlaksmääramist hakkasin riistvara ostma. Tegelikult avastasin veebipõhise hanke käigus, et heade draiveriahelatega termoprintereid on palju, enamik neist on valmistatud stm-i kiibi abil ja need on disainitud oma juhiste komplektiga. Näiteks kasutades tema juhiseid, et lasta printeril printida tähemärke või minna paberile, kuid sellel printeril on praktilisus väga kõrge, kuid õppimise väärtust pole. See on juhiste saatmine liini jadapordi kaudu, saate printeriga manipuleerida. Seega mõtlesin, et ostan prindipea ja arendan selle ise välja. Seejärel valisin prindipea kohta ftp termoprindipea.ftp termoprindipea
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • See prindipea peaks olema rahvusvaheliselt saadaval, põhiprintsiibid on sarnased. Vasak pool on samm-mootor. Siis on keskmine pea 6 küttesõlme. Igal soojussõlmel on 64 soojuspunkti. Seega kokku 384 soojuspunkti. Siis all on riiv. Riivi all on nihkeregister. Lõpuks tuleb anda kellasignaal. Nii et kogu tööpõhimõte on anda prindipeale kella signaal ja seejärel saata andmed igal kellaperioodil, pärast 384 kellasignaali ja 384 andmete saatmist salvestatakse nihkeregistris olevad andmed riivis. Seejärel seatakse riiv madalale tasemele. Seejärel valivad 384 küttepunkti, kas kütta või mitte, olenevalt sellest, kas kõik andmed on 0 või 1. Samal ajal lase samm-mootoril termopaberit soovitud iseloomu kujundamiseks pöörlema ​​panna. Pärast termoprindi saamist pea, läksin edasi ja küsisin andmelehte ja see oli 30pin fpc kaabel. Seega pole ilmselgelt eriti mugav sellega picoga otse ühendust saada. Nii et ma mõtlesin, et projekteerin parem tagaplaadi vooluringi. Mul on a STONE seeriaekraan on 12v toiteallikas ja siis ma vaatan, et termoprindipea printimispinge etalonväärtus on 7.6v, maksimaalne väärtus on 8v, siis andke sellele umbes 7.6v pinge. Sellel on ka loogikapinge 3.3 V ja siis Raspberry Pi pico maksimaalselt toetab 5 V toiteallikat ja sellel on 3.3 V väljundpinge, siis saab toiteallika konstruktsioonis kasutada kahte alalisvoolu, 12 V toiteallikaga, üks alalisvoolu väljund 7.6 V termilise prindipea toiteks, teine ​​alalisvoolu väljund 5 V picole ja seejärel kasutage pico 3.3 V voolu termilise prindipea loogikapinge toiteks. Siis juhatab 12v tee otse jadaekraanile.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Muide, selle termoprindipea samm-mootorit tuleb ka ajada. Mul on integreeritud Darlingtoni toru integraator. Kuid see on liiga suur ja see on otse pistikprogramm, nii et ostke lihtsalt draiveri kiip. Siis on ka see ajamimootori aspekt OK. Printimine eeldab fondi kujundamist, põhimõtteliselt kasutavad kõik fontide salvestamiseks spi flashi, mis on tohutu projekt. Ainult ascii kood on üle 100, seega peate ostma teise SPF-välgu. Siis on kogu planeerimine peaaegu selline.
    STONE Designer (GUI Designer tarkvara)Kirjeldus:https://www.stoneitech.com/support/download/software
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Disaini vooluringSeejärel asuti vooluringi projekteerima. Kõigepealt otsi toiteplokk, tegelikult alguses kasutasin kolme klemmi pingeregulaatorit, kuna ahel on lihtne, peale tegemist oli kütteolukord silumisel tõsisem, katsudes väga kuum, seega vahetan kasutusele dcdc. Skeemi tegemiseks järgige lihtsalt kiibi andmelehte. Valisin siin mt2492, kuid jätsin tähelepanuta olulise parameetri on prindipea töövool, selle kiibi maksimaalne väljundvool on 2A, aga prindipea töövool 2.3A, vahe 0.3A, seda saab ka kasutada, kuid efektiivsus pole nii kõrge, konkreetsest mõjust räägime hiljem.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Siis on mootori draiveri kiip, mille ostsin, lv8548, vaadake prindipea andmelehte, millel on vastavalt ajastusele samm-mootori ajami ajastusskeem, et anda sellele neljasuunaline pwm-signaal.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Siis on flash-kiip, by25q32bs, võimsus 32Mbit on üsna suur ja ühendatud picoga, ootab pico kutsumist.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Peale seda on üldine skeem selline, vasakus ülanurgas on sidepistik ja toitepesa, allpool on sumisti (pole tegelikult vooluahelas kasutatud), paremal on valgusdiood ja alumises paremas nurgas on 30 kontaktiga fpc prindipea ühendamiseks.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Pärast seda, kui see on valmis ja seda saab kasutada, on näidatud allpool, jättes Raspberry Pi pico jaoks tahvlile päise pistiku, mille saate selle otse ühendada.
    Raspberry Pi pico
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Lülitage toide sisse, esmalt pole pico ja prindipeaga ühendatud, mõõtke dcdc väljundpinge, tavalisel juhul on üks umbes 7.5 V, teine ​​on umbes 5 V.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Seejärel ühendage prindipea, jadaekraan ja pico, mõõtke loogikapinge umbes 3.3 V, pärast probleemideta saate programmi kirjutada.
    ProgrammKavatsen esmalt reguleerida samm-mootorit, seda osa on lihtne reguleerida, vaata andmelehe ajastusskeemi, 8 taktiperioodi, iga kellaperiood peaks eraldi andma mootori neljale kontaktile loogikasignaali, 8 perioodi järel hakkab mootor keerake üles ja seejärel reguleerige kiirust, kuid keskele peame lisama viivituse, et reguleerida tööastet, muidu keerab see liiga kiiresti, minu seatud viivitusaeg on umbes 5 ms ja siis pärast keeramist peate andma taseme madal, muidu mootor ei paista pöörlevat, tegelikult on sisemine mähis endiselt toitel, pika aja pärast on tunda põlemislõhna. Seejärel kirjuta funktsioon, pane kere ahelasse, tsüklite arv näitab mootori pöörlemispikkus, funktsioon tundub veidi pikk, pane see üksi mujale ja oota kõnet.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • See on funktsioon pärast mõningaid muudatusi, kiirus ja kestus edastatakse põhiprogrammis. See vajab veel palju optimeerimist.Siis on prindipea reguleerimise mõte, see osa on minu jaoks raske, vajab kella signaali, andmeleht on kirjutatud maksimaalselt 8M, arvasin, et vaja on umbes 8M signaali sagedus, see' raske, kõigepealt mõõtsin sagedust io flip leveliga, vahe on liiga suur. Ja siis ma tahan piot kasutada ja uurisin terve päeva, kuid tulemus ei ole hea, minu isiklikud oskused on piiratud, ilmselt pean rp2040 kiibi käsiraamatut põhjalikult uurima. Seejärel pöörake proovimiseks 384. taseme perioodi, see on selline töövoog, lähtestage andmesisendi 1 viik, riiv 1 viik, kellasignaal 1 viik, 6 prindiüksuse kontakti ja seejärel lisaks riivile kõik muud tõmmake madalaks ja seejärel saatke pärast tsüklit 384 ühe kellaperioodi jooksul ühed andmed korda, et seada riiv 0-le, seada 6 prindiüksus väärtusele 1 ja seejärel millisel punktil on andmed, millist punkti kuumutatakse. Pärast komplekti rakendamist tõmmake tase tagasi. Siis pärast programmi kirjutamist ja testimise alustamist see tõesti ei töötanud, kuna kontrolliti liiga palju prindiühikuid, kuid voolust ei piisanud, siis muutke seda, et anda vähem kaks prindiüksust kõrgel tasemel ja testige uuesti.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • See tõesti töötab! See prindis horisontaalse joone. See tähendab, et taktsagedusel pole alampiiri, siis saate vertikaalse joone printimiseks käivitada samm-mootori. pico kahe keermega, seejärel laske teisel lõimel mootorit sünkroonselt käivitada, seejärel kirjutage programm ja käivitage. Vertikaalne joon tuleb välja.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Horisontaalsete ja vertikaalsete joonte abil hankige diagonaaljoon, pöörake tähelepanu sellele, et ühel prindiüksusel on 64 punkti, mis määrab pikkuse, näiteks 32, ja seejärel tsükli 32 korda 384 perioodi, iga periood määrake ainult esimesed 64 andmeid väärtuseks 1 ja seadke järgmised 320 andmed väärtusele 0 ja seejärel 32 korda iga kord ainult esimeses ühikus, et printida punkt ja seejärel tsüklit järk-järgult kombineerida samm-mootori kiirusega, et reguleerida, ja lõpuks kohandatud 64 * 32 suurust diagonaaljoont, võite esmalt kirjutada ka Z-tähe.  
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Siis on programmi kontuur olemas, kui soovite sõna printida, peate kõigepealt fonti tegema. Esmalt tehke suurtäht A, suurus 32 * 32, koos määratluste loendiga, kavatsen siin teha pin.value () abil, nii et tehke font, seejärel kasutage kutsumiseks 32 rida ja 32 veergu kahendväärtustest, nihutamiseks eemaldage ja seejärel pin.value (), nii et see on rakendamise protsess.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Kui taustal on 0 ja esiplaanil 1, näeb tegelik rakendusprotsess välja selline.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Kõige välisem suur tsükkel 32 kujutab endast 32 rea tsüklit, see tähendab, et prinditakse 32 rida ja seejärel esimese 32 tsükli jooksul soojendatakse pool esimest küttesõlmest, seejärel seatakse ülejäänud 352 perioodi väärtuseks 0 ja siis miinus 1 31-st iga kord kuni 0-ni, saate lugeda esimese rea punktidest, mida tuleb soojendada vasakult paremale, ja seejärel iga 384 perioodi järel, mis tuleb lõpule viia, kui riiv on seatud 0 ja kütteseade 1 ning seejärel saate printida ja seejärel ühe sõna välja, pärast 32-kordset silmust uuesti.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Ikka julge, selline punktmaatriks sõna, on tööriistu võrgus saab teha otse, ees pluss 0b ja siis taha koma lisada ja siis mängid enda ideede järgi, font on tegelikult esialgu mõeldud salvestatud välkkiibile, kuid ma reguleerin pikka aega seda ikka ei saa avada.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Ma ei tea, kus probleem on, kui aega saan, sätin uuesti, hea on see, et picol endal on 16mbit suurust välklampi, poest piisab ka ascii raamatukogust, siis olen nii salvestatud.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. Ai.
  • Defineerige see sõnaraamatuga, pange see eraldi välja ja kutsuge see põhiprogrammis tagasi. 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.
  • Raspberry Pi pico ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence baasil põhineva parkimishaldussüsteemi termoprindipea. Vertikaalne otsing. 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()
  • Allikas: Plato Data Intelligence