• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Termiczna głowica drukująca dla systemu zarządzania parkingiem w oparciu o Raspberry
#1
Materiały do wykorzystania

1、KAMIEŃ STWI101WT-01

2、Głowica drukarki termicznej FTP

3、Raspberry Pi pico

4、Maszyna obsługiwana przez monetę

Funkcja

Funkcja sterowania jest wyświetlany na ekranie szeregowym, główny interfejs wybiera piętro, po wejściu do głównego interfejsu wybiera miejsce parkingowe, w tym samym czasie będzie wyświetlać numer miejsca parkingowego w polu tekstowym w prawym górnym rogu, a następnie wybiera czas pobytu, to dwa przewijane selektory tekstowe, a następnie również sam będzie wyświetlać informacje o zamówieniu w polu tekstowym w prawym górnym rogu, zgodnie z ustaloną ceną jednostkową, która mnoży się z czasem pobytu, aby uzyskać całkowitą cenę. Następnie tylko wtedy, gdy miejsce parkingowe i czas pobytu są wybrane, można przejść do przycisku płatności, w przeciwnym razie jest to nieważne. Po wejściu do ekranu płatności, zostanie użyty akceptor 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żna wybrać opcję drukowania małego biletu, aby wydrukować numer miejsca i czas na papierze termicznym.

Obwód

Zaprojektowałem obwód samodzielnie w celu napędzania wielu komponentów, a ogólny schemat obwodu wygląda tak, górny lewy róg to gniazdo komunikacyjne i gniazdo zasilania, poniżej znajduje się brzęczyk (w rzeczywistości nie używany w obwodzie), po prawej stronie znajduje się dioda świecąca, a w prawym dolnym rogu znajduje się 30pin fpc do podłączenia głowicy drukującej.

[Obrazek: parking-management-system%286%29.webp]
 
Odpowiedź
#2
Kod

Kod:
from machine import UART,Pin

from time import sleep

import _thread

import rp2

from array import array

import ascii_ku

import speed_motor

from os import uname

#import sys

uart1 = 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 delay



coin = Pin(22, Pin.IN,Pin.PULL_UP)

coin_num = 0



motor = 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 motor

mov_bit = 0



PRINTER_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 -= 1

lins = 0

supper = 0

slower = 0



danjia = 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 += 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 += 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 += 1

def 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 = False



def floor2def():

    pass



def floor3def():

    pass



def 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()
 
Odpowiedź
#3
demo wideo

 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości