IoT

Raspberry PipicoとSTONETFTLCDをベースにした駐車場管理システム用のサーマルプリントヘッド

簡単な紹介

サーマルプリンターは私たちの日常生活で非常に一般的であり、レストラン、駐車場、ショッピングでのサーマルプリンターの例があります。 この記事では、駐車システムでのサーマルプリンターのアプリケーションに焦点を当てます。

Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。

使用する材料

  • ストーンSTWI101WT-01
  • FTPサーマルプリンターヘッド
  • ラズベリーパイピコ
    • コイン式機械
    演算制御機能はシリアル画面に表示され、メインインターフェースはフロアを選択し、メインインターフェースに入った後、駐車スペースを選択すると同時に、右上のテキストボックスに駐車スペース番号を表示し、次に滞在時間は、XNUMXつのスクロールテキストセレクターです。また、滞在時間に合計価格を掛けた固定単価に従って、右上のテキストボックスに注文情報が表示されます。 その後、駐車スペースと滞在時間を選択した場合にのみ、支払いボタンに移動できます。それ以外の場合は無効です。 支払い画面に入った後、コインアクセプターが使用されます。 次に、投入するコインの数とすでに投入されているコインの数が画面に表示されます。コインが投入されると、支払い成功メッセージが表示されます。 次に、小さなチケットを印刷して、感熱紙に場所の番号と時刻を印刷することを選択できます。設計プロセス最初は使いたかった ラズベリーパイピコ 小さなプリンターを作るために。 それから、コンポーネントを選択する過程で、サーマルプリンターの方が実現しやすいと思います。プログラムを決定した後、ハードウェアを購入し始めました。 実際、オンライン調達の過程で、優れたドライバー回路を備えた多くのサーマルプリンターがあり、それらのほとんどはstmのチップを使用して作成されており、独自の一連の指示に従って設計されていることがわかりました。 たとえば、彼の指示を使用して、プリンターに文字を印刷させたり、紙を印刷させたりしますが、このプリンターの実用性は非常に高いですが、学ぶ価値はありません。 回線のシリアルポートを介して命令を送信することで、プリンタを操作できます。 だからプリントヘッドを買って自分で開発しようと思いました。 次に、プリントヘッドについて、ftpサーマルプリントヘッドを選択しました。ftpサーマルプリントヘッド
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • このプリントヘッドは国際的に入手可能で、基本原理は似ています。 左がステッピングモーター。 それから真ん中の頭は6つの加熱ユニットです。 各加熱ユニットには 64 の加熱ポイントがあります。 つまり、合計 384 の加熱ポイントです。 それから下はラッチです。 ラッチの下にはシフトレジスタがあります。 最後に、提供されるクロック信号があります。 したがって、全体の動作原理は、プリント ヘッドにクロック信号を提供し、クロック周期ごとにデータを送信することです。384 個のクロック信号と 384 個のデータを送信した後、シフト レジスタのデータはラッチに格納されます。 その後、ラッチはローレベルに設定されます。 次に、384 の加熱ポイントは、各データが 0 か 1 かによって、加熱するか加熱しないかを選択します。同時に、ステッピング モーターを回転させて感熱紙を駆動し、目的の文字をデザインします。サーマル プリントを取得したら、頭、先に進んでデータシートを求めたところ、30ピンのfpcケーブルでした。 したがって、ピコに直接接続するのは明らかにあまり便利ではありません。 そこで、バックプレーン回路を設計したほうがよいと考えました。 STONEシリアル画面 は12v電源です。次に、基準値のサーマルプリントヘッドの印刷電圧が7.6v、最大値が8vであることを確認し、約7.6vの電圧を供給します。 また、ロジック電圧は3.3vで、Raspberry Pi picoの最大サポートは5v電源で、出力電圧は3.3vです。電源設計では、12つのdcdc、7.6vの電源、5つのdcdc出力3.3vを使用できます。サーマルプリントヘッドに電力を供給し、他のdcdc出力12vをピコに供給し、次にピコからXNUMXvを使用してサーマルプリントヘッドのロジック電圧に電力を供給します。 次に、XNUMXvがシリアル画面に直接進みます。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • ちなみに、そのサーマルプリントヘッドのステッピングモーターも駆動する必要があります。 統合されたダーリントン チューブ インテグレーターがあります。 でも大きすぎるし、ストレートなプラグインなので、ドライバチップを買ってください。 それから、駆動モーターのこの側面もOKです。印刷にはフォントのデザインが必要です。基本的に、誰もがフォントの保存にspiフラッシュを使用しています。これは巨大なプロジェクトです。 asciiコードだけが100を超えているので、別のSPFフラッシュを購入する必要があります。 すると、全体の計画はほぼこのようになります。
    STONE Designer(GUIデザイナーソフト)から:https://www.stoneitech.com/support/download/software
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 回路を設計するその後、以下が回路の設計を開始しました。 最初に電源を見つけました。実際、最初は2492端子の電圧レギュレーターを使用していました。回路が単純なため、作成後、デバッグ中の加熱状況がより深刻になり、触ると非常に熱くなったため、使用するように変更しました。 dcdc。 回路図を作成するには、チップのデータシートに直接従ってください。 ここでmt2を選択しましたが、重要なパラメータはプリントヘッドの動作電流であると無視しました。このチップの最大出力電流は2.3Aですが、プリントヘッドの動作電流は0.3A、差はXNUMXAで、使用することもできます。ただし、効率はそれほど高くありません。具体的な効果については後で説明します。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 次に、購入したモータードライバーチップはlv8548です。プリントヘッドのデータシートを参照してください。このデータシートには、タイミングに応じたステッピングモータードライブのタイミング図があり、XNUMX方向のpwm信号を提供します。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 次に、by25q32bsのフラッシュチップがあります。32Mbitの容量は非常に大きく、ピコに接続されており、ピコからの呼び出しを待っています。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • その後、全体の回路図は次のようになります。左上隅が通信ソケットと電源ソケット、下にブザー(実際には回路では使用されていません)、右側に発光ダイオード、そして右下隅は、プリントヘッドを接続するための30ピンfpcです。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 完了して使用できるようになった後、以下に示すように、Raspberry Pi pico用のピンヘッダーレセプタクルをボードに残して、直接接続できます。
    ラズベリーパイピコ
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 最初にピコとプリントヘッドに接続されていない電源をオンにし、dcdcの出力電圧を測定します。通常の場合、一方は約7.5v、もう一方は約5vです。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 次に、プリントヘッド、シリアル画面、ピコを接続し、論理電圧が約3.3vであることを測定します。問題がなければ、プログラムを作成できます。
    演奏曲目最初にステッピング モーターを調整するつもりです。この部分は簡単に調整できます。データ シートのタイミング図を見てください。8 クロック周期です。クロック周期ごとに、モーターの 8 つのピンに個別にロジック信号を与える必要があります。5 周期後、モーターは上げてから速度を調整しますが、途中でデューティ比を調整するために遅延を追加する必要があります。そうしないと回転が速すぎます。私が設定した遅延時間は約XNUMXmsで、回転させた後にレベルを与える必要がありますそうしないと、モーターが回転していないように見えますが、実際には内部コイルはまだ電源が入っています。長い時間が経過すると、焦げた匂いを嗅ぐことができます。次に、関数を記述し、本体をループに入れます。サイクル数は、モーターの回転の長さ、関数が少し長く見えるので、別の場所に置いて呼び出しを待ちます。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • これはいくつかの変更を加えた後の関数です。速度と期間はメイン プログラムで送信されます。 まだまだ最適化が必要ですね。あとはプリントヘッドの調整のポイントですが、この部分が私には難しく、クロック信号が必要で、データシートは最大8Mで書かれており、8M程度の信号が必要だと思っていました。周波数、難しいです。最初に io フリップ レベルで周波数を測定しましたが、差が大きすぎます。 そして、pio を使いたいと思い、丸一日研究しましたが、結果は良くありません。私の個人的なスキルは限られています。おそらく、rp2040 チップのマニュアルを深く研究する必要があります。このようなワークフローでは、データ入力 384 ピン、ラッチ 1 ピン、クロック信号 1 ピン、1 印刷ユニット ピンを初期化し、ラッチに加えて、他のすべてをローにプルダウンし、サイクル 6 の後、384 クロック周期内に 0 つのデータを送信します。ラッチを 6 に設定し、1 印刷ユニットを XNUMX に設定すると、どのポイントにどのポイントが加熱されるかのデータがあります。 セットの実装後、レベルを引き戻します。その後、プログラムを作成してテストを開始した後、実際には機能しませんでした。実際には、あまりにも多くの印刷ユニットが制御されていましたが、電流が十分ではなかったため、出力を減らすように変更しました。 XNUMX つの印刷ユニットをハイレベルにして、再度テストします。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • それは本当に働いています! 水平線を印刷しました。つまり、クロック周波数に下限がないことを意味し、ステッピング モーターを実行して垂直線を印刷できます。 pico デュアル スレッドを実行し、もう XNUMX つのスレッドでモーターを同期実行させ、プログラムを記述して実行します。 縦線が出ます。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 水平線と垂直線で対角線を取得し、64つの印刷単位に32ポイントがあることに注意してください。これは、32などの長さを定義し、384 x 64期間を循環し、各期間は最初の1データのみを320に設定します。次の0データを32に設定し、最初のユニットで毎回64回ポイントを印刷してから増分サイクルし、ステッピングモーターの速度と組み合わせて調整し、最後に32 * XNUMXサイズを調整します。対角線の場合、最初に文字Zを綴ることもできます。  
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 次に、プログラムの概要があります。単語を印刷する場合は、最初にフォントを実行する必要があります。 最初に大文字のA、32 * 32サイズ、定義のリストを実行します。ここではpin.value()を使用して実行する予定なので、フォントを作成してから、32行32列のバイナリ値を使用して呼び出します。シフトを実行するために取り出してから、pin.value()に渡すので、これが実装のプロセスです。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 0を背景、1を前景として、実際の実装プロセスは次のようになります。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 最も外部の大きなサイクル32は、32行のサイクルを表します。つまり、32行を印刷します。次に、内部の最初の32サイクルは、最初の加熱ユニットの半分を加熱し、残りの352周期は0に設定されます。次に、毎回1から31までマイナス0を計算すると、左から右に加熱する必要があるポイントの最初の行を数え、ラッチセット384と加熱ユニットセット0を実行してから、1周期ごとに完了することができます。印刷して、32回ループした後にXNUMXつのAワードを出力できます。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • まだ大胆な、この種のドットマトリックスワード、オンラインで直接実行できるツールがあります。前面に0bを加えてから背面にコンマを追加し、独自のアイデアに従って再生します。フォントは実際には最初は意図されたものです。フラッシュチップに収納されていますが、長時間調整しても開けません。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 問題がどこにあるのかわかりません。もう一度調整する時間がありますが、ピコ自体に16メガビットサイズのフラッシュがあり、ASCIIライブラリを保存するだけで十分です。
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 辞書で定義し、別の部分に入れ、メインプログラムで呼び出します。 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.
  • Raspberry Pi pico および STONE TFT LCD IOT PlatoBlockchain Data Intelligence に基づく駐車管理システム用のサーマル プリント ヘッド。垂直検索。あい。
  • 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()
  • 出典:Plato Data Intelliigence