IOT

Thermodruckkopf für ein Parkleitsystem basierend auf Raspberry Pi Pico und STONE TFT LCD

Kurze Einführung

Thermodrucker sind in unserem täglichen Leben sehr verbreitet, und es gibt Beispiele für Thermodrucker in Restaurants, auf Parkplätzen und beim Einkaufen. Dieser Artikel konzentriert sich auf die Anwendung von Thermodruckern in Parksystemen.

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

Zu verwendende Materialien

  • STEIN STWI101WT-01
  • FTP-Thermodruckkopf
  • Himbeer-Pi-Pico
    • Münzautomat
    FunktionDie Steuerfunktion wird auf dem seriellen Bildschirm angezeigt, die Hauptschnittstelle wählt die Etage aus, nach dem Aufrufen der Hauptschnittstelle wählt sie den Parkplatz aus, gleichzeitig wird die Parkplatznummer im Textfeld oben rechts angezeigt, dann wählt die Aufenthaltszeit, es sind zwei Lauftextselektoren, dann werden auch die Bestellinformationen im Textfeld oben rechts angezeigt, entsprechend dem festen Einheitspreis, der mit der Aufenthaltszeit multipliziert wird, um den Gesamtpreis zu erhalten. Erst wenn der Parkplatz und die Aufenthaltszeit ausgewählt sind, können Sie auf den Bezahlbutton gehen, ansonsten ist er ungültig. Nach dem Aufrufen des Zahlungsbildschirms wird ein Münzprüfer verwendet. Dann zeigt der Bildschirm die Anzahl der einzuzahlenden Münzen und die Anzahl der bereits eingeworfenen Münzen an. Nach dem Einwerfen der Münzen wird eine Meldung über den Zahlungserfolg angezeigt. Dann können Sie ein kleines Ticket drucken, um die Platznummer und die Uhrzeit auf das Thermopapier zu drucken.Der DesignprozessZuerst wollte ich die verwenden Himbeer-Pi-Pico einen kleinen Drucker zu machen. Dann, bei der Auswahl der Komponenten, denke ich, dass der Thermodrucker bequemer zu erreichen ist, nachdem ich das Programm festgelegt hatte, begann ich, Hardware zu kaufen. Tatsächlich habe ich bei der Online-Beschaffung festgestellt, dass es viele Thermodrucker mit guten Treiberschaltungen gibt, die meisten werden mit dem stm-Chip hergestellt und mit eigenen Anweisungen entwickelt. Zum Beispiel, indem er seine Anweisungen verwendet, um den Drucker Zeichen drucken oder Papier gehen zu lassen, aber dieser Drucker ist sehr praktisch, aber es gibt keinen Wert des Lernens. Um Anweisungen über den seriellen Port auf der Leitung zu senden, können Sie den Drucker manipulieren. Also dachte ich mir, ich kaufe mir einen Druckkopf und entwickle ihn selbst. Dann entschied ich mich für den Druckkopf für einen FTP-Thermodruckkopf.Der FTP-Thermodruckkopf
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dieser Druckkopf soll international erhältlich sein, die Grundprinzipien sind ähnlich. Die linke Seite ist ein Schrittmotor. Dann besteht der mittlere Kopf aus 6 Heizeinheiten. Jede Heizeinheit verfügt über 64 Heizpunkte. Insgesamt also 384 Heizpunkte. Dann ist unten ein Riegel. Unterhalb des Latches befindet sich ein Schieberegister. Schließlich muss noch ein Taktsignal bereitgestellt werden. Das gesamte Funktionsprinzip besteht also darin, dem Druckkopf ein Taktsignal bereitzustellen und dann in jeder Taktperiode Daten zu senden. Nach dem Senden von 384 Taktsignalen und 384 Daten werden die Daten im Schieberegister im Latch gespeichert. Dann wird der Latch auf Low-Pegel gesetzt. Dann entscheiden die 384 Heizpunkte, ob sie heizen oder nicht, je nachdem, ob die einzelnen Daten 0 oder 1 sind. Lassen Sie gleichzeitig den Schrittmotor rotieren, um das Thermopapier anzutreiben und das gewünschte Zeichen zu entwerfen. Nachdem ich den Thermodruck erhalten habe Kopf, ich habe nach einem Datenblatt gefragt und es war ein 30-poliges FPC-Kabel. Daher ist es offensichtlich nicht sehr praktisch, sich damit direkt mit dem Pico zu verbinden. Also dachte ich, ich sollte besser eine Backplane-Schaltung entwerfen. Ich habe eine STONE serieller Bildschirm ist 12V Stromversorgung, und dann schaue ich mir die Druckspannung des Thermodruckkopfes eines Referenzwerts von 7.6V an, der Maximalwert beträgt 8V, und versorge ihn dann mit einer Spannung von etwa 7.6V. Es hat auch eine logische Spannung von 3.3 V, und dann unterstützt das Raspberry Pi Pico maximal 5 V Netzteil und es hat eine 3.3 V Ausgangsspannung Um den Thermodruckkopf mit Strom zu versorgen, gibt der andere DC-Ausgang 12 V an den Pico aus, und verwenden Sie dann die 7.6 V vom Pico, um die Logikspannung des Thermodruckkopfs zu versorgen. Dann führen 5V direkt zum seriellen Bildschirm.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Übrigens muss auch der Schrittmotor für diesen Thermodruckkopf angetrieben werden. Ich habe einen integrierten Darlington-Röhrenintegrator. Aber es ist zu groß und es handelt sich um ein reines Plug-in, also kaufen Sie einfach einen Treiberchip. Dann ist dieser Aspekt des Antriebsmotors auch in Ordnung. Zum Drucken muss eine Schriftart entworfen werden. Im Grunde verwendet jeder Spi-Flash zur Speicherung von Schriftarten, was ein riesiges Projekt ist. Nur der ASCII-Code ist größer als 100, daher müssen Sie einen weiteren SPF-Flash kaufen. Dann ist die ganze Planung fast so.
    STONE Designer (GUI Designer-Software)Desde: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.
  • Entwerfen Sie die SchaltungDann begannen die folgenden, die Schaltung zu entwerfen. Finden Sie zuerst das Netzteil, in der Tat, am Anfang habe ich einen Spannungsregler mit drei Anschlüssen verwendet, da die Schaltung einfach ist dcdc. Folgen Sie einfach dem Chipdatenblatt direkt, um den Schaltplan zu erstellen. Ich habe hier mt2492 gewählt, aber ich habe einen wichtigen Parameter ignoriert, ist der Druckkopf-Betriebsstrom, der maximale Ausgangsstrom dieses Chips beträgt 2A, aber der Druckkopf-Betriebsstrom von 2.3A, eine Differenz von 0.3A, kann auch verwendet werden. aber die Effizienz ist nicht so hoch, auf den spezifischen Effekt kommen wir später.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dann ist der Motortreiber-Chip, den ich gekauft habe, lv8548, siehe das Datenblatt des Druckkopfes, das ein Timing-Diagramm für den Schrittmotorantrieb entsprechend seinem Timing enthält, um ihm ein Vier-Wege-PWM-Signal bereitzustellen.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dann ist der Flash-Chip, mit by25q32bs, Kapazität von 32Mbit, ziemlich groß, und mit dem Pico verbunden, der darauf wartet, vom Pico aufgerufen zu werden.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Danach sieht der Gesamtschaltplan so aus, die obere linke Ecke ist die Kommunikationsbuchse und die Stromversorgungsbuchse, unten befindet sich ein Summer (wirklich nicht in der Schaltung verwendet), rechts eine Leuchtdiode und die untere rechte ecke ist ein 30pin fpc zum anschluss des druckkopfes.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Nachdem dies erledigt ist und verwendet werden kann, ist wie unten gezeigt, eine Stiftleistenbuchse auf der Platine für den Raspberry Pi Pico belassen, die Sie direkt einstecken können.
    Der 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.
  • Schalten Sie den Strom ein, zuerst nicht an den Pico und den Druckkopf angeschlossen, messen Sie die Ausgangsspannung des DC-DC, im Normalfall beträgt einer etwa 7.5 V, der andere etwa 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.
  • Schließen Sie dann den Druckkopf, den seriellen Bildschirm und den Pico an, messen Sie die logische Spannung beträgt etwa 3.3 V. Nach keinem Problem können Sie das Programm schreiben.
    ProgrammIch habe vor, zuerst den Schrittmotor einzustellen, dieser Teil ist einfach einzustellen, schauen Sie sich das Zeitdiagramm im Datenblatt an, 8 Taktperioden, jede Taktperiode sollte separat den vier Pins des Motors ein Logiksignal geben, nach 8 Perioden wird der Motor dies tun aufdrehen und dann die Geschwindigkeit anpassen, aber in der Mitte müssen wir eine Verzögerung hinzufügen, um das Tastverhältnis anzupassen, sonst dreht es zu schnell. Die Verzögerungszeit, die ich eingestellt habe, beträgt etwa 5 ms, und nachdem man es drehen gelassen hat, muss man den Pegel angeben niedrig, sonst scheint sich der Motor nicht zu drehen, tatsächlich ist die interne Spule immer noch mit Strom versorgt, nach langer Zeit kann man den Brandgeruch riechen. Dann schreiben Sie die Funktion, setzen Sie den Körper in eine Schleife, die die Anzahl der Zyklen darstellt Länge der Motordrehung, die Funktion sieht etwas lang aus, platzieren Sie sie woanders und warten Sie auf den Anruf.
  • 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.
  • Mit dieser Funktion wird nach einigen Änderungen die Geschwindigkeit und Dauer im Hauptprogramm übertragen. Es muss noch viel optimiert werden. Dann kommt die Einstellung des Druckkopfes, dieser Teil ist für mich schwierig, er braucht ein Taktsignal, das Datenblatt wird in maximal 8M geschrieben, ich dachte, es bräuchte ein Signal von etwa 8M Frequenz, es ist schwierig, zuerst habe ich die Frequenz mit io Flip Level gemessen, der Unterschied ist zu groß. Und dann möchte ich PIO verwenden, und ich habe einen ganzen Tag lang recherchiert, aber das Ergebnis ist nicht gut, meine persönlichen Fähigkeiten sind begrenzt, wahrscheinlich muss ich das RP2040-Chip-Handbuch gründlich studieren. Drehen Sie dann die Level 384-Perioden um, um es zu versuchen, es ist ein Ein Arbeitsablauf wie dieser: Initialisieren Sie den Dateneingang 1 Pin, den Latch 1 Pin, das Taktsignal 1 Pin, die 6 Pins der Druckeinheit und ziehen Sie dann zusätzlich zum Latch alle anderen auf Low und senden Sie dann innerhalb einer Taktperiode nach dem Durchlaufen von 384 einen Datenwert mal, um den Riegel auf 0 zu setzen, um die 6-Drucker-Einheit auf 1 zu setzen und dann, welcher Punkt Daten hat, welcher Punkt erhitzt wird. Ziehen Sie nach der Implementierung des Satzes den Pegel zurück. Nachdem das Programm dann geschrieben und mit dem Testen begonnen wurde, hat es wirklich nicht funktioniert, eigentlich weil zu viele Druckeinheiten gesteuert wurden, aber der Strom nicht ausreichte, und dann ändern, um weniger zu liefern zwei Druckeinheiten hochfahren und erneut testen.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Es funktioniert wirklich! Es wurde eine horizontale Linie gedruckt. Das heißt, es gibt keine untere Grenze für die Taktfrequenz, dann können Sie den Schrittmotor laufen lassen, um eine vertikale Linie zu drucken. Pico-Dual-Thread, dann lassen Sie den anderen Thread den Motor synchron laufen, schreiben Sie dann das Programm und führen Sie es aus. Die vertikale Linie kommt heraus.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Mit den horizontalen und vertikalen Linien, dann eine diagonale Linie, achten Sie darauf, dass eine Druckeinheit 64 Punkte hat, die eine Länge definiert, z. B. 32, und dann 32 mal 384 Perioden durchlaufen, jede Periode nur die ersten 64 Daten auf 1 . setzen und setzen Sie die nächsten 320 Daten auf 0, und dann jeweils 32 Mal nur in der ersten Einheit, um einen Punkt zu drucken und dann inkrementell zu durchlaufen, kombiniert mit der Geschwindigkeit des Schrittmotors zum Anpassen, und schließlich angepasst 64 * 32 Größe des diagonale Linie können Sie auch zuerst einen Buchstaben Z buchstabieren.  
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Dann ist der Umriss des Programms da, wenn Sie das Wort drucken möchten, müssen Sie zuerst die Schriftart erstellen. Machen Sie zuerst einen Großbuchstaben A, Größe 32 * 32, mit einer Liste von Definitionen, die ich hier mit pin.value () planen möchte, also machen Sie die Schriftart, verwenden Sie dann 32 Zeilen und 32 Spalten mit Binärwerten, die aufgerufen werden sollen, Nehmen Sie heraus, um eine Verschiebung durchzuführen, und übergeben Sie sie dann an pin.value (), also ist dies der Implementierungsprozess.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Mit 0 als Hintergrund und 1 als Vordergrund sieht der eigentliche Implementierungsprozess dann so aus.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Der äußere große Zyklus 32 stellt den Zyklus von 32 Zeilen dar, d dann minus 32 von 32 jedes Mal bis 352, Sie können die erste Zeile der Punkte zählen, die von links nach rechts erhitzt werden müssen, und dann alle 0 Perioden, die einmal abgeschlossen werden müssen, wenn die Verriegelung 1 und die Heizeinheit 31 eingestellt ist und dann Sie können ausdrucken, und dann ein A-Wort ausgeben, nachdem Sie 0 Mal erneut durchlaufen haben.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Noch fett, diese Art von Dot-Matrix-Wort gibt es Tools, die man direkt online machen kann, vorne plus 0b und dann hinten ein Komma hinzufügen, und dann spielt man nach eigenen Vorstellungen, die Schrift soll eigentlich anfangs sein im Flash-Chip gespeichert, aber ich passe eine lange Zeit es kann immer noch nicht geöffnet werden.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • ich weiß nicht wo das problem ist, nachdem ich zeit habe werde ich nochmal anpassen, das gute ist das pico selber 16mbit flash hat, eine ascii bibliothek abspeichern reicht noch, dann bin ich so gespeichert.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Definieren Sie es mit einem Wörterbuch, fügen Sie es in einen separaten Teil ein und rufen Sie es im Hauptprogramm erneut auf. 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()
  • Quelle: Plato Data Intelligence