IOT

Cap de imprimare termică pentru un sistem de management al parcării bazat pe Raspberry Pi pico și STONE TFT LCD

Scurtă introducere

Imprimantele termice sunt foarte frecvente în viața noastră de zi cu zi și există exemple de imprimante termice în restaurante, parcări și cumpărături. Acest articol se va concentra pe aplicarea imprimantelor termice în sistemele de parcare.

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

Materiale care urmează a fi utilizate

  • STONE STWI101WT-01
  • Cap de imprimantă termică FTP
  • Raspberry Pi pic
    • Masina actionata cu monede
    FuncţieFuncția de control este afișată pe ecranul serial, interfața principală selectează podeaua, după intrarea în interfața principală selectează locul de parcare, în același timp va afișa numărul locului de parcare în caseta de text din dreapta sus, apoi selectează timpul de ședere, este vorba de două selectoare de text care se derulează, apoi la fel se vor afișa informațiile despre comandă în caseta de text din dreapta sus, în funcție de prețul unitar fix care se înmulțește cu timpul de ședere pentru a obține prețul total. Apoi numai când sunt selectate locurile de parcare și timpul de ședere, puteți merge la butonul de plată, altfel este invalid. După intrarea în ecranul de plată, va fi folosit un acceptor de monede. Apoi ecranul va afișa numărul de monede care trebuie introduse și numărul de monede deja introduse. După ce monedele au fost introduse, va fi afișat un mesaj de succes al plății. Apoi puteți alege să tipăriți un mic bilet pentru a imprima numărul locului și ora pe hârtie termică.Procesul de proiectareLa început am vrut să folosesc Raspberry Pi pic pentru a face o imprimantă mică. Apoi, în procesul de selectare a componentelor, cred că imprimanta termică este mai convenabilă de realizat, după ce am determinat programul, am început să cumpăr hardware. De fapt, în procesul de achiziție online am constatat că există multe imprimante termice cu circuite de driver bune, majoritatea sunt realizate folosind cipul stm și sunt proiectate cu propriul set de instrucțiuni. De exemplu, folosind instrucțiunile sale pentru a lăsa imprimanta să imprime caractere sau să meargă pe hârtie, dar caracterul practic al imprimantei este foarte mare, dar nu există nicio valoare a învățării. Este să trimiți instrucțiuni prin portul serial de pe linie, poți manipula imprimanta. Așa că m-am gândit să cumpăr un cap de imprimare și să-l dezvolt eu. Apoi, despre capul de imprimare, am ales un cap de imprimare termică ftp.Capul de imprimare termică ftp
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Acest cap de imprimare ar trebui să fie disponibil la nivel internațional, principiile de bază sunt similare. Partea stângă este un motor pas cu pas. Apoi capul din mijloc este 6 unități de încălzire. Fiecare unitate de încălzire are 64 de puncte de încălzire. Deci un total de 384 de puncte de încălzire. Apoi, mai jos este un zăvor. Sub zăvor este un registru de deplasare. În cele din urmă, trebuie furnizat un semnal de ceas. Deci, întregul principiu de funcționare este de a furniza un semnal de ceas capului de imprimare și apoi de a trimite date în fiecare perioadă de ceas, după trimiterea a 384 de semnale de ceas și 384 de date, datele din registrul de deplasare vor fi stocate în zăvor. Apoi zăvorul este setat la nivel scăzut. Apoi, cele 384 de puncte de încălzire vor alege să se încălzească sau nu, în funcție de faptul că fiecare dată este 0 sau 1. În același timp, lăsați motorul pas cu pas să se rotească pentru a conduce hârtia termică pentru a crea caracterul dorit. După ce am primit imprimarea termică cap, am mers înainte și am cerut o fișă de date și era un cablu fpc de 30 de pini. Deci, evident, nu este foarte convenabil să te conectezi la pico direct cu acesta. Așa că m-am gândit că ar fi mai bine să proiectez un circuit backplane. Am un Ecran de serie STONE este o sursă de alimentare de 12 V, iar apoi mă uit la tensiunea de imprimare termică a capului de imprimare a unei valori de referință este de 7.6 V, valoarea maximă este de 8 V, apoi îi asigurăm o tensiune de aproximativ 7.6 V. De asemenea, are o tensiune logică de 3.3 V, iar apoi Raspberry Pi Pico suportă o sursă de alimentare de 5 V și are o tensiune de ieșire de 3.3 V, apoi designul sursei de alimentare poate folosi două dcdc, cu o sursă de alimentare de 12 V, o ieșire dcdc de 7.6 V. pentru a alimenta capul de imprimare termică, celălalt dcdc iese 5v la pico și apoi utilizați 3.3v de la pico pentru a alimenta tensiunea logică a capului de imprimare termică. Apoi 12v conduce direct la ecranul serial.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Apropo, motorul pas cu pas pentru acel cap de imprimare termică trebuie să fie și el antrenat. Am un integrator de tuburi Darlington integrat. Dar este prea mare și este un plug-in direct, așa că cumpărați un cip de driver. Atunci acest aspect al motorului de antrenare este, de asemenea, OK. Imprimarea necesită proiectarea unui font, practic toată lumea folosește spi flash pentru stocarea fonturilor, ceea ce este un proiect uriaș. Numai codul ascii este mai mare de 100, așa că trebuie să cumpărați un alt blitz SPF. Atunci toată planificarea este aproape așa.
    STONE Designer (software GUI Designer)De la: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.
  • Proiectați circuitulApoi, următorii au început să proiecteze circuitul. Mai intai gasesc sursa de alimentare, de fapt, la inceput am folosit un regulator de tensiune cu trei terminale, deoarece circuitul este simplu, dupa ce a fost realizat, situatia de incalzire a fost mai grava in timpul depanarii, foarte fierbinte la atingere, asa ca ma schimb pentru a folosi dcdc. Trebuie doar să urmați direct fișa cipului pentru a face schema circuitului. Am ales aici mt2492, dar am ignorat un parametru important este curentul de funcționare al capului de imprimare, curentul maxim de ieșire al acestui cip este de 2A, dar curentul de funcționare al capului de imprimare de 2.3A, o diferență de 0.3A, poate fi, de asemenea, utilizat, dar eficiența nu este atât de mare, despre efectul specific vom vorbi mai târziu.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Apoi, cipul de driver de motor pe care l-am cumpărat este lv8548, consultați fișa de date a capului de imprimare, care are o diagramă de temporizare a motorului pas cu pas, în funcție de sincronizare, pentru a-i furniza un semnal pwm în patru căi.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Apoi este cipul flash, cu by25q32bs, capacitatea de 32Mbit este destul de mare și conectat la pico, așteaptă să fie apelat de 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.
  • După aceea, schema generală a circuitului este astfel, colțul din stânga sus este priza de comunicație și priza de alimentare, dedesubt există un sonerie (nu este utilizată de fapt în circuit), există o diodă emițătoare de lumină în partea dreaptă și colțul din dreapta jos este un fpc cu 30 de pini pentru conectarea capului de imprimare.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • După ce s-a terminat și poate fi folosit, este așa cum se arată mai jos, lăsând pe placă un conector de pin pentru Raspberry Pi Pico, puteți conecta direct la el.
    Pico-ul Raspberry Pi
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Porniți alimentarea, mai întâi neconectat la pico și capul de imprimare, măsurați tensiunea de ieșire a dcdc, în cazul normal, unul este de aproximativ 7.5 V, celălalt este de aproximativ 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.
  • Apoi conectați capul de imprimare, ecranul serial și pico, măsurați tensiunea logică este de aproximativ 3.3 V, după nicio problemă, puteți scrie programul.
    ProgramIntenționez să ajustez mai întâi motorul pas cu pas, această parte este ușor de reglat, uitați-vă la diagrama de timp din fișa de date, 8 perioade de ceas, fiecare perioadă de ceas ar trebui să ofere separat celor patru pini ai motorului un semnal logic, după 8 perioade motorul va ridicați, apoi reglați viteza, dar la mijloc trebuie să adăugăm o întârziere pentru a regla raportul de funcționare altfel se întoarce prea repede, timpul de întârziere pe care l-am setat este de aproximativ 5ms și apoi după ce o lăsați să se întoarcă trebuie să dați nivelul la scăzut, altfel motorul nu pare să se întoarcă, de fapt, bobina internă este încă pe putere, după o lungă perioadă de timp puteți simți mirosul de ars. Apoi scrieți funcția, puneți corpul într-o buclă, numărul de cicluri reprezintă lungimea de rotație a motorului, funcția pare puțin lungă, puneți-o în altă parte singur și așteptați apelul.
  • 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.
  • Aceasta este funcția după câteva modificări, viteza și durata vor fi transmise în programul principal. Mai are nevoie de multă optimizare. Apoi este punctul de reglare a capului de imprimare, această parte este dificilă pentru mine, are nevoie de semnal de ceas, fișa de date este scrisă în maxim 8M, am crezut că are nevoie de un semnal de aproximativ 8M frecvența, e greu, mai întâi am măsurat frecvența cu io flip level, diferența este prea mare. Și apoi vreau să folosesc pio și m-am cercetat o zi întreagă, dar rezultatul nu este bun, abilitățile mele personale sunt limitate, probabil că trebuie să studiez în profunzime manualul cipului rp2040. Apoi răsturnați nivelul 384 de perioade pentru a încerca, este un flux de lucru astfel, inițializați intrarea de date 1 pin, zăvor 1 pin, semnal ceas 1 pin, 6 pini unității de imprimare și apoi, în plus față de blocare, toate celelalte trageți jos și apoi trimiteți o dată într-o perioadă de ceas, după ciclul 384 de ori pentru a seta zăvorul la 0, pentru a seta unitatea de imprimare 6 la 1 și apoi care punct are date despre care punct va fi încălzit. După implementarea setului, trageți nivelul înapoi. Apoi, după ce programul a fost scris și a început testarea, chiar nu a funcționat, de fapt pentru că au fost controlate prea multe unități de imprimare, dar curentul nu a fost suficient, apoi schimbați-l pentru a da mai puțin două unități de imprimare la nivel înalt și testați din nou.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Chiar funcționează! A tipărit o linie orizontală. Asta înseamnă că nu există o limită inferioară a frecvenței ceasului, apoi puteți rula motorul pas cu pas pentru a imprima o linie verticală. pico fir dublu, apoi lăsați celălalt fir să funcționeze sincron motorul, apoi scrieți programul și rulați. Linia verticală iese.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Cu liniile orizontale și verticale, apoi obțineți o linie diagonală, acordați atenție că o unitate de imprimare are 64 de puncte, care definește o lungime, cum ar fi 32, apoi cicluți de 32 de ori 384 de perioade, fiecare perioadă setând doar primele 64 de date la 1 și setați următoarele 320 de date la 0, și apoi de 32 de ori de fiecare dată numai în prima unitate pentru a imprima un punct și apoi ciclu incremental, combinat cu viteza motorului pas cu pas pentru a regla și, în sfârșit, a ajustat dimensiunea 64 * 32 a linie diagonală, puteți scrie mai întâi litera Z.  
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Atunci conturul programului este acolo, dacă doriți să imprimați cuvântul, trebuie să faceți mai întâi fontul. Mai întâi faceți o literă majusculă A, dimensiunea 32 * 32, cu o listă de definiții, intenționez să o fac aici cu pin.value (), așa că faceți fontul, apoi utilizați 32 de rânduri și 32 de coloane de valori binare pentru a fi apelate, scoateți pentru a face o schimbare și apoi treceți la pin.value (), deci acesta este procesul de implementare.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Cu 0 ca fundal și 1 ca prim plan, procesul real de implementare arată astfel.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Cel mai extern ciclu mare 32 reprezintă ciclul de 32 de linii, adică tipărirea a 32 de linii, iar apoi primele 32 de cicluri din interior sunt de a încălzi jumătate din prima unitate de încălzire, apoi restul de 352 de perioade vor fi setate la 0 și apoi minus 1 de la 31 de fiecare dată până la 0, puteți număra prima linie a punctelor care trebuie încălzite de la stânga la dreapta și apoi la fiecare 384 de perioade care urmează să fie finalizate odată ce zăvorul a stabilit 0 și unitatea de încălzire a setat 1 și apoi puteți imprima și apoi un cuvânt A după ce ați făcut bucla din nou de 32 de ori.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Încă îndrăzneț, acest tip de cuvânt cu matrice de puncte, există instrumente online se poate face direct, față plus 0b și apoi adăugați o virgulă pe spate, iar apoi jucați după propriile idei, fontul este de fapt inițial destinat să fie stocate în cip-ul flash, dar am regla o lungă perioadă de timp încă nu poate fi deschis.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Nu stiu unde este problema, dupa ce am timp ma voi ajusta din nou, lucrul bun este ca pico in sine are flash de 16 biti, stocarea unei biblioteci ascii este totusi suficienta, atunci sunt atat de stocat.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Definiți-l cu un dicționar, puneți-l într-o bucată separată și apelați-l înapoi în programul principal. 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()
  • Sursa: Plato Data Intelligence