IOT

Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD

Korte introductie

Thermische printers zijn heel gebruikelijk in ons dagelijks leven, en er zijn voorbeelden van thermische printers in restaurants, parkeerplaatsen en winkels. Dit artikel gaat in op de toepassing van thermische printers in parkeersystemen.

Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Te gebruiken materialen

  • STEEN STWI101WT-01
  • FTP thermische printerkop
  • Raspberry Pi-pico
    • Muntautomaat
    FunctieDe bedieningsfunctie wordt weergegeven op het seriële scherm, de hoofdinterface selecteert de verdieping, na het invoeren van de hoofdinterface selecteert de parkeerplaats, tegelijkertijd wordt het parkeerplaatsnummer weergegeven in het tekstvak rechtsboven en selecteert vervolgens de verblijftijd, het zijn twee scrollende tekstkiezers, dan zal hetzelfde ook de bestelinformatie weergeven in het tekstvak rechtsboven, volgens de vaste eenheidsprijs die zich vermenigvuldigt met de verblijfstijd om de totale prijs te krijgen. Pas dan wanneer de parkeerplaats en de verblijftijd zijn geselecteerd, kunt u naar de betaalknop gaan, anders is deze ongeldig. Na het betreden van het betaalscherm wordt er gebruik gemaakt van een muntacceptor. Vervolgens toont het scherm het aantal munten dat moet worden gestort en het aantal munten dat al is gestort. Nadat de munten zijn gestort, wordt een bericht met succes van de betaling weergegeven. Dan kun je ervoor kiezen om een ​​klein kaartje af te drukken om het plaatsnummer en de tijd op het thermisch papier af te drukken.Het ontwerpprocesIn eerste instantie wilde ik de Raspberry Pi-pico om een ​​kleine printer te maken. Tijdens het selecteren van componenten denk ik dat de thermische printer handiger is om te bereiken, nadat ik het programma had bepaald, begon ik hardware te kopen. Tijdens het online inkoopproces ontdekte ik zelfs dat er veel thermische printers zijn met goede drivercircuits, de meeste zijn gemaakt met behulp van de stm-chip en ze zijn ontworpen met hun eigen set instructies. Door bijvoorbeeld zijn instructies te gebruiken om de printer tekens te laten afdrukken of papier te gebruiken, maar deze printer praktisch is, is erg hoog, maar leren heeft geen waarde. Het is om instructies via de seriële poort op de lijn te verzenden, u kunt de printer manipuleren. Dus ik dacht ik koop een printkop en ontwikkel hem zelf. Dan over de printkop, ik koos voor een ftp thermische printkop.De ftp thermische printkop
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Deze printkop zou internationaal verkrijgbaar moeten zijn, de basisprincipes zijn vergelijkbaar. De linkerkant is een stappenmotor. Dan is de middelste kop 6 verwarmingseenheden. Elke verwarmingsunit beschikt over 64 verwarmingspunten. In totaal dus 384 verwarmingspunten. Hieronder zit dan een grendel. Onder de grendel bevindt zich een schuifregister. Tenslotte moet er nog een kloksignaal worden voorzien. Het hele werkingsprincipe is dus om een ​​kloksignaal naar de printkop te sturen en vervolgens elke klokperiode gegevens te verzenden. Na het verzenden van 384 kloksignalen en 384 gegevens worden de gegevens in het schuifregister opgeslagen in de grendel. Vervolgens wordt de grendel op een laag niveau gezet. Vervolgens zullen de 384 verwarmingspunten kiezen om wel of niet te verwarmen, afhankelijk van of elke gegevens 0 of 1 zijn. Laat tegelijkertijd de stappenmotor draaien om het thermische papier aan te drijven om het gewenste karakter te ontwerpen. Nadat ik de thermische afdruk had gekregen hoofd, ik ging door en vroeg om een ​​datasheet en het was een 30-pins fpc-kabel. Het is dus uiteraard niet erg handig om er rechtstreeks verbinding mee te maken met de pico. Dus ik dacht dat ik beter een backplane-circuit kon ontwerpen. Ik heb een STONE serieel scherm is 12v voeding, en dan kijk ik naar de thermische printkop printspanning van een referentiewaarde is 7.6v, de maximale waarde is 8v, geef hem dan een spanning van ongeveer 7.6v. Het heeft ook een logische spanning van 3.3 v, en dan ondersteunt de Raspberry Pi pico maximale 5v-voeding en heeft hij een 3.3v-uitgangsspanning, dan kan het ontwerp van de voeding twee dcdc gebruiken, met 12v-voeding, één dcdc-uitgang 7.6 v om de thermische printkop van stroom te voorzien, voert de andere dcdc 5v uit naar de pico, en gebruik dan de 3.3v van de pico om de logische spanning van de thermische printkop van stroom te voorzien. Dan leidt 12v de weg rechtstreeks naar het seriële scherm.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Overigens moet de stappenmotor voor die thermische printkop ook aangedreven worden. Ik heb een geïntegreerde Darlington-buizenintegrator. Maar hij is te groot en het is een rechtstreekse plug-in, dus koop gewoon een driverchip. Dan is dit aspect van de aandrijfmotor ook in orde. Voor het printen is het ontwerpen van een lettertype nodig, in principe gebruikt iedereen spi flash voor het opslaan van lettertypen, wat een enorm project is. Alleen de ascii-code is meer dan 100, dus je moet nog een SPF-flitser kopen. Dan is de hele planning ongeveer zo.
    STONE Designer (GUI Designer-software)Einde:https://www.stoneitech.com/support/download/software
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Ontwerp het circuitToen begon het volgende om het circuit te ontwerpen. Zoek eerst de voeding, in feite gebruikte ik in het begin een driepolige spanningsregelaar, omdat het circuit eenvoudig is, nadat het is gemaakt, was de verwarmingssituatie ernstiger tijdens het debuggen, erg heet om aan te raken, dus ik verander om te gebruiken dcdc. Volg gewoon het chipgegevensblad om het schakelschema te maken. Ik koos hier voor mt2492, maar ik negeerde een belangrijke parameter, de bedrijfsstroom van de printkop, de maximale uitgangsstroom van deze chip is 2A, maar de bedrijfsstroom van de printkop van 2.3A, een verschil van 0.3A, kan ook worden gebruikt, maar de efficiëntie is niet zo hoog, we zullen het later hebben over het specifieke effect.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Dan is de motorstuurprogramma-chip die ik heb gekocht lv8548, zie het printkopgegevensblad, dat een timingdiagram van de stappenmotoraandrijving heeft, volgens de timing, om het te voorzien van een vierweg pwm-signaal erop.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Dan is de flash-chip, met by25q32bs, de capaciteit van 32Mbit is vrij groot, en verbonden met de pico, wachtend om te worden gebeld door de pico.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Daarna is het algemene schakelschema als volgt, de linkerbovenhoek is de communicatie-aansluiting en de voedingsaansluiting, daaronder is een zoemer (niet echt gebruikt in het circuit), er is een lichtgevende diode aan de rechterkant, en de rechter benedenhoek is een 30-pins fpc voor het aansluiten van de printkop.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Nadat het klaar is en kan worden gebruikt, zoals hieronder wordt weergegeven, laat u een pin-header-aansluiting op het bord achter voor de Raspberry Pi pico, die u er direct op kunt aansluiten.
    De Raspberry Pi pico
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Zet de stroom aan, eerst niet aangesloten op de pico en printkop, meet de uitgangsspanning van de dcdc, in het normale geval is de ene ongeveer 7.5v, de andere ongeveer 5v.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Sluit vervolgens de printkop, het seriële scherm en de pico aan, meet de logische spanning is ongeveer 3.3 V, na geen probleem kunt u het programma schrijven.
    ProgrammaIk ben van plan eerst de stappenmotor af te stellen, dit onderdeel is eenvoudig af te stellen, kijk naar het timingdiagram in het datablad, 8 klokperioden, elke klokperiode moet afzonderlijk de vier pinnen van de motor een logisch signaal geven, na 8 perioden zal de motor dat doen draai omhoog en pas dan de snelheid aan, maar in het midden moeten we een vertraging toevoegen om de duty-ratio aan te passen, anders draait hij te snel, de vertragingstijd die ik heb ingesteld is ongeveer 5 ms en nadat je hem hebt laten draaien, moet je het niveau geven laag, anders lijkt de motor niet te draaien, sterker nog, de interne spoel staat nog steeds op stroom, na een lange tijd ruik je de brandende geur. Schrijf vervolgens de functie, plaats het lichaam in een lus, het aantal cycli vertegenwoordigt de lengte van de motorrotatie, de functie ziet er een beetje lang uit, zet hem ergens anders neer en wacht op de oproep.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Dit is de functie, na enkele wijzigingen wordt de snelheid en duur in het hoofdprogramma overgedragen. Er moet nog veel worden geoptimaliseerd. Dan komt het erop aan om de printkop aan te passen, dit onderdeel is moeilijk voor mij, het heeft een kloksignaal nodig, het gegevensblad is geschreven in de maximale 8M, ik dacht dat het een signaal van ongeveer 8M nodig had frequentie, het is moeilijk, eerst heb ik de frequentie gemeten met io flip-niveau, het verschil is te groot. En dan wil ik pio gebruiken, en ik heb een hele dag onderzoek gedaan, maar het resultaat is niet goed, mijn persoonlijke vaardigheden zijn beperkt, waarschijnlijk moet ik de handleiding van de rp2040-chip grondig bestuderen. Draai dan de niveaus van niveau 384 om om het te proberen, het is een workflow zoals deze, initialiseer de gegevensinvoer 1 pin, grendel 1 pin, kloksignaal 1 pin, 6 printeenheidpinnen, en dan naast de grendel alle andere pull low, en verzend dan één gegevens binnen één klokperiode, na het fietsen 384 keer om de vergrendeling op 0 te zetten, om de 6 printeenheid op 1 te zetten, en dan welk punt gegevens heeft welk punt zal worden verwarmd. Na de implementatie van de set trekt u het niveau terug. Nadat het programma was geschreven en begonnen met testen, werkte het echt niet, eigenlijk omdat er te veel printeenheden werden aangestuurd maar de stroom niet genoeg was, en verander het dan om minder te geven twee printeenheden op hoog niveau en opnieuw testen.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Het werkt echt! Er wordt een horizontale lijn afgedrukt. Dat betekent dat er geen ondergrens is voor de klokfrequentie. Vervolgens kunt u de stappenmotor laten draaien om een ​​verticale lijn af te drukken. pico dual thread, laat vervolgens de andere thread de motor synchroon laten draaien, schrijf vervolgens het programma en voer het uit. De verticale lijn komt naar buiten.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Met de horizontale en verticale lijnen, krijg dan een diagonale lijn, let op een printeenheid heeft 64 punten, die een lengte definieert, zoals 32, en cyclus dan 32 keer 384 perioden, elke periode stelt alleen de eerste 64 gegevens in op 1 en stel de volgende 320 gegevens in op 0, en vervolgens 32 keer elke keer alleen in de eerste eenheid om een ​​punt af te drukken en vervolgens incrementeel te fietsen, gecombineerd met de snelheid van de stappenmotor om aan te passen, en tenslotte aangepast 64 * 32 grootte van de diagonale lijn, kunt u ook eerst een letter Z spellen.  
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Dan is de omtrek van het programma er, als je het woord wilt afdrukken, moet je eerst het lettertype doen. Doe eerst een hoofdletter A, 32 * 32 grootte, met een lijst met definities, ik ben van plan om hier te doen met pin.value (), dus maak het lettertype, gebruik dan 32 rijen en 32 kolommen met binaire waarden die moeten worden aangeroepen, neem uit om een ​​​​shift te doen en ga vervolgens door naar pin.value (), dus dit is het implementatieproces.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Met 0 als achtergrond en 1 als voorgrond ziet het daadwerkelijke implementatieproces er dan als volgt uit.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • De meest externe grote cyclus 32 vertegenwoordigt de cyclus van 32 regels, dat wil zeggen, druk 32 regels af, en dan zijn de eerste 32 cycli binnenin om de helft van de eerste verwarmingseenheid te verwarmen, dan worden de resterende 352 perioden ingesteld op 0, en dan min 1 van 31 telkens tot 0, je kunt de eerste regel tellen van de punten die moeten worden verwarmd van links naar rechts, en dan elke 384 perioden die moeten worden voltooid zodra de grendel op 0 staat en de verwarmingseenheid op 1 zet en dan u kunt afdrukken, en dan een A-woord uit na 32 keer herhalen.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Nog steeds vet, dit soort dotmatrix woord, er zijn tools online die direct kunnen worden gedaan, de voorkant plus 0b en dan een komma toevoegen op de achterkant, en dan speel je volgens je eigen ideeën, het lettertype is eigenlijk in eerste instantie bedoeld om te worden opgeslagen in de flash-chip, maar ik pas een lange tijd het kan nog steeds niet worden geopend.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Ik weet niet waar het probleem zit, als ik tijd heb zal ik me weer aanpassen, het goede is dat pico zelf 16mbit flash heeft, een ascii bibliotheek opslaan is nog steeds genoeg, dan ben ik zo opgeslagen.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  • Definieer het met een woordenboek, plaats het in een apart stuk en roep het terug in het hoofdprogramma. 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.
  • Thermische printkop voor een parkeerbeheersysteem op basis van Raspberry Pi pico en STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Verticaal zoeken. 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()
  • Bron: Plato Data Intelligence