物联网

基于树莓派 pico 和 STONE TFT LCD 的停车管理系统热敏打印头

简单的介绍

热敏打印机在我们的日常生活中非常普遍,在餐厅、停车场和购物场所都有热敏打印机的例子。 本文将重点介绍热敏打印机在停车系统中的应用。

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

使用材料

  • 石材STWI101WT-01
  • FTP热敏打印头
  • 树莓派皮卡
    • 投币机
    功能控制功能显示在串口屏上,主界面选择楼层,进入主界面后选择车位,同时在右上角的文本框中显示车位号,然后选择停留时间,是两个滚动的文本选择器,同样会在右上角的文本框中显示订单信息,根据固定单价乘以停留时间得到总价。 那么只有选好车位和停留时间后才能到支付按钮,否则无效。 进入支付画面后,会使用投币器。 然后屏幕会显示要投入的硬币数量和已经投入的硬币数量。投入硬币后,会显示支付成功信息。 然后你可以选择打印一张小票,在热敏纸上打印地号和时间。设计过程起初我想使用 树莓派皮卡 制作小型打印机。 然后在选择元器件的过程中我觉得热敏打印机实现起来比较方便,确定了方案后,我开始购买硬件。 其实在网上采购的过程中我发现有很多热敏打印机的驱动电路很好,大部分都是用stm的芯片做的,而且都是自己设计的一套指令。 比如用他的指令让打印机打印字符或者走纸,但是这个打印机实用性很高,但是没有学习价值。 它是通过串口发送指令就行,可以操作打印机。 所以我想我会买一个打印头并自己开发。 然后关于打印头,我选择了ftp热敏打印头。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.
  • 这个打印头应该是国际上都有的,基本原理都是类似的。 左侧是步进电机。 然后中间的机头是6个加热单元。 每个加热单元上有64个加热点。 所以共有384个加热点。 然后下面是一个闩锁。 锁存器下方是移位寄存器。 最后,需要提供时钟信号。 所以整个工作原理就是给打印头提供一个时钟信号,然后每个时钟周期发送一个数据,发送完384个时钟信号和384个数据后,移位寄存器中的数据就会被存入锁存器中。 然后锁存器被设置为低电平。 然后384个加热点会根据每个数据是0还是1来选择加热或不加热。同时让步进电机旋转带动热敏纸设计出想要的字符。得到热敏打印后头,我继续索要一份数据表,这是一条 30 针 fpc 电缆。 所以直接用它连接pico显然不是很方便。 所以我想我最好设计一个背板电路。我有一个 STONE串口屏 是12v供电,然后我看一下热敏打印头的一个参考值打印电压是7.6v,最大值是8v,然后给它提供一个7.6v左右的电压。 它还有一个逻辑电压是3.3v,然后树莓派pico最大支持5v电源,它有3.3v输出电压,那么电源设计可以用两个dcdc,用12v电源,一个dcdc输出7.6v为热敏打印头供电,另一个 dcdc 输出 5v 到 pico,然后使用 pico 的 3.3v 为热敏打印头逻辑电压供电。 然后12v直接引到串口屏。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 顺便说一句,热敏打印头的步进电机也需要驱动。 我有一个集成的达林顿管积分器。 但是太大了,而且是直插式的,就买个驱动芯片吧。 那么驱动电机这方面也是可以的。打印需要设计字体,基本上大家都是用spi flash来进行字体存储,这是一个浩大的工程。 仅ascii码就超过100,所以需要另外购买SPF闪光灯。 那么整个策划就差不多是这样了。
    STONE Designer(图形界面设计软件)德德: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.
  • 设计电路那么下面就开始设计电路了。 先找电源,其实一开始我用的是三端稳压器,因为电路简单,做成后调试的时候发热情况比较严重,摸上去很烫,所以改用了直流电。 直接按照芯片数据手册做电路图就可以了。 我这里选的是mt2492,但是忽略了一个重要参数就是打印头工作电流,这个芯片最大输出电流是2A,但是打印头工作电流2.3A,相差0.3A,也可以用,但是效率不是很高,具体效果我们后面再说。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 那么我买的电机驱动芯片是lv8548,看打印头数据表,里面有步进电机驱动时序图,根据它的时序,给它提供一个四路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.
  • 然后是flash芯片,by25q32bs,32Mbit的容量挺大的,接在pico上,等待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.
  • 之后的整体电路图是这样的,左上角是通讯插座和电源插座,下面是蜂鸣器(电路中没有实际使用),右边是发光二极管,右下角是一个30pin fpc,用于连接打印头。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 完成后可以使用如下图,在板子上为树莓派pico留一个排针插座,直接插进去就可以了。
    树莓派 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.
  • 打开电源,先不接pico和打印头,测量dcdc的输出电压,正常情况下一个是7.5v左右,另一个是5v左右。
  • 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.
  • 然后连接打印头、串口屏和pico,测逻辑电压在3.3v左右,没问题后就可以编写程序了。
    曲目我打算先调整步进电机,这部分很容易调整,看数据表中的时序图,8个时钟周期,每个时钟周期应该分别给电机的四个引脚一个逻辑信号,8个周期后电机将转起来,然后调整速度,但是中间我们要加一个延迟来调整占空比,否则转得太快,我设置的延迟时间是5ms左右,然后让它转完后一定要给电平低,否则电机看起来不转,其实内部线圈还在通电,时间长了就能闻到烧焦的味道。然后写函数,把body循环起来,循环次数代表了电机旋转的长度,函数看起来有点长,单独放在其他地方等待调用。
  • 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.
  • 这是经过一些修改后的功能,速度和持续时间将在主程序中传输。 还是需要很多优化。然后是调整打印头的点,这部分对我来说比较困难,它需要一个时钟信号,数据表上写的是最大8M,我以为需要8M左右的信号频率,很难,首先我用io Flip Level测量了频率,差别太大了。 然后我想用pio,研究了一整天但结果不好,我个人技术有限,可能需要深入学习rp2040芯片手册。然后翻转384级来尝试,这是一个工作流程是这样的,初始化数据输入1脚,锁存器1脚,时钟信号1脚,6个打印单元脚,然后除了锁存器以外所有其他的拉低,然后在一个时钟周期内发送一个数据,循环384后次数将锁存器设置为0,将6个打印单元设置为1,然后哪一点有数据哪一点将被加热。 执行完set后,把level拉回来。然后程序写完开始测试,确实不行,其实是因为控制的打印单元太多了,但是电流不够,那就改成少给两个打印单元高电平并再次测试。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 真的很有效! 它打印了一条水平线。这意味着时钟频率没有下限,那么你可以运行步进电机来打印一条垂直线。 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.
  • 用横竖线,然后得到一条对角线,注意一个打印单元有64个点,定义一个长度,比如32,然后循环32次384个周期,每个周期只设置前64个数据为1并将接下来的320个数据设为0,然后每次32次只在第一个单元打印一个点然后循环增量,结合步进电机的速度来调整,最后调整出64*32大小的对角线,也可以先拼出一个字母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.
  • 然后程序的大纲就在那里,如果要打印单词需要先做字体。 先做一个大写字母A,32*32大小,带定义列表,我这里打算用pin.value()做,所以做字体,然后用32行32列的二进制值来调用,取出来做一个移位然后传给pin.value(),所以这就是实现的过程。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 以0为背景,1为前景,那么实际的实现过程是这样的。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 最外面的大循环32是代表32行的循环,也就是打印32行,然后里面的前32个循环就是先加热一半的第一个加热单元,那么剩下的352个周期就设置为0了,然后每次从1减31到0,可以从左到右计算第一行需要加热的点,然后每384个周期完成一次闩锁设置0和加热单元设置1然后可以打印,再循环32次后一个A字出来。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 还是大胆点,这种点阵字,网上有工具可以直接做,前面加0b然后后面加个逗号,然后你就按照自己的想法打吧,字体其实最初是打算做的存储在flash芯片中,但我调了半天还是打不开。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 不知道问题出在哪里,等有时间再调整一下,好在pico本身有16mbit大小的flash,存一个ascii库还是够的,那我就这么存了。
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • 用字典定义它,放在一个单独的块中,并在主程序中回调它。 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()
  • 资料来源:柏拉图数据情报