IOT

Termikus nyomtatófej a Raspberry Pi pico és STONE TFT LCD alapú parkoláskezelő rendszerhez

Rövid bevezetés

A hőnyomtatók nagyon elterjedtek mindennapi életünkben, és vannak példák a hőnyomtatókra éttermekben, parkolókban és bevásárlásokban. Ez a cikk a hőnyomtatók parkolási rendszerekben történő alkalmazására összpontosít.

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

Felhasználandó anyagok

  • STONE STWI101WT-01
  • FTP termikus nyomtatófej
  • Raspberry Pi pico
    • Érmével működő gép
    FunkcióA soros képernyőn megjelenik a vezérlő funkció, a fő felület kiválasztja az emeletet, belépés után a fő felület kiválasztja a parkolóhelyet, ezzel egyidejűleg a jobb felső szövegmezőben megjeleníti a parkolóhely számát, majd kiválasztja a tartózkodási idő, ez két görgető szövegválasztó, akkor szintén a jobb felső sarokban lévő szövegmezőben jeleníti meg a rendelési információkat a fix egységárnak megfelelően, amely megszorozva a tartózkodási idővel kapja meg a teljes árat. Ezután csak a parkolóhely és a tartózkodási idő kiválasztása után lehet a fizetés gombra kattintani, ellenkező esetben érvénytelen. A fizetési képernyőre való belépés után egy érmeelfogadó kerül alkalmazásra. Ezután a képernyőn megjelenik a behelyezendő érmék és a már behelyezett érmék száma. Az érmék behelyezése után a fizetés sikeressége üzenet jelenik meg. Ezután választhat egy kis jegyet, amellyel a hőpapírra nyomtathatja a hely számát és az időt.A tervezési folyamatEleinte használni akartam a Raspberry Pi pico kis nyomtatót készíteni. Aztán az alkatrészek kiválasztásának folyamatában úgy gondolom, hogy a hőnyomtatót kényelmesebb elérni, a program meghatározása után elkezdtem hardvert vásárolni. Valójában az online beszerzés során azt tapasztaltam, hogy sok hőnyomtató létezik jó meghajtó áramkörrel, ezek többsége stm chip felhasználásával készül, és saját utasításkészlettel készülnek. Például azzal, hogy az ő utasításai alapján hagyja, hogy a nyomtató karaktereket nyomtasson, vagy papírra menjen, de ez a nyomtató praktikum nagyon magas, de nincs értéke a tanulásnak. Ez az utasítások küldése a soros porton keresztül, manipulálhatja a nyomtatót. Ezért arra gondoltam, veszek egy nyomtatófejet, és magam fejlesztem. Aztán a nyomtatófejről egy ftp termikus nyomtatófejet választottam.Az ftp hőnyomtató fej
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Ennek a nyomtatófejnek nemzetközileg is elérhetőnek kell lennie, az alapelvek hasonlóak. A bal oldalon egy léptetőmotor található. Ekkor a középső fej 6 fűtőegység. Mindegyik fűtőegységen 64 fűtőpont található. Összesen tehát 384 hőpont. Aztán lent van egy retesz. A retesz alatt egy eltolási regiszter található. Végül egy órajelet kell biztosítani. Tehát a teljes működési elv az, hogy órajelet adunk a nyomtatófejnek, majd minden óraperiódusban küldünk egy adatot, 384 órajel és 384 adat elküldése után a váltóregiszterben lévő adatok a reteszben kerülnek tárolásra. Ezután a reteszt alacsony szintre állítják. Ezután a 384 fűtőpont választja, hogy fűt-e vagy sem, attól függően, hogy az egyes adatok 0 vagy 1. Ezzel egyidejűleg hagyja a léptetőmotort forogni, hogy a hőpapírt meghajtsa a kívánt karakter kialakításához. Miután megkaptam a hőnyomatot. fej, ​​előre mentem és kértem egy adatlapot, és egy 30 tűs fpc kábel volt. Így nyilván nem túl kényelmes vele közvetlenül a pico-hoz csatlakozni. Ezért úgy gondoltam, jobb, ha tervezek egy hátlapi áramkört.Van egy STONE soros képernyő 12V-os táp, és akkor nézem a hőnyomtatófej nyomtatófej-nyomtatási feszültségét egy referencia értéknél 7.6v, a maximum értéke 8V, akkor kb 7.6V-os feszültséget biztosítunk. Logikai feszültsége is 3.3V, majd a Raspberry Pi pico maximálisan támogatja az 5V-os tápegységet és 3.3V-os kimeneti feszültsége van, akkor a tápegység kialakítása két dcdc-t használhat, 12V-os tápegységgel, egy dcdc kimenettel 7.6V a termikus nyomtatófej táplálásához a másik dcdc kimenet 5 V-ot a pico-hoz, majd használja a pico 3.3 V-át a termikus nyomtatófej logikai feszültségének táplálására. Ezután a 12 V közvetlenül a soros képernyőhöz vezet.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Egyébként a hőnyomtatófej léptetőmotorját is meg kell hajtani. Van egy beépített Darlington csőintegrátorom. De túl nagy, és egyenes beépülő modul, úgyhogy csak vegyél egy illesztőprogram chipet. Akkor a hajtómotornak ez a szempontja is rendben van. A nyomtatáshoz font tervezésre van szükség, alapvetően mindenki spi flash-t használ betűkészlet tárolására, ami egy hatalmas projekt. Csak az ascii kód több mint 100, ezért kell venni egy másik SPF vakut. Akkor az egész tervezés nagyjából ilyen.
    STONE Designer (GUI Designer szoftver)Tól től:https://www.stoneitech.com/support/download/software
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Tervezze meg az áramkörtAztán a következők kezdték el tervezni az áramkört. Először keresse meg a tápegységet, sőt, az elején háromkapu feszültségszabályozót használtam, mert egyszerű az áramkör, elkészítése után a fűtési helyzet komolyabb volt hibakereséskor, nagyon meleg tapintású, ezért váltok használatra dcdc. Csak kövesse közvetlenül a chip adatlapját az áramköri diagram elkészítéséhez. Itt az mt2492-t választottam, de figyelmen kívül hagytam egy fontos paramétert a nyomtatófej üzemi árama, ennek a chipnek a maximális kimeneti árama 2A, de a nyomtatófej üzemi árama 2.3A, különbség 0.3A, ez is használható, de a hatásfok nem olyan magas, a konkrét hatásról később lesz szó.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Aztán a motorvezérlő chip, amit vettem, az lv8548, lásd a nyomtatófej adatlapját, amiben van egy léptetőmotoros hajtás időzítési diagramja, az időzítésének megfelelően, hogy négyirányú pwm jelet biztosítson rajta.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Aztán jön a flash chip, by25q32bs-sel, 32Mbit-es kapacitása elég nagy, és a pico-hoz csatlakozik, várja, hogy a pico hívja.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Ezek után a teljes kapcsolási rajz így néz ki, a bal felső sarokban a kommunikációs aljzat és a tápcsatlakozó, alatta a berregő (valójában nem használt az áramkörben), a jobb oldalon egy fénykibocsátó dióda, ill. a jobb alsó sarokban egy 30 tűs fpc található a nyomtatófej csatlakoztatásához.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Miután elkészült, és az alábbiak szerint használható, a táblán hagyva a Raspberry Pi pico számára egy tűfejes aljzatot, közvetlenül csatlakoztathatja.
    A Raspberry Pi pico
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Kapcsolja be a tápot, először ne csatlakoztassa a pico és nyomtatófejet, mérje meg a dcdc kimeneti feszültségét, normál esetben az egyik kb 7.5 V, a másik kb 5 V.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Utána csatlakoztasd a nyomtatófejet, soros képernyőt és picot, mérd meg a logikai feszültséget kb 3.3v, gond nélkül írhatod a programot.
    ProgramElőször a léptetőmotort szándékozom beállítani, ez a rész könnyen állítható, nézd meg az adatlapon lévő időzítési diagramot, 8 óra periódus, minden órajel periódus külön adjon logikai jelet a motor négy érintkezőjének, 8 periódus után a motor tekerje fel, majd állítsa be a sebességet, de a közepén késleltetést kell hozzáadni a terhelhetőség beállításához, különben túl gyorsan forog, az általam beállított késleltetési idő kb 5 ms, majd miután hagyta fordulni, meg kell adnia a szintet alacsony, különben a motor nem forog, sőt a belső tekercs még mindig áram alatt van, hosszú idő után érezni az égett szagot. Majd írd be a függvényt, tedd hurokba a testet, a ciklusok száma reprezentálja a A motor forgási hossza, a funkció kissé hosszúnak tűnik, tedd máshová egyedül, és várd a hívást.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Ez a funkció néhány változtatás után, a sebesség és az időtartam a főprogramban kerül átvitelre. Sok optimalizálást igényel még.Akkor a nyomtatófej beállításának a lényege, ez a rész nekem nehéz, órajel kell hozzá, az adatlap maximum 8M-ban van írva, azt hittem kb 8M jel kell hozzá frekvencia, nehéz, először io flip level-el mértem a frekvenciát, túl nagy a különbség. Aztán szeretném használni a pio-t, és egy egész napot kutattam, de az eredmény nem jó, a személyes képességeim korlátozottak, valószínűleg alaposan át kell tanulmányoznom az rp2040 chip kézikönyvét. Ezután fordítsa meg a 384-es szintet, hogy megpróbálja, ez egy ehhez hasonló munkafolyamat, inicializálja az adatbevitelt 1 tű, retesz 1 tű, órajel 1 érintkező, 6 nyomtatóegység érintkező, majd a retesz mellett az összes többi húzza alacsonyra , majd küldjön egy adatot egy órajel perióduson belül, ciklus után 384 alkalommal, hogy a reteszt 0-ra állítsa, a 6 nyomtatóegységet 1-re állítsa, majd melyik ponton vannak adatok, hogy melyik pont melegszik. A készlet megvalósítása után húzd vissza a szintet. Aztán a program megírása és a tesztelés megkezdése után tényleg nem működött, igazából mert túl sok nyomtatási egység volt vezérelve, de az áram nem volt elég, majd változtasd meg, hogy kevesebbet adjon két magas szintű nyomtatóegységet, és tesztelje újra.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Tényleg működik! Vízszintes vonalat nyomtatott. Ez azt jelenti, hogy az órajel frekvenciájának nincs alsó határa, akkor a léptetőmotort futtatva függőleges vonalat nyomtathat. pico kétszálas, majd hagyja, hogy a másik szál szinkronban futtassa a motort, majd írja meg a programot és futtassa. Kijön a függőleges vonal.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • A vízszintes és függőleges vonalakkal, majd kapjon egy átlós vonalat, figyeljen arra, hogy egy nyomtatási egységnek 64 pontja van, amely meghatározza a hosszt, például 32, majd ciklus 32-szer 384 periódusban, minden periódusban csak az első 64 adatot állítsa 1-re. és állítsa be a következő 320 adatot 0-ra, majd minden alkalommal 32-szer csak az első egységben egy pont kinyomtatásához, majd növekményes ciklushoz, kombinálva a léptetőmotor sebességével a beállításhoz, és végül ki kell igazítani a 64 * 32-es átlós vonalat, először ki is írhat egy Z betűt.  
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Ekkor ott van a program körvonala, ha ki akarjuk nyomtatni a szót, először meg kell csinálni a betűtípust. Először készítsen egy nagybetűt A, 32 * 32 méretben, a definíciók listájával, amit itt tervezek a pin.value () segítségével, tehát készítse el a betűtípust, majd használjon 32 sort és 32 oszlopot a hívandó bináris értékekből, vegye ki, hogy eltolást hajtson végre, majd adja át a pin.value (), tehát ez a megvalósítás folyamata.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Ha a 0 a háttér és az 1 az előtér, akkor a tényleges megvalósítási folyamat így néz ki.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • A legkülső 32-es nagy ciklus a 32 sorból álló ciklust reprezentálja, vagyis 32 sort nyomtat, majd az első 32 ciklus belül az első fűtőegység felét melegíti, majd a maradék 352 periódus 0-ra lesz állítva, és majd mínusz 1 31-től minden alkalommal 0-ig, megszámolhatja a fűtendő pontok első sorát balról jobbra, majd 384 periódusonként, amelyet be kell fejezni, ha a reteszt 0-ra és a fűtőegység készletet 1-re állítja, majd kinyomtathatja, majd egy A szót ismét 32 ismétlés után.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Még mindig félkövér, ez a fajta pontmátrix szó, vannak online eszközök közvetlenül is megtehető, az elülső plusz 0b, majd vesszővel a hátoldalon, majd játszunk a saját elképzeléseink szerint, a betűtípust eredetileg úgy tervezték, hogy tárolt a flash chip, de igazítani sokáig még mindig nem lehet kinyitni.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Nem tudom hol a probléma, ha lesz időm újra beállítom, az a jó, hogy magában a picoban van 16mbit méretű flash, tárolni egy ascii könyvtárat még elég, akkor annyira raktáros vagyok.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Határozza meg szótárral, tegye külön darabba, és hívja vissza a főprogramban. Then after debugging, the available version looks like this.from machine import Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motor#import sysdelaytime = 0.0000001 # Printer clock delaymotor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character libraryshuru = input(“Please enter text:”)line_word = []for item in range(len(shuru)):    line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 12:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# print(motor_speed)motor_speed = len(shuru)line = (len(shuru) // 12) + 1if (len(shuru) % 12) == 0:    line -= 1lins = 0supper = 0slower = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))_thread.start_new_thread(motor.run_stop, (motor_speed, 1))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word))line_word.clear()I am separate control printing unit, because the current is not enough so like this, but in order to print clear, making my printing speed becomes particularly slow, the more words the slower, and then the lowercase letters is 24 * 32 dot matrix, that it is less print points to use, but can not give it to leave 32 heating points of space then the character spacing is large, so the capital letters and lowercase letters are separated, the numbers are still 32 * 32.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Finally, the whole program is attached.from machine import UART,Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motorfrom os import uname#import sysuart1 = UART(0, baudrate = 115200, tx =Pin(0), rx = Pin(1))floor1 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’1′]floor2 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’2′]floor3 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’3′]button_cmd = [16,1]selector_cmd = [16,129]print(uname()[0])delaytime = 0.0000001 # Printer clock delaycoin = Pin(22, Pin.IN,Pin.PULL_UP)coin_num = 0motor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character library# shuru = ‘aa’# line_word = []# for item in range(len(shuru)):#     line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 6:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# # print(motor_speed)# # line = (len(shuru) // 12) + 1# if (len(shuru) % 12) == 0:#     line -= 1lins = 0supper = 0slower = 0danjia = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))# _thread.start_new_thread(motor.run_stop, (motor_speed, line))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def pay(pay):    global coin_num    line_word = {‘line_word1’:[‘s’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0′],’line_word2’:[‘0′,’d’,’a’,’y’,’2′,’h’,’o’,’u’,’r’],’line_word3′:[‘t’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′]}    line_wors = {‘line_word1’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word2′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],                 ‘line_word3’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]}#     line_word1 = [‘S’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0’]#     line_word2 = [‘1′,’D’,’a’,’y’,’1′,’H’,’o’,’u’,’r’]#     line_word3 = [‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′]#     line_word4 = [‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]#     line_word1[8]=str(pay[0])#     line_word2[0]=str(pay[1])#     line_word2[4]=str(pay[2])#     line_word4[6]=str(pay[3])    (line_word[‘line_word1’])[8]=str(pay[0])#     (line_word[‘line_word2’])[0]=str(pay[1])#     (line_word[‘line_word2’])[4]=str(pay[2])#     (line_word[‘line_word4’])[6]=str(pay[3])    sleep(1)    uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value4″,”value”:’+str(pay[3])+’}>ET’)#     sleep(2)#     print(line_word.get(‘line_word’+str(1))[0])#     print(‘zfdszfz’,line_word)#     sleep(2)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message5″,”text”:”F1 – ‘+pay[0]+'”}>ET’)#     uart1.sendbreak()#     sleep(1)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message6″,”text”:”‘+str(pay[1])+'”}>ET’)#     uart1.sendbreak()#     sleep(1)# #     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(pay[2])+'”}>ET’)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message8″,”text”:”‘+str(pay[3])+'”}>ET’)    while True:        if coin.value()==0:            coin_num += 1            print(“Number of coins deposited:”,coin_num)            sleep(0.1)            uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value2″,”value”:’+str(coin_num)+’}>ET’)            if coin_num == pay[3]:                uart1.write(‘ST<{“cmd_code”:”set_visible”,”type”:”widget”,”widget”:”image37″,”visible”:true}>ET’)                     if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘print’ and coin_num == pay[3] and rx1[13] == 2:                    data_name2=”                    _thread.start_new_thread(motor.run_stop, (9, 4))                    for iii in range(1,3):                        for linss in range(32):                            supper=slower=0                            for lins in range(9):#                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])#                                 print(temp_list,type(temp_list))                                if (line_word.get(‘line_word’+str(iii))[lins]).islower():                                    word_size24 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    slower += 1                                else:                                    last_word_size32 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    supper +=                         sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1#                     sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1def floor1def():    day_jia = 0    hour_jia = 0    day_flag = False    hour_flag = False    price_flag = False    posltion = False    zongjia = 0    pay1 = [0,0,0,0]    print(“floor1 now”)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)    uart1.sendbreak()    while True:        if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘position’:                    posltion = True                    pay1[0]=rx2[15]                    write1(rx2[15])                elif data_name2 == ‘pay’ and posltion and price_flag:                    uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)                    pay(pay1)#                 if data_name2 == ‘pay’ and posltion = True and (day_flag or hour_flag):#                     posltion = True#                     uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)            if rx1[3:5:1] == selector_cmd:                data_name_len = rx1[6] – 4                data_name = rx2[7:data_name_len+7:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘time_day1’:                    pay1[1]=rx2[19]                    write2(ord(rx2[19]))                    day_jia = ord(rx2[19])                    day_flag = True                elif data_name2 == ‘time_hour1’:                    pay1[2]=rx2[20]                    write3(ord(rx2[20]))                    hour_jia = ord(rx2[20])                    hour_flag = True            if hour_flag or day_flag:                price_flag = True                zongjia = (day_jia*48) + (hour_jia*2)                pay1[3]=zongjia                print(str(zongjia))                uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message4″,”text”:”‘+str(zongjia)+'”}>ET’)                hour_flag = day_flag = Falsedef floor2def():    passdef floor3def():    passdef write1(num):    #print(ss)    for item in range(49,55):        uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+chr(item)+'”,”image”:”nocar_bg”}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+num+'”,”image”:”selectedcar_bg2″}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message1″,”text”:”F1 – ‘+num+'”}>ET’)def write2(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message2″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def write3(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        STB4.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        STB4.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)   def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)while True:    if uart1.any()>1:        rx2 = []        data_name2 = ”        bin_data = uart1.read(40)        uart1.sendbreak()        rx1 = list(bin_data)        for item in rx1:            rx2.append(chr(item))        print(rx2)        if rx2[7:13:1] == floor1:            floor1def()        elif rx2[7:13:1] == floor2:            floor2def()        elif rx2[7:13:1] == floor3:            floor3def()for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word)line_word.clear()
  • Forrás: Plato Data Intelligence