IOT

Raspberry Pi pico ve STONE TFT LCD tabanlı bir park yönetim sistemi için termal baskı kafası

kısa bir giriş

Termal yazıcılar günlük hayatımızda çok yaygındır ve termal yazıcıların restoranlarda, otoparklarda ve alışveriş merkezlerinde örnekleri vardır. Bu makale, termal yazıcıların park sistemlerinde uygulanmasına odaklanacaktır.

Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.

Kullanılacak malzemeler

  • TAŞ STWI101WT-01
  • FTP termal yazıcı kafası
  • Ahududu Pi piko
    • Bozuk parayla çalışan makine
    işlevKontrol fonksiyonu seri ekranda görüntülenir, ana arayüz katı seçer, ana arayüze girdikten sonra park alanını seçer, aynı zamanda sağ üstteki metin kutusunda park yeri numarasını görüntüler, ardından park yeri numarasını seçer. kalış süresi, iki kayan metin seçicidir, daha sonra aynısı, toplam fiyatı almak için kalış süresi ile çarpan sabit birim fiyatına göre, sağ üstteki metin kutusundaki sipariş bilgilerini görüntüler. Daha sonra sadece park yeri ve konaklama süresi seçildiğinde ödeme butonuna gidebilirsiniz aksi halde geçersizdir. Ödeme ekranına girdikten sonra jeton alıcısı kullanılacaktır. Daha sonra ekran, konacak jeton sayısını ve halihazırda konulmuş jeton sayısını gösterecektir. Madeni paralar konduktan sonra, bir ödeme başarılı mesajı görüntülenecektir. Ardından, termal kağıda yer numarasını ve saati yazdırmak için küçük bir bilet basmayı seçebilirsiniz.tasarım süreciİlk başta kullanmak istedim Ahududu Pi piko küçük bir yazıcı yapmak için. Daha sonra termal yazıcının daha uygun olduğunu düşündüğüm bileşenleri seçme sürecinde, programı belirledikten sonra donanım satın almaya başladım. Aslında, çevrimiçi satın alma sürecinde, iyi sürücü devrelerine sahip birçok termal yazıcı olduğunu, bunların çoğunun stm çipi kullanılarak yapıldığını ve kendi yönergeleri ile tasarlandığını buldum. Örneğin, yazıcının karakterleri yazdırmasına veya kağıda gitmesine izin vermek için talimatlarını kullanarak, ancak bu yazıcının pratikliği çok yüksektir, ancak öğrenmenin bir değeri yoktur. Hat üzerindeki seri port üzerinden talimat göndermektir, yazıcıyı manipüle edebilirsiniz. Bu yüzden bir baskı kafası alıp kendim geliştireceğimi düşündüm. Sonra baskı kafası hakkında bir ftp termal baskı kafası seçtim.ftp termal baskı kafası
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Bu yazıcı kafası uluslararası alanda bulunmalıdır, temel prensipler benzerdir. Sol taraf bir step motordur. Daha sonra orta kafa 6 ısıtma ünitesidir. Her bir ısıtma ünitesi üzerinde 64 adet ısıtma noktası bulunmaktadır. Yani toplam 384 ısıtma noktası. Sonra aşağıda bir mandal var. Mandalın altında bir kaydırma yazmacı bulunur. Son olarak sağlanması gereken bir saat sinyali vardır. Yani tüm çalışma prensibi, yazıcı kafasına bir saat sinyali sağlamak ve ardından her saat periyodunda bir veri göndermektir; 384 saat sinyali ve 384 veri gönderildikten sonra, kaydırma yazmacındaki veriler mandalda saklanacaktır. Daha sonra mandal düşük seviyeye ayarlanır. Daha sonra 384 ısıtma noktası, her verinin 0 veya 1 olmasına göre ısıtmayı veya ısıtmamayı seçecektir. Aynı zamanda, istenen karakteri tasarlamak için termal kağıdı sürmek için step motorun dönmesini sağlayın.Termal baskıyı aldıktan sonra kafa, devam ettim ve bir veri sayfası istedim ve bu 30 pinli bir fpc kablosuydu. Dolayısıyla doğrudan pico'ya bağlanmak pek uygun değil. Bu yüzden bir arka panel devresi tasarlamanın daha iyi olacağını düşündüm. TAŞ seri ekran 12v güç kaynağı ve ardından termal baskı kafası baskı voltajına bakıyorum referans değeri 7.6v, maksimum değer 8v, sonra yaklaşık 7.6v voltaj sağlıyorum. Ayrıca bir mantık voltajı 3.3v'dir ve daha sonra Raspberry Pi pico maksimum 5v güç kaynağını destekler ve 3.3v çıkış voltajına sahiptir, daha sonra güç kaynağı tasarımı 12v güç kaynağı, bir dcdc çıkışı 7.6v ile iki dcdc kullanabilir termal baskı kafasına güç sağlamak için, diğer dcdc çıkışı 5v'yi pico'ya ve ardından termal baskı kafası mantık voltajına güç sağlamak için pico'dan 3.3v'yi kullanın. Ardından 12v doğrudan seri ekrana giden yolu açar.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Bu arada, o termal yazıcı kafasının step motorunun da çalıştırılması gerekiyor. Entegre bir Darlington tüp entegratörüm var. Ama çok büyük ve düz bir eklenti olduğundan bir sürücü çipi satın almanız yeterli. O zaman tahrik motorunun bu yönü de uygundur. Baskı, bir yazı tipinin tasarımını gerektirir, temel olarak herkes yazı tipi depolama için spi flash kullanır ki bu çok büyük bir projedir. Yalnızca ascii kodu 100'ün üzerinde olduğundan başka bir SPF flaşı satın almanız gerekir. O zaman tüm planlama neredeyse bu şekilde.
    STONE Designer (GUI Designer yazılımı)İtibaren:https://www.stoneitech.com/support/download/software
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Devreyi tasarlayınArdından aşağıdaki devreyi tasarlamaya başladı. İlk önce güç kaynağını bulun, aslında başlangıçta üç terminalli bir voltaj regülatörü kullandım, çünkü devre basit, yapıldıktan sonra, hata ayıklama sırasında ısıtma durumu daha ciddi, dokunmak çok sıcak, bu yüzden kullanmaya başladım dcdc. Devre şemasını yapmak için doğrudan çip veri sayfasını takip edin. Burada mt2492'yi seçtim, ancak önemli bir parametreyi göz ardı ettim, yazıcı kafası çalışma akımı, bu çipin maksimum çıkış akımı 2A, ancak yazıcı kafası çalışma akımı 2.3A, 0.3A fark, ayrıca kullanılabilir, ancak verimlilik o kadar yüksek değil, daha sonra spesifik etki hakkında konuşacağız.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • O zaman satın aldığım motor sürücü çipi lv8548, üzerinde dört yönlü bir pwm sinyali sağlamak için zamanlamasına göre bir step motor sürücü zamanlama şemasına sahip olan yazıcı kafası veri sayfasına bakın.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Sonra flash çip, by25q32bs, 32Mbit kapasitesi oldukça büyük ve pico'ya bağlı, pico tarafından çağrılmayı bekliyor.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Bundan sonra genel devre şeması bu şekilde, sol üst köşe iletişim prizi ve güç kaynağı prizi, altta buzzer (aslında devrede kullanılmamaktadır), sağda ışık yayan diyot ve sağ alt köşe, yazıcı kafasını bağlamak için 30 pinli bir fpc'dir.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Ahududu Pi pico için panoya bir pin başlık yuvası bırakarak, aşağıda gösterildiği gibi yapılır ve kullanılabilir, doğrudan takabilirsiniz.
    Ahududu Pi pico
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Gücü açın, önce pico'ya ve yazıcı kafasına bağlı değil, dcdc'nin çıkış voltajını ölçün, normal durumda biri yaklaşık 7.5v, diğeri yaklaşık 5v'dir.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Ardından yazıcı kafasını, seri ekranı ve pico'yu bağlayın, mantık voltajını ölçün yaklaşık 3.3v, sorun yok sonra programı yazabilirsiniz.
    ProgramıÖncelikle step motoru ayarlamayı düşünüyorum, bu kısmın ayarlanması kolaydır, veri sayfasındaki zamanlama şemasına bakın, 8 saat periyodu, her saat periyodu ayrı ayrı motorun dört pinine bir mantık sinyali vermeli, 8 periyottan sonra motor açın ve ardından hızı ayarlayın, ancak ortada görev oranını ayarlamak için bir gecikme eklememiz gerekiyor, aksi takdirde çok hızlı dönüyor, ayarladığım gecikme süresi yaklaşık 5 ms ve sonra dönmesine izin verdikten sonra seviyeyi şu şekilde vermelisiniz: düşük, aksi takdirde motor dönmüyor gibi görünüyor, aslında iç bobin hala güçte, uzun bir süre sonra yanık kokusunu duyabilirsiniz. Sonra fonksiyonu yazın, gövdeyi bir döngüye sokun, döngü sayısı döngü sayısını temsil eder. motor dönüş uzunluğu, fonksiyon biraz uzun görünüyor, başka bir yere koyun ve çağrıyı bekleyin.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Bu fonksiyon birkaç değişiklikten sonra hız ve sürenin ana programa aktarılmasını sağlayacaktır. Hala çok fazla optimizasyona ihtiyacı var. O zaman yazdırma kafasını ayarlamanın noktası, bu kısım benim için zor, bir saat sinyaline ihtiyacı var, veri sayfası maksimum 8M'de yazılıyor, yaklaşık 8M'lik bir sinyale ihtiyacı olduğunu düşündüm. frekans, zor, önce frekansı io flip seviyeyle ölçtüm, fark çok fazla. Ve sonra pio kullanmak istiyorum ve bütün gün araştırma yaptım ama sonuç iyi değil, kişisel becerilerim sınırlı, muhtemelen rp2040 çip kılavuzunu derinlemesine incelemem gerekiyor. Sonra denemek için seviye 384 dönemlerini çevirin, bu bir bunun gibi bir iş akışı, veri girişi 1 pinini, mandalı 1 pinini, saat sinyalini 1 pinini, 6 yazdırma ünitesi pinini başlatın ve ardından mandala ek olarak diğer tüm düşük çekmeleri yapın ve ardından döngüyü tamamladıktan sonra bir saat periyodu içinde bir veri gönderin 384 mandalı 0'a ayarlamak, 6 baskı ünitesini 1'e ayarlamak ve ardından hangi noktanın hangi noktanın ısıtılacağı verisine sahip olduğu. Setin uygulanmasından sonra seviyeyi geri çekin. Daha sonra program yazıp test etmeye başladıktan sonra gerçekten işe yaramadı çünkü aslında çok fazla baskı ünitesi kontrol edildi ancak akım yeterli değildi, daha sonra daha az verecek şekilde değiştirin iki baskı ünitesini yüksek seviyeye getirin ve tekrar test edin.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Gerçekten işe yarıyor! Yatay bir çizgi yazdırdı. Bu, saat frekansında herhangi bir alt sınır olmadığı anlamına gelir, o zaman step motoru çalıştırarak dikey bir çizgi yazdırabilirsiniz. pico çift iş parçacığı, ardından diğer iş parçacığının motoru senkronize çalıştırmasına izin verin, ardından programı yazın ve çalıştırın. Dikey çizgi çıkıyor.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Yatay ve dikey çizgilerle, daha sonra çapraz bir çizgi alın, bir baskı ünitesinin 64 gibi bir uzunluk tanımlayan 32 nokta olduğuna dikkat edin ve ardından 32 kez 384 periyot döngü yapın, her periyot sadece ilk 64 veriyi 1'e ayarlayın ve sonraki 320 veriyi 0'a ayarlayın ve ardından her seferinde yalnızca bir noktayı yazdırmak için ilk ünitede 32 kez ayarlayın ve ardından kademeli motorun hızıyla birlikte kademeli olarak döngü yapın ve son olarak 64 * 32 boyutunu ayarlayın. çapraz çizgi, önce Z harfini de heceleyebilirsiniz.  
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • O zaman programın ana hatları orada, eğer kelimeyi yazdırmak istiyorsanız önce yazı tipini yapmanız gerekir. Önce bir büyük harf A, 32 * 32 boyutunda, tanımların bir listesiyle yapın, burada pin.value () ile yapmayı planlıyorum, bu yüzden yazı tipini yapın, ardından çağrılacak 32 satır ve 32 sütun ikili değer kullanın, bir vardiya yapmak için dışarı çıkın ve ardından pin.value () öğesine geçin, bu yüzden uygulama süreci budur.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • 0 arka plan ve 1 ön plan olarak, gerçek uygulama süreci şöyle görünür.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • En harici büyük döngü 32, 32 satırlık döngüyü temsil eder, yani 32 satır yazdırır ve ardından içerideki ilk 32 döngü, ilk ısıtma ünitesinin yarısını ısıtmaktır, ardından kalan 352 periyot 0'a ayarlanacaktır ve sonra 1'den 31'a kadar her seferinde eksi 0, ısıtılması gereken noktaların ilk satırını soldan sağa sayabilirsiniz ve ardından mandal 384 ve ısıtma ünitesi 0'i ayarladıktan sonra tamamlanması gereken her 1 periyotta bir yazdırabilir ve ardından tekrar 32 kez döngü yaptıktan sonra bir A kelimesi çıktı.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Yine de cesur, bu tür nokta vuruşlu kelime, çevrimiçi olarak doğrudan yapılabilecek araçlar var, ön artı 0b ve sonra arkaya bir virgül ekleyin ve sonra kendi fikirlerinize göre oynuyorsunuz, yazı tipi aslında başlangıçta olması amaçlanmıştır. flash çipte saklanıyor, ancak uzun bir süre ayarladım hala açılamıyor.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Sorunun nerede olduğunu bilmiyorum, zamanım olduğunda tekrar ayarlayacağım, iyi olan pico'nun kendisinin 16mbit boyutunda flash olması, bir ascii kütüphanesini saklamak hala yeterli, o zaman çok saklandım.
  • Raspberry Pi pico ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. Ai.
  • Bunu bir sözlükle tanımlayın, ayrı bir parçaya koyun ve ana programa geri çağırın. 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 ve STONE TFT LCD IOT PlatoBlockchain Veri Zekasını temel alan bir park yönetim sistemi için termal yazıcı kafası. Dikey Arama. 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()
  • Kaynak: Plato Veri İstihbaratı