IOT

Print head termal untuk sistem manajemen parkir berdasarkan Raspberry Pi pico dan STONE TFT LCD

Pengenalan singkat

Printer termal sangat umum dalam kehidupan kita sehari-hari, dan ada contoh printer termal di restoran, tempat parkir, dan perbelanjaan. Artikel ini akan fokus pada penerapan printer termal dalam sistem parkir.

Bahan yang akan digunakan

  • BATU STWI101WT-01
  • Kepala printer termal FTP
  • Pico raspberry
    • Mesin yang dioperasikan dengan koin
    fungsiFungsi kontrol ditampilkan pada layar serial, antarmuka utama memilih lantai, setelah memasuki antarmuka utama memilih tempat parkir, pada saat yang sama akan menampilkan nomor tempat parkir di kotak teks di kanan atas, lalu pilih stay time, yaitu dua scrolling text selector, kemudian sama akan menampilkan informasi order pada text box di kanan atas, sesuai dengan harga satuan tetap yang dikalikan dengan waktu stay untuk mendapatkan total harga. Kemudian hanya ketika tempat parkir dan waktu menginap dipilih, Anda dapat pergi ke tombol pembayaran, jika tidak maka tidak valid. Setelah memasuki layar pembayaran, akseptor koin akan digunakan. Kemudian layar akan menampilkan jumlah koin yang akan dimasukkan dan jumlah koin yang sudah dimasukkan. Setelah koin dimasukkan, pesan sukses pembayaran akan ditampilkan. Kemudian Anda dapat memilih untuk mencetak tiket kecil untuk mencetak nomor tempat dan waktu di kertas termal.Proses desainAwalnya saya ingin menggunakan Pico raspberry untuk membuat printer kecil. Kemudian dalam proses pemilihan komponen saya pikir printer thermal lebih nyaman untuk dicapai, setelah menentukan program, saya mulai membeli perangkat keras. Faktanya, dalam proses pengadaan online saya menemukan bahwa ada banyak printer termal dengan sirkuit driver yang baik, sebagian besar dibuat dengan menggunakan chip stm, dan dirancang dengan serangkaian instruksi mereka sendiri. Misalnya, dengan menggunakan instruksinya untuk membiarkan printer mencetak karakter atau kertas, tetapi kepraktisan printer ini sangat tinggi, tetapi tidak ada nilai pembelajarannya. Hal ini untuk mengirim instruksi melalui port serial di telepon, Anda dapat memanipulasi printer. Jadi saya pikir saya akan membeli kepala cetak dan mengembangkannya sendiri. Kemudian tentang print head, saya memilih ftp thermal print head.Kepala cetak termal ftp
  • Print head ini harus tersedia secara internasional, prinsip dasarnya serupa. Sisi kiri adalah motor stepper. Kemudian kepala tengah adalah 6 unit pemanas. Setiap unit pemanas memiliki 64 titik pemanas di atasnya. Jadi total 384 titik panas. Kemudian di bawah ini adalah kait. Di bawah kait adalah register geser. Terakhir, ada sinyal jam yang harus disediakan. Jadi seluruh prinsip operasi adalah memberikan sinyal clock ke print head dan kemudian mengirimkan data setiap periode clock, setelah mengirimkan 384 sinyal clock dan 384 data, data di register geser akan disimpan di latch. Kemudian kait diatur ke level rendah. Kemudian 384 titik pemanasan akan memilih untuk memanaskan atau tidak memanaskan sesuai dengan apakah masing-masing data adalah 0 atau 1. Pada saat yang sama, biarkan motor stepper berputar untuk menggerakkan kertas termal untuk mendesain karakter yang diinginkan. Setelah saya mendapatkan cetakan termal kepala, saya pergi ke depan dan meminta lembar data dan itu adalah kabel fpc 30pin. Jadi jelas sangat tidak nyaman untuk terhubung ke pico secara langsung dengannya. Jadi saya pikir sebaiknya saya merancang sirkuit backplane. Saya punya Layar serial BATU adalah catu daya 12v, dan kemudian saya melihat tegangan pencetakan kepala cetak termal dari nilai referensi adalah 7.6v, nilai maksimumnya adalah 8v, kemudian memberikannya dengan tegangan sekitar 7.6v. Ini juga memiliki tegangan logika 3.3v, dan kemudian Raspberry Pi pico mendukung catu daya 5v dan memiliki tegangan output 3.3v, maka desain catu daya dapat menggunakan dua dcdc, dengan catu daya 12v, satu keluaran dcdc 7.6v untuk memberi daya pada kepala cetak termal, keluaran dcdc lainnya 5v ke pico, dan kemudian gunakan 3.3v dari pico untuk memberi daya pada tegangan logika kepala cetak termal. Kemudian 12v memimpin langsung ke layar serial.
  • Omong-omong, motor stepper untuk print head termal itu juga perlu digerakkan. Saya memiliki integrator tabung Darlington terintegrasi. Tapi itu terlalu besar, dan itu plug-in langsung, jadi beli saja chip driver. Kemudian aspek motor penggerak ini juga OK. Pencetakan memerlukan desain font, pada dasarnya semua orang menggunakan spi flash untuk penyimpanan font, yang merupakan proyek besar. Hanya kode ascii yang lebih dari 100, jadi Anda perlu membeli flash SPF lagi. Kemudian seluruh perencanaannya hampir seperti ini.
    STONE Designer perangkat lunak Desainer GUI)Desde:https://www.stoneitech.com/support/download/software
  • Desain sirkuitKemudian berikut ini mulai merancang sirkuit. Pertama cari catu daya, sebenarnya pada awalnya saya menggunakan regulator tegangan tiga terminal, karena rangkaiannya sederhana, setelah dibuat, situasi pemanasan lebih serius saat debugging, sangat panas untuk disentuh, jadi saya ganti menggunakan dcdc. Cukup ikuti lembar data chip langsung untuk melakukan diagram rangkaian. Saya memilih mt2492 di sini, tetapi saya mengabaikan parameter penting adalah arus operasi kepala cetak, arus keluaran maksimum chip ini adalah 2A, tetapi arus operasi kepala cetak 2.3A, perbedaan 0.3A, juga dapat digunakan, tetapi efisiensinya tidak terlalu tinggi, kita akan membicarakan efek spesifiknya nanti.
  • Kemudian chip driver motor yang saya beli adalah lv8548, lihat lembar data print head, yang memiliki diagram timing penggerak motor stepper, sesuai dengan waktunya, untuk memberikan sinyal pwm empat arah di atasnya.
  • Kemudian adalah chip flash, dengan by25q32bs, kapasitas 32Mbit cukup besar, dan terhubung ke pico, menunggu untuk dipanggil oleh pico.
  • Setelah itu, diagram rangkaian secara keseluruhan seperti ini, sudut kiri atas adalah soket komunikasi dan soket catu daya, di bawahnya ada buzzer (tidak benar-benar digunakan dalam rangkaian), ada dioda pemancar cahaya di sebelah kanan, dan sudut kanan bawah adalah fpc 30pin untuk menghubungkan kepala cetak.
  • Setelah selesai dan dapat digunakan adalah seperti gambar di bawah ini, meninggalkan wadah pin header di papan untuk pico Raspberry Pi, Anda dapat langsung dicolokkan ke dalamnya.
    Gambar Raspberry Pi
  • Nyalakan daya, pertama tidak terhubung ke pico dan print head, ukur tegangan keluaran dcdc, dalam kasus normal satu sekitar 7.5v, yang lain sekitar 5v.
  • Kemudian hubungkan kepala cetak, layar serial, dan pico, ukur tegangan logika sekitar 3.3v, setelah tidak ada masalah, Anda dapat menulis program.
    programSaya bermaksud untuk menyesuaikan motor stepper terlebih dahulu, bagian ini mudah untuk disesuaikan, lihat diagram waktu di lembar data, 8 periode jam, setiap periode jam harus secara terpisah memberikan sinyal logika empat pin motor, setelah 8 periode motor akan muncul, lalu sesuaikan kecepatannya, tetapi di tengah kita harus menambahkan penundaan untuk menyesuaikan rasio tugas jika tidak ternyata terlalu cepat, waktu tunda yang saya atur sekitar 5ms dan kemudian setelah membiarkannya berputar Anda harus memberikan levelnya ke rendah, jika tidak motor sepertinya tidak berputar ternyata kumparan internal masih menyala, setelah sekian lama Anda bisa mencium bau terbakar. Kemudian tulis fungsinya, letakkan tubuh dalam satu lingkaran, jumlah siklus mewakili panjang putaran motor, fungsinya terlihat agak lama, letakkan di tempat lain saja dan tunggu panggilan.
  • Ini adalah fungsi setelah beberapa perubahan, kecepatan dan durasi akan ditransmisikan dalam program utama. Masih perlu banyak optimasi. Lalu intinya menyesuaikan print head, bagian ini sulit bagi saya, perlu sinyal jam, lembar data ditulis maksimal 8M, saya kira butuh sinyal sekitar 8M frekuensi, sulit, pertama saya mengukur frekuensi dengan level io flip, perbedaannya terlalu banyak. Dan kemudian saya ingin menggunakan pio, dan saya meneliti sepanjang hari tetapi hasilnya tidak bagus, keterampilan pribadi saya terbatas, mungkin saya perlu mempelajari secara mendalam manual chip rp2040. Kemudian balikkan periode level 384 untuk mencoba, itu adalah alur kerja seperti ini, inisialisasi input data 1 pin, latch 1 pin, sinyal clock 1 pin, 6 pin unit cetak, lalu selain latch semua pull low lainnya, lalu kirim satu data dalam satu periode clock, setelah bersepeda 384 kali untuk menyetel kait ke 0, untuk menyetel 6 unit cetak ke 1, lalu titik mana yang memiliki data titik mana yang akan dipanaskan. Setelah penerapan set, tarik kembali levelnya. Kemudian setelah program ditulis dan mulai diuji, itu benar-benar tidak berfungsi, sebenarnya karena terlalu banyak unit cetak yang dikontrol tetapi arusnya tidak cukup, lalu ubah menjadi lebih sedikit dua unit cetak tingkat tinggi dan uji lagi.
  • Ini benar-benar bekerja! Itu mencetak garis horizontal. Itu berarti tidak ada batas bawah pada frekuensi clock, maka Anda dapat menjalankan motor stepper untuk mencetak garis vertikal. pico dual thread, lalu biarkan thread lainnya sinkron menjalankan motor, lalu tulis program dan jalankan. Garis vertikal keluar.
  • Dengan garis horizontal dan vertikal, kemudian dapatkan garis diagonal, perhatikan satu unit cetak memiliki 64 poin, yang mendefinisikan panjang, seperti 32, dan kemudian siklus 32 kali 384 periode, setiap periode hanya menetapkan 64 data pertama menjadi 1 dan atur 320 data berikutnya ke 0, dan kemudian 32 kali setiap kali hanya di unit pertama untuk mencetak titik dan kemudian siklus inkremental, dikombinasikan dengan kecepatan motor stepper untuk menyesuaikan, dan akhirnya menyesuaikan ukuran 64 * 32 dari garis diagonal, Anda juga bisa mengeja huruf Z terlebih dahulu.  
  • Kemudian outline programnya sudah ada, jika ingin mencetak kata harus melakukan font terlebih dahulu. Pertama buat huruf kapital A, ukuran 32 * 32, dengan daftar definisi, saya berencana melakukannya di sini dengan pin.value (), jadi buat fontnya, lalu gunakan 32 baris dan 32 kolom nilai biner untuk dipanggil, take out untuk melakukan shift dan kemudian diteruskan ke pin.value(), jadi ini adalah proses implementasinya.
  • Dengan 0 sebagai latar belakang dan 1 sebagai latar depan, maka proses implementasi yang sebenarnya akan terlihat seperti ini.
  • Siklus besar eksternal 32 mewakili siklus 32 baris, yaitu, mencetak 32 baris, dan kemudian 32 siklus pertama di dalamnya adalah memanaskan setengah dari unit pemanas pertama, kemudian 352 periode tersisa akan diatur ke 0, dan kemudian dikurangi 1 dari 31 setiap kali hingga 0, Anda dapat menghitung baris pertama dari titik yang perlu dipanaskan dari kiri ke kanan, dan kemudian setiap 384 periode harus diselesaikan setelah kait set 0 dan unit pemanas set 1 dan kemudian Anda dapat mencetak, dan kemudian satu kata A keluar setelah mengulang 32 kali lagi.
  • Masih berani, kata dot matrix semacam ini, ada alat online yang bisa dilakukan secara langsung, depan ditambah 0b dan kemudian menambahkan koma di belakang, dan kemudian Anda bermain sesuai dengan ide Anda sendiri, font sebenarnya awalnya dimaksudkan untuk menjadi disimpan di flash chip, tapi saya menyesuaikan waktu yang lama tetap tidak bisa dibuka.
  • Entahlah masalahnya dimana, setelah ada waktu akan saya sesuaikan lagi, bagusnya pico sendiri punya flash ukuran 16mbit, simpan library ascii masih cukup, lalu saya jadi simpan.
  • Tentukan dengan kamus, taruh di bagian terpisah, dan panggil kembali di program utama. 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.
  • 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()
  • Sumber: Plato Data Intelligence