IOT

Termiczna głowica drukująca do systemu zarządzania parkingiem w oparciu o Raspberry Pi pico i STONE TFT LCD

Krótkie wprowadzenie

Drukarki termiczne są bardzo powszechne w naszym codziennym życiu, a przykłady drukarek termicznych można znaleźć w restauracjach, na parkingach i w sklepach. W tym artykule skupimy się na zastosowaniu drukarek termicznych w systemach parkingowych.

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

Materiały do ​​wykorzystania

  • KAMIEŃ STWI101WT-01
  • Termiczna głowica drukarki FTP
  • Piko Raspberry Pi
    • Maszyna na monety
    FunkcjonowaćFunkcja sterowania jest wyświetlana na ekranie szeregowym, interfejs główny wybiera piętro, po wejściu do interfejsu głównego wybiera miejsce parkingowe, jednocześnie wyświetla numer miejsca parkingowego w polu tekstowym w prawym górnym rogu, następnie wybiera czas pobytu, to dwa przewijane selektory tekstu, to samo wyświetli informacje o zamówieniu w polu tekstowym w prawym górnym rogu, zgodnie z ustaloną ceną jednostkową, która pomnoży się przez czas pobytu, aby uzyskać całkowitą cenę. Wtedy dopiero po wybraniu miejsca parkingowego i czasu pobytu można przejść do przycisku płatności, w przeciwnym razie jest nieważny. Po wejściu na ekran płatności zostanie użyty wrzutnik monet. Następnie na ekranie pojawi się liczba monet do wrzucenia oraz liczba monet już wrzuconych. Po wrzuceniu monet zostanie wyświetlony komunikat o powodzeniu płatności. Następnie możesz wydrukować mały bilet, aby wydrukować numer miejsca i godzinę na papierze termicznym.Proces projektowaniaNa początku chciałem użyć Piko Raspberry Pi zrobić małą drukarkę. Następnie w procesie doboru komponentów uważam, że drukarka termiczna jest wygodniejsza do osiągnięcia, po ustaleniu programu zacząłem kupować sprzęt. W rzeczywistości w trakcie zakupów online odkryłem, że istnieje wiele drukarek termicznych z dobrymi obwodami sterownika, większość z nich jest wykonana przy użyciu chipa stm i są zaprojektowane z własnym zestawem instrukcji. Na przykład, używając jego instrukcji, aby pozwolić drukarce drukować znaki lub iść na papier, ale ta praktyczność drukarki jest bardzo wysoka, ale nie ma wartości uczenia się. Jest to wysyłanie instrukcji przez port szeregowy na linii, można manipulować drukarką. Pomyślałem więc, że kupię głowicę drukującą i sam ją opracuję. Następnie o głowicy drukującej wybrałem głowicę termiczną ftp.Termiczna głowica drukująca 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.
  • Ta głowica drukująca powinna być dostępna na całym świecie, podstawowe zasady są podobne. Lewa strona to silnik krokowy. Następnie środkowa głowica to 6 jednostek grzewczych. Na każdym urządzeniu grzewczym znajdują się 64 punkty grzewcze. Zatem w sumie 384 punkty grzewcze. Poniżej znajduje się zatrzask. Poniżej zatrzasku znajduje się rejestr przesuwny. Wreszcie należy zapewnić sygnał zegarowy. Zatem cała zasada działania polega na dostarczaniu sygnału zegarowego do głowicy drukującej, a następnie wysyłaniu danych co okres zegara. Po wysłaniu 384 sygnałów zegarowych i 384 danych dane w rejestrze przesuwnym zostaną zapisane w zatrzasku. Następnie zatrzask jest ustawiony na niski poziom. Następnie 384 punkty grzewcze zdecydują się na ogrzewanie lub nie, w zależności od tego, czy każda z danych wynosi 0 czy 1. Jednocześnie pozwól silnikowi krokowemu obracać się, aby napędzać papier termiczny, aby zaprojektować żądany znak. Po otrzymaniu wydruku termicznego głowy, poszedłem dalej i poprosiłem o arkusz danych i był to 30-pinowy kabel fpc. Dlatego bezpośrednie łączenie się z nim z pico nie jest zbyt wygodne. Pomyślałem więc, że lepiej zaprojektuję obwód na płycie montażowej. Mam Ekran seryjny STONE to zasilacz 12v, a następnie patrzę na napięcie druku głowicy termicznej o wartości referencyjnej 7.6v, maksymalna wartość to 8v, następnie dostarczam napięcie około 7.6v. Ma również napięcie logiczne 3.3 V, a następnie Raspberry Pi pico maksymalnie obsługuje zasilacz 5 V i ma napięcie wyjściowe 3.3 V, wtedy konstrukcja zasilacza może wykorzystywać dwa dcdc, z zasilaczem 12 V, jedno wyjście dcdc 7.6 v Aby zasilić termiczną głowicę drukującą, drugi dcdc wyprowadza napięcie 5 V do pico, a następnie użyj 3.3 V z pico do zasilania napięcia logicznego termicznej głowicy drukującej. Następnie 12v prowadzi bezpośrednio do ekranu szeregowego.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Nawiasem mówiąc, silnik krokowy tej termicznej głowicy drukującej również musi być napędzany. Mam zintegrowany integrator lampowy Darlingtona. Ale jest za duży i jest to prosta wtyczka, więc po prostu kup chip sterownika. Wtedy ten aspekt silnika napędowego również jest w porządku. Drukowanie wymaga zaprojektowania czcionki, w zasadzie wszyscy używają pamięci flash spi do przechowywania czcionek, co jest ogromnym projektem. Tylko kod ascii jest większy niż 100, więc musisz kupić kolejną lampę błyskową SPF. Wtedy całe planowanie wygląda mniej więcej tak.
    STONE Designer (Oprogramowanie GUI Designer)Z: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.
  • Zaprojektuj obwódNastępnie zaczęto projektować obwód. Najpierw znajdź zasilacz, właściwie na początku użyłem trójzaciskowego regulatora napięcia, bo obwód jest prosty, po wykonaniu sytuacja grzewcza była poważniejsza podczas debugowania, bardzo gorąca w dotyku, więc przesiadam się do użytku DCDC. Wystarczy postępować zgodnie z arkuszem danych chipa bezpośrednio, aby wykonać schemat obwodu. Wybrałem tutaj mt2492, ale zignorowałem ważny parametr to prąd pracy głowicy, maksymalny prąd wyjściowy tego układu to 2A, ale prąd pracy głowicy 2.3A, różnica 0.3A, można go również zastosować, ale skuteczność nie jest tak wysoka, o konkretnym efekcie porozmawiamy później.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Następnie chip sterownika silnika, który kupiłem, to lv8548, patrz arkusz danych głowicy drukującej, który ma schemat taktowania napędu silnika krokowego, zgodnie z jego taktowaniem, aby zapewnić czterokierunkowy sygnał pwm.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Następnie jest chip flash, z by25q32bs, pojemnością 32Mbit jest dość duży i podłączony do pico, czekając na wywołanie przez 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.
  • Dalej schemat ogólny wygląda tak, lewy górny róg to gniazdo komunikacyjne i gniazdo zasilania, poniżej brzęczyk (faktycznie nie używany w układzie), po prawej dioda świecąca, oraz w prawym dolnym rogu znajduje się 30-pinowy fpc do podłączenia głowicy drukującej.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Po wykonaniu i można go użyć, jak pokazano poniżej, pozostawiając gniazdo nagłówka pinów na płycie dla Raspberry Pi pico, można go bezpośrednio podłączyć.
    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.
  • Włącz zasilanie, najpierw nie podłączone do pico i głowicy drukującej, zmierz napięcie wyjściowe DC, w normalnym przypadku jedno ma około 7.5 V, drugie około 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.
  • Następnie podłącz głowicę drukującą, ekran szeregowy i pico, zmierz napięcie logiczne około 3.3 v, po żadnych problemach możesz napisać program.
    ProgramZamierzam najpierw wyregulować silnik krokowy, ta część jest łatwa do wyregulowania, spójrz na schemat rozrządu w arkuszu danych, 8 okresów zegara, każdy okres zegara powinien oddzielnie dawać sygnał logiczny na cztery piny silnika, po 8 okresach silnik będzie podkręć, a następnie dostosuj prędkość, ale w środku musimy dodać opóźnienie, aby dostosować współczynnik wypełnienia, w przeciwnym razie obraca się zbyt szybko, czas opóźnienia, który ustawiłem, wynosi około 5 ms, a następnie po jego włączeniu musisz ustawić poziom niski, w przeciwnym razie silnik wydaje się nie kręcić, faktycznie cewka wewnętrzna jest nadal pod napięciem, po dłuższym czasie czuć zapach spalenizny. Następnie napisz funkcję, włóż korpus w pętlę, liczba cykli reprezentuje długość obrotów silnika, funkcja wygląda na trochę długą, umieść ją w innym miejscu i poczekaj na wywołanie.
  • 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.
  • Jest to funkcja, po kilku zmianach prędkość i czas trwania zostaną przesłane do programu głównego. Wymaga jeszcze dużej optymalizacji. Następnie pozostaje kwestia wyregulowania głowicy drukującej, ta część jest dla mnie trudna, potrzebuje sygnału zegarowego, karta katalogowa jest zapisana w maksymalnie 8M, myślałem, że potrzebny jest sygnał około 8M częstotliwość, to trudne, najpierw zmierzyłem częstotliwość za pomocą poziomu io flip, różnica jest zbyt duża. A potem chcę użyć pio i szukałem cały dzień, ale wynik nie jest dobry, moje umiejętności osobiste są ograniczone, prawdopodobnie muszę dokładnie przestudiować instrukcję chipa rp2040. Następnie odwróć okresy poziomu 384, aby spróbować, jest to taki przepływ pracy, zainicjuj wejście danych 1 pin, zatrzask 1 pin, sygnał zegara 1 pin, 6 pinów modułu drukującego, a następnie oprócz zatrzasku wszystkie pozostałe pociągnij w dół, a następnie wyślij jedno dane w ciągu jednego okresu zegara, po cyklu 384 razy, aby ustawić zatrzask na 0, aby ustawić zespół drukujący 6 na 1, a następnie który punkt ma dane, który punkt będzie podgrzewany. Po zaimplementowaniu zestawu cofnij poziom. Potem po napisaniu programu i rozpoczęciu testowania rzeczywiście nie zadziałało, a właściwie dlatego, że sterowano zbyt dużą liczbą jednostek drukujących, ale prąd był niewystarczający, to zmień go, aby dawał mniej wysoki poziom w dwóch zespołach drukujących i przetestuj ponownie.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • To naprawdę działa! Wydrukowała linię poziomą. Oznacza to, że nie ma dolnej granicy częstotliwości zegara, więc można uruchomić silnik krokowy, aby wydrukować linię pionową. pico dual thread, następnie pozwól drugiemu wątkowi na synchroniczne uruchomienie silnika, następnie napisz program i uruchom. Wychodzi pionowa linia.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Przy liniach poziomych i pionowych, następnie uzyskaj linię ukośną, zwróć uwagę, że jedna jednostka druku ma 64 punkty, które określają długość, na przykład 32, a następnie cykl 32 razy 384 okresy, każdy okres ustawia tylko pierwsze 64 dane na 1 i ustaw następne 320 danych na 0, a następnie 32 razy za każdym razem tylko w pierwszej jednostce, aby wydrukować punkt, a następnie cykl przyrostowo, w połączeniu z prędkością regulacji silnika krokowego, a na koniec wyreguluj rozmiar 64 * 32 ukośną linię, możesz również najpierw przeliterować literę 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.
  • Następnie zarys programu jest tam, jeśli chcesz wydrukować słowo, musisz najpierw zrobić czcionkę. Najpierw zrób wielką literę A, rozmiar 32*32, z listą definicji, planuję tutaj zrobić z pin.value(), więc zrób czcionkę, a następnie użyj 32 wierszy i 32 kolumn wartości binarnych do wywołania, wyjmij, aby zrobić przesunięcie, a następnie przejdź do pin.value(), więc jest to proces implementacji.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Mając 0 jako tło i 1 jako pierwszy plan, rzeczywisty proces implementacji wygląda tak.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Najbardziej zewnętrzny duży cykl 32 reprezentuje cykl 32 linii, to znaczy wydrukuj 32 linie, a następnie pierwsze 32 cykle wewnątrz mają na celu nagrzanie połowy pierwszej jednostki grzewczej, następnie pozostałe 352 okresy zostaną ustawione na 0, i następnie minus 1 od 31 każdorazowo do 0, można policzyć pierwszą linię punktów, które mają być nagrzewane od lewej do prawej, a następnie co 384 okresy do uzupełnienia raz zapadka ustawiona na 0 i nagrzewnica ustawiona na 1 a następnie możesz wydrukować, a następnie jedno słowo A po ponownym 32-krotnym zapętleniu.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Wciąż odważne, tego rodzaju słowo z matrycą punktową, istnieją narzędzia online, które można wykonać bezpośrednio, przód plus 0b, a następnie dodaj przecinek z tyłu, a następnie grasz zgodnie z własnymi pomysłami, czcionka jest właściwie początkowo przeznaczona do przechowywane w chipie flash, ale długo ustawiam to nadal nie da się otworzyć.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Nie wiem, gdzie jest problem, po czasie dostosuję się ponownie, dobrą rzeczą jest to, że sam pico ma flash o rozmiarze 16mbit, przechowywanie biblioteki ascii jest nadal wystarczające, więc jestem tak przechowywany.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Zdefiniuj go za pomocą słownika, umieść w osobnym kawałku i wywołaj ponownie w programie głównym. 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()
  • Źródło: Plato Data Inteligence