arduino termal yazıcı rs232 bağlantısı hakkında

tkay

Yeni Üye
Katılım
30 Mart 2023
Mesajlar
8
Merhaba arkadaşlar

elimde zebra gk420t termal yazıcı var. bilgisayara bağlayıp denedim yazıcı çalışıyor.
bu yazıcıyla arduino ile çıktı almak istiyorum.
rs232 modül ile yazıcıya arduino bağlantısı yaptım.
internette aşağıdaki kodlarla çıktı alınabileceği yazılmış.
ancak ben bu kod ve benzerleri ile yazıcıyı tetiklediğimde yazıcının led ışığı yanıp sönüyor ama çıktı almıyor.
Arduino ile yazıcıdan direk çıktı alabilir miyim?

C++:
void setup ()
{
    Serial.begin (9600);
}

void loop ()
{
    if (Serial.available ()> 0)
    {
        char c = Serial.read ();
        if (c == 'a') {
            Serial.print ("^ XA");
            Serial.print ("^ MMT");
            Serial.print ("^ PW280");
            Serial.print ("^ LL0120");
            Serial.print ("^ LS0");
            Serial.print ("FT189.454 A0I, 28.28; FH ^ FDTESTE ^ FS");
            Serial.print ("PQ1,0,1, Y ^ XZ");
            delay (1000);
        }
    }
}

C++:
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3

// set up a new serial port
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
int i=1;
int x;
char c;
String Berat;

void setup()  {
    // define pin modes for tx, rx:
    pinMode(rxPin, INPUT);
    pinMode(txPin, OUTPUT);

    // set the data rate for the SoftwareSerial port
    Serial.begin(9600);
    mySerial.begin(9600);
}

void loop()
{
    Serial.println (mySerial.available());
}
 
Last edited by a moderator:
Merhaba arkadaşlar

elimde zebra gk420t termal yazıcı var. bilgisayara bağlayıp denedim yazıcı çalışıyor.
bu yazıcıyla arduino ile çıktı almak istiyorum.
rs232 modül ile yazıcıya arduino bağlantısı yaptım.
internette aşağıdaki kodlarla çıktı alınabileceği yazılmış.
ancak ben bu kod ve benzerleri ile yazıcıyı tetiklediğimde yazıcının led ışığı yanıp sönüyor ama çıktı almıyor.
Arduino ile yazıcıdan direk çıktı alabilir miyim?

---------------------------------

#include <SPI.h>

void setup ()
{
Serial.begin (9600);
}

void loop ()
{
if (Serial.available ()> 0)
{
char c = Serial.read ();
if (c == 'a') {
Serial.print ("^ XA");
Serial.print ("^ MMT");
Serial.print ("^ PW280");
Serial.print ("^ LL0120");
Serial.print ("^ LS0");
Serial.print ("FT189.454 A0I, 28.28; FH ^ FDTESTE ^ FS");
Serial.print ("PQ1,0,1, Y ^ XZ");
delay (1000);
}
}
}

----------------------------------------------------------------

#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3

// set up a new serial port
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
int i=1;
int x;
char c;
String Berat;

void setup() {

// define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// set the data rate for the SoftwareSerial port
Serial.begin(9600);
mySerial.begin(9600);
}

void loop()
{
Serial.println (mySerial.available());

}
bir hata var programda.
uart hattı (tx ve rx) yazıcıya bağlıyorsan yazıcının karşıdan 'a' göndermesi lazım göndermiyorsa şayet if içine giremediği için komut göndermez
 
İki kod nasıl aynı işlevi yapıyor ki tamamen farklı kodlar. Ve ayrıca haberleşme yapılan pinleri input output olarak tanımlamanın mantıklı olduğunu düşünmüyorum
 
İki kod nasıl aynı işlevi yapıyor ki tamamen farklı kodlar. Ve ayrıca haberleşme yapılan pinleri input output olarak tanımlamanın mantıklı olduğunu düşünmüyorum
UCSR0B
UCSR0C
registerlerini kullanarak ilgili pinlere sen uart olarak çalışacaksın demek daha doğru bence.
 
Arduinonun yapısına tam hakim değilim ama genellikle işlemcilerde pin mode seçimlerinde 4 seçenek olur.
-input
-output
-alternate function
-analog
haberleşmede af kullanılır
 
Arduinonun yapısına tam hakim değilim ama genellikle işlemcilerde pin mode seçimlerinde 4 seçenek olur.
-input
-output
-alternate function
-analog
haberleşmede af kullanılır
ben artık o ekosistemden uzağa gidiyorum.
gömülü mantığını anladıkça geri kalanın ilgili işlemciye dair komut öğrenmek olduğunun farkına varıyorum.
böylelikle direkt üretici komutlarını kullandığımız için denetleyiciye daha hakim çalışıyoruz.

geçen günlerde çalışırklen uart üzerinden gelen veriyle interrupt yapmam gerekti veri kaçırmam söz konusuydu bununla normalde karışılaşssam farklı bir alternatif yürütürdüm ilave I/O vs.
avr'ler içinde dahili olarak yapabiliyormuş bunu her denetleyici yapabilir ütopik bir özellik değil fakat avr temel komutları ile çalışmıyor olsam büyük ihtimalle çırpınıp dururdum.

kestirsem bile veri kaçırdığım için el sıkışma yapmak zorunda kaldık gerçi :katil2: ama öğrenmiş oldum.
karşı taraf sabit bir veri gönderiyor benim kesme uyanıp ben kestim hazırım diyor karşı taraf o zaman başlıyor istenen veriyi aktarmaya.
 
UCSR0B
UCSR0C
registerlerini kullanarak ilgili pinlere sen uart olarak çalışacaksın demek daha doğru bence.
@Ahmet kafa karıştırma :)

Kısa kısa yazayım:
1- Evet. Arduino ya da TTL çıkış olan herhangi bir mikrokontrolör ile RS232 modülü kullanarak RS232 destekleyen bir yazıcıdan çıktı alabilirsiniz.

2- Paylaştığınız örnek kodlar başarılı olur mu bilmiyorum. Metin modu (grafik modu değil ) destekleyen her yazıcının desteklediği bir komut seti ya da setleri vardır. Bu komutlar yazıcının dökümanlarında belirtilir. Çıktı almak ya da yazıcıya başka işler yaptırmak (kağıt beslemek, sayfa başı yapmak vb.) için ilgili komutları uygun sırayla yazıcıya göndermeniz gerekir. İlk kodunuzdaki komut dizileri zebra gk420t ile uyumlu mu bilmiyorum. Dökümanlarını incelemek lazım. Bir de o kod çalışmaya başlamak için yazıcı ile olan seri bağlantıdan bir 'a' verisi gelmesini bekliyor. Yazıcının böyle bir tarzı mı var bilmiyorum ama çok mantıklı gelmedi.

3- Paylaştığınız ikinci kodun bu konuyla doğrudan ilgisi yok. O eksik kalmış bir seri port yönlendirme uygulaması gibi geldi bana. 2 numaralı GPIO girişine gelen seri verileri Tx pinine göndermek için yapılmış sanki ama şu anda veriyi değil gelen verinin uzunluğunu gönderiyor. Amacın Arduino'yu bir köprü gibi kullanıp, bilgisayarla hazırlanan komutların Arduino üzerinden RS232 hattı üzerinden yazıcıya gönderilmesi (ya da tam tersi yazıcı->Arduino->PC) olduğunu tahmin ediyorum ama başarılamamış.

Yapmanız gereken şu.
1- Yazıcının komut setini inceleyip sırasıyla hangi komutları (bazen ascii bazen byte olarka göndermeniz gerekebilir) bulacaksınız.
2- Onları gönderecek şekilde uygulamayı revize edeceksiniz.
3- Bu arada yazıcının da bir takım dönüş vrileri gönderiyor olması halinde onları da dinleyecek satırları ekleyeceksiniz.

Bence ilk adımdan başlayın. Devamında takıldığınız yerlere bakalım.
 
bir hata var programda.
uart hattı (tx ve rx) yazıcıya bağlıyorsan yazıcının karşıdan 'a' göndermesi lazım göndermiyorsa şayet if içine giremediği için komut göndermez
seri port ekranından a yazıp entr yaptığımızda yazıcıya kodu gönderiyor. yazıcının led ışığı yanıp sönüyor ama çıktı almıyor.
 
İki kod nasıl aynı işlevi yapıyor ki tamamen farklı kodlar. Ve ayrıca haberleşme yapılan pinleri input output olarak tanımlamanın mantıklı olduğunu düşünmüyorum
internette iki kodu da deneyip çıktı alınacağı söylenmiş. ben de iki farklı kodu da denediğimi belirtmek için buraya ekledim.
 
@Ahmet kafa karıştırma :)

Kısa kısa yazayım:
1- Evet. Arduino ya da TTL çıkış olan herhangi bir mikrokontrolör ile RS232 modülü kullanarak RS232 destekleyen bir yazıcıdan çıktı alabilirsiniz.

2- Paylaştığınız örnek kodlar başarılı olur mu bilmiyorum. Metin modu (grafik modu değil ) destekleyen her yazıcının desteklediği bir komut seti ya da setleri vardır. Bu komutlar yazıcının dökümanlarında belirtilir. Çıktı almak ya da yazıcıya başka işler yaptırmak (kağıt beslemek, sayfa başı yapmak vb.) için ilgili komutları uygun sırayla yazıcıya göndermeniz gerekir. İlk kodunuzdaki komut dizileri zebra gk420t ile uyumlu mu bilmiyorum. Dökümanlarını incelemek lazım. Bir de o kod çalışmaya başlamak için yazıcı ile olan seri bağlantıdan bir 'a' verisi gelmesini bekliyor. Yazıcının böyle bir tarzı mı var bilmiyorum ama çok mantıklı gelmedi.

3- Paylaştığınız ikinci kodun bu konuyla doğrudan ilgisi yok. O eksik kalmış bir seri port yönlendirme uygulaması gibi geldi bana. 2 numaralı GPIO girişine gelen seri verileri Tx pinine göndermek için yapılmış sanki ama şu anda veriyi değil gelen verinin uzunluğunu gönderiyor. Amacın Arduino'yu bir köprü gibi kullanıp, bilgisayarla hazırlanan komutların Arduino üzerinden RS232 hattı üzerinden yazıcıya gönderilmesi (ya da tam tersi yazıcı->Arduino->PC) olduğunu tahmin ediyorum ama başarılamamış.

Yapmanız gereken şu.
1- Yazıcının komut setini inceleyip sırasıyla hangi komutları (bazen ascii bazen byte olarka göndermeniz gerekebilir) bulacaksınız.
2- Onları gönderecek şekilde uygulamayı revize edeceksiniz.
3- Bu arada yazıcının da bir takım dönüş vrileri gönderiyor olması halinde onları da dinleyecek satırları ekleyeceksiniz.

Bence ilk adımdan başlayın. Devamında takıldığınız yerlere bakalım.
bilgilendirme için teşekkürler.
3. madde de anlaşımamış olması nedeniyle belirtmek istedim. arduino<>yazıcı şeklinde kullanmak istiyorum. bilgisayar olmadan çıktı almak istiyorum.
Bahsettiğiniz yazıcı dökümanını inceledim ama nasıl yapılması gerektiğiniz çözemedim.
Zebra etiket dizayn programında ZPL kod oluşturdum.
Kod oluştururken GK420t yazıcı için oluşturdum.
ama sonuç değişmedi.
kodu çalıştırdığımda yazıcının ledi yanıp sönüyor ama çıktı vermiyor.

ZPL kod

^XA
^PW420
^LS0
^LH0,0
^CF0,40^FO20,25^FDUnknown Vendor^FS
^FO15,0^BQN,2,6^FD##hCsck00000000000779/221a1^FS
^CFR,15^FO55,220^FD3877^FS
^CFR,15^FO180,70^FDTue 07:30 Nov 10^FS
^FO180,100^FDU. Surgeon^FS
^FO180,130^FDTotal hip^FS
^FO180,160^FDsigma^FS
^FO180,190^FDHip tool^FS
^FO180,220^FD1 of 2^FS
^XZ


sizden ricam örnek bir ZPL kod paylaşabilir misiniz?
 
merhaba şöyle bir durum sözkonusu;
bu kodu yazıcıya gönderdiğimde çıktı alabildim.
ancak yazıcıyı kapatıp açtığımda mutlaka arduinoyu da kapatıp açmam gerekiyor.
yani yazıcının enerjisi kesilip haberleşme kesildiğinde tekrar haberleşme için arduinonun da kapatılıp açılması gerekiyor.

Serial.println("^XA");
Serial.println("^MMT");
Serial.println("^PW793");
Serial.println("^LL0566");
Serial.println("^LS0");
Serial.println("^FT125,163^A0N,28,28^FH\^FD>;DENEME ^FS");
Serial.println("^FT553,428^A0N,28,28^FH\^FD>;DENEME ^FS");
Serial.println("^BY2,3,113^FT324,342^BCN,,Y,N");
Serial.println("^FD>;123456789012^FS");
Serial.println("^PQ1,0,1,Y^XZ");
 
merhaba şöyle bir durum sözkonusu;
bu kodu yazıcıya gönderdiğimde çıktı alabildim.
ancak yazıcıyı kapatıp açtığımda mutlaka arduinoyu da kapatıp açmam gerekiyor.
yani yazıcının enerjisi kesilip haberleşme kesildiğinde tekrar haberleşme için arduinonun da kapatılıp açılması gerekiyor.

Serial.println("^XA");
Serial.println("^MMT");
Serial.println("^PW793");
Serial.println("^LL0566");
Serial.println("^LS0");
Serial.println("^FT125,163^A0N,28,28^FH\^FD>;DENEME ^FS");
Serial.println("^FT553,428^A0N,28,28^FH\^FD>;DENEME ^FS");
Serial.println("^BY2,3,113^FT324,342^BCN,,Y,N");
Serial.println("^FD>;123456789012^FS");
Serial.println("^PQ1,0,1,Y^XZ");
yazıcı uyandığında mutlaka uart hattına ben uyandım diyordur bunu kullanarak bir yeniden başlatma oluşturmalısın
 
Bu modülden alıp kullandım sorun kalmadı. şu anda sorunsuz çıktı alabiliyorum.


1680848897837.png
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,953
Mesajlar
118,765
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top