IOT

Термодрукована головка для системи керування паркуванням на основі Raspberry Pi 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 принтера
  • Raspberry Pi Pico
    • Монетний автомат
    функціяФункція керування відображається на послідовному екрані, основний інтерфейс вибирає поверх, після входу в основний інтерфейс вибирає місце для паркування, водночас він відображатиме номер паркувального місця у текстовому полі у верхньому правому куті, потім вибирає час перебування, це два прокручуваних текстових селектора, потім те ж саме відображатиме інформацію про замовлення в текстовому полі у верхньому правому куті відповідно до фіксованої ціни за одиницю, яка помножується на час перебування, щоб отримати загальну ціну. Тоді лише коли вибрано місце для паркування та час перебування, можна перейти до кнопки оплати, інакше вона недійсна. Після входу на екран оплати буде використовуватися монетоприймач. Потім на екрані відобразиться кількість монет, які потрібно покласти, і кількість монет, які вже введені. Після того, як монети були введені, з’явиться повідомлення про успішність платежу. Потім ви можете надрукувати невеликий квиток, щоб надрукувати номер місця та час на термопапері.Процес проектуванняСпочатку я хотів використати Raspberry Pi Pico зробити маленький принтер. Потім у процесі підбору комплектуючих я вважаю, що термопринтер зручніше досягати, після визначення програми я почав закуповувати обладнання. Насправді, в процесі онлайн-закупівлі я виявив, що існує багато термопринтерів з хорошими схемами драйверів, більшість з них виготовлені за допомогою чіпа 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 це джерело живлення 12 В, а потім я дивлюся на напругу друкуючої термодрукарської головки з еталонним значенням 7.6 В, максимальне значення становить 8 В, а потім поставлю напругу приблизно 7.6 В. Він також має логічну напругу 3.3 В, а потім Raspberry Pi pico з максимальною підтримкою джерела живлення 5 В і має вихідну напругу 3.3 В, тоді в конструкції блоку живлення можна використовувати два постійних струму, з джерелом живлення 12 В, один вихід постійного струму 7.6 В. для живлення термодрукованої головки, інший вихід постійного струму 5 В на піко, а потім використовуйте 3.3 В від піко для живлення логічної напруги термодрукарської головки. Тоді 12 В ведуть безпосередньо до послідовного екрану.
  • 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 (програмне забезпечення GUI Designer)Desde: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.
  • Спроектуйте схемуПотім наступне приступило до проектування схеми. Спочатку знайдіть джерело живлення, насправді, спочатку я використовував триполюсний стабілізатор напруги, тому що схема проста, після її виготовлення ситуація з нагріванням була серйознішою під час налагодження, дуже гаряча на дотик, тому я перейшов на використання dcdc. Просто дотримуйтесь техніку мікросхеми безпосередньо, щоб зробити принципову схему. Тут я вибрав mt2492, але проігнорував важливий параметр - робочий струм друкуючої головки, максимальний вихідний струм цього чіпа 2 А, але робочий струм друкуючої головки 2.3 А, різниця 0.3 А, його також можна використовувати, але ефективність не така висока, про конкретний ефект поговоримо пізніше.
  • 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, див. таблицю даних друкуючої головки, яка має часову діаграму приводу крокового двигуна, відповідно до його синхронізації, щоб забезпечити його чотиристороннім ШІМ-сигналом.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Далі йде флеш-чіп з 25q32bs, ємністю 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.
  • Після цього загальна принципова схема виглядає так, у верхньому лівому куті — розетка зв’язку та розетка живлення, нижче — зумер (фактично не використовується в схемі), праворуч — світлодіод і у нижньому правому куті є 30-контактний 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.
  • Після завершення роботи і використання можна використовувати, як показано нижче, залишаючи на платі роз’єм для роз’єму для Raspberry Pi Pico, який можна безпосередньо підключити до нього.
    Піко Raspberry Pi
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Увімкніть живлення, спочатку не підключене до піко та друкуючої головки, виміряйте вихідну напругу постійного постійного струму, у звичайному випадку один становить близько 7.5 В, інший - близько 5 В.
  • 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.
  • Потім підключіть друкувальну головку, послідовний екран і піко, виміряйте логічну напругу близько 3.3 В, без проблем ви можете написати програму.
    програмаЯ маю намір спочатку відрегулювати кроковий двигун, цю частину легко налаштувати, подивіться на часову діаграму в таблиці даних, 8 тактових періодів, кожен тактовий період повинен окремо давати чотири контакти двигуна логічний сигнал, після 8 періодів двигун буде збільшити, а потім відрегулювати швидкість, але в середині ми повинні додати затримку, щоб налаштувати коефіцієнт завантаження, інакше він обертається занадто швидко, час затримки, який я встановив, становить близько 5 мс, а потім, дозволивши йому обертатися, ви повинні надати рівень низький, інакше двигун, здається, не обертається, насправді внутрішня котушка все ще ввімкнена, через тривалий час ви можете відчути запах гару. Потім запишіть функцію, помістіть тіло в цикл, кількість циклів представляє довжина обертання двигуна, функція виглядає трохи довгою, поставте її десь окремо та чекайте дзвінка.
  • 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, а потім, яка точка має дані, яка точка буде нагріватися. Після впровадження набору поверніть рівень назад. Потім після того, як програму було написано та розпочато тестування, вона справді не спрацювала, насправді тому, що контролювалося занадто багато одиниць друку, але струму було недостатньо, потім змініть його, щоб дати менше два друкарські блоки високого рівня та перевірте ще раз.
  • 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 стовпці двійкових значень, які потрібно викликати, take out, щоб зробити зсув, а потім перейти до 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, а потім ви можете надрукувати, а потім вивести одне слово A після повторного циклу 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.
  • Все ще жирне, таке матричне слово, є інструменти онлайн, які можна зробити безпосередньо, передній плюс 0b, а потім додайте кому на зворотному боці, а потім ви граєте відповідно до ваших власних ідей, шрифт насправді спочатку призначений для зберігається у флеш-чіпі, але я довго налаштовую його все одно не можна відкрити.
  • 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 має флеш розміром 16 Мбіт, зберігати бібліотеку 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()
  • Джерело: Plato Data Intelliigence