Arduino ile Seri İletişim ve Serial Monitor Kullanımı

Seri İletişim

Seri iletişimin ayrıntılarına girmeden Arduino ile nasıl bilgisayarla veya başka harici birimlerle iletişim kurabileceğimizi göreceğiz. Seri iletişim en basit anlamıyla dijital bilginin yani 1 ve 0’ların tek bir hat üzerinden peşi sıra iletilmesi anlamına gelmektedir.

Arduino’nun üzerinde bulunan veya benzeri birçok mikrodenetleyici üzerinde seri iletişim birimi bulunmaktadır. Bu birimler vasıtasıyla seri iletişim yürütülür. Bu birime UART / USART adı verilir.

Seri iletişimde belirli bir format kullanılmaktadır. Bu formatta veriler baytlar halinde iletilir. Her bir bayt için belirli bir başlangıç ve bitiş bitleri de ayrıca yer alır. En çok kullanılan 1 bit start, 8 bit veri ve 1 bit stop biti formatıdır. Yani 1 bayt veriyi iletmek için 10 bit gönderilir.

Bilgisayarımızdan Arduino’yu programlarken de seri iletişimi farkında olmadan kullanmış oluruz. Yazdığımız program derlendikten sonra seri iletişim yoluyla Arduino’nun hafızasına aktarılır.

Arduino’da seri iletişim için bir kütüphane bulunuyor. Serial adı verilen bu kütüphanenin en çok kullanılan fonksiyonlarından print ve println‘in kullanılışını görelim:

Seri İletişim ile Veri Gönderme

Arduino ile seri iletişimi en basit haliyle aşağıdaki örneği çalıştırarak görelim:

/*
 Seri İletişim Örneği

 <http://arduinoturkiye.com> 
 
 */

void setup()
{ 
  //Seri haberleşme hızını ayarlıyoruz
  Serial.begin(9600);
} 

int sayac = 0;

void loop()
{ 
  Serial.print("Seri haberlesme: ");
  Serial.println(sayac);
  sayac++;
  delay(1000);
}

Seri haberleşme ile Arduino’dan gönderilen verileri görüntülemek için Serial Monitor eklentisini kullanabiliriz:

 

Programımızın Serial Monitor’de görüntülenen çıktısı şu şekilde olacaktır:

Programımızda setup() fonksiyonu içerisinde  Serial.begin(9600) şeklinde çağırdığımız fonksiyon ile iletişim hızını ayarlaıyoruz. Seri haberleşmede iletişim hızı “baud” adı verilen bir değerle ifade edilir. Bu değer saniyede gönderilen bit sayısını ifade eder (bits per second). Serial monitor’ün sağ alt köşesindeki değerle programımızdaki değerin aynı olduğuna dikkat edin. Arduino’dan gönderdiğimiz verileri düzgün görüntüleyebilmek için bu değerler aynı olmalıdır.

Serial.print() ve Serial.println() fonksiyonları ile string’leri doğrudan yollayabiliyoruz. İki fonksiyon arasındaki tek fark println() fonksiyonunun string sonuna bir de satır sonu karakteri eklemesidir. Böylelikle veriler Serial monitor ile alt alta görüntülenebilir. Bu fonksiyonlara string parametreler verilebildiği gibi int, float türünde sayılar da verilebilir.

Serial Monitor seri haberleşmeden ASCII formatında gelen verileri görüntülememizi sağlar. ASCII tablosunda her bir karaktere karşılık gelen sayısal bir değer bulunur. Seri haberleşmede bu değer gönderilir ve Serial Monitor (ya da benzeri başka programlar) bu sayılara karşı gelen karakterleri görüntüler. Yani aslında gelen veriler 0-255 arasında (8 bit) değerlerden ibarettir. ASCII Tablosuna şuradan bakabilirsiniz.

Bu yazıyla Arduino seri haberleşme kütüphanesine kısa bir giriş yapmış olduk. İlerleyen yazılarda diğer seri haberleşme fonksiyonlarına göz atıp Arduino’ya seri haberleşme üzerinden nasıl komutlar yollayabileceğimizi göreceğiz.

Yazıyla ilgili yorumlarınız bundan sonraki yazılar için yol gösterici olacaktır.

 

 

Coşkun Taşdemir

Elektronik mühendisi, gömülü sistemler meraklısı, Arduino kitabı yazarı

85 comments

  1. salim dedi ki:

    bilgiler için teşekkürler.

    windowsCE gömülü sistem (C#) ile arduino uno’mu seri olarak haberleştirmeyi başardım. Embedded sistemde Uno’nun gönderdiği bilgileri okuyorum fakat, veriler yığılıyor ve veri okuma hızı düşüyor. Bunun önüne nasıl geçebilirim?

    • Coşkun Taşdemir dedi ki:

      Merhaba,
      Seri haberleşmede veriler genellikle geçici bir tampon belleğe yazılır. Bu belleğin boyutu da sınırlı olduğundan verileri belirli bir süre içinde okumanız gerekir. Haberleşme hızınızı biraz düşürebilirsiniz. Ya da programınızda verileri daha sık okumanız gerekiyor.

  2. […] Arduino ile Seri İletişim ve Serial Monitor Kullanımı […]

  3. yigit dedi ki:

    sormak istediğim şu; bana üç kanaldan adc okuyan bir sistem seri porttan şu datayı yolluyor A300.0B-10.5C20.3 buradaki ABC harfleri adc kanallarım ben bu gelen datanın içinden abc harflerinden sonra gelenleri nasıl ayırabilirim,
    gördügünüz gibi A kanalı 4 haneli B ve C kanalları ise 3 haneli ve bazen – işaretli olabiliyor.

  4. Ersen dedi ki:

    kitabınızda aldım sizleri sorum olacak kitabınızın 57.sayfasındayım,Değişkenlerin kullanımına örnek-8 de kullanılmaya başlanan,int i.j ifadelerini anlamadım ,özellikle i ifadesi kitapdan başka çok yerdede yazıyor anlamı nedir yardımcı olurmusunuz?

    • Coşkun Taşdemir dedi ki:

      Merhaba,
      int değişken tipini belirten bir ifadedir. -32768 ile 32767 arasındaki tam sayıları ifade eder. i ve j isimleri kendi verdiğimiz isimlerdir. i ve j yerine başka isimler de verilir. Genellikle dizilerle uğraşırken Lineer Cebir’den gelen bir gelenekle i ve j isimleri kullanılıyor.

      int i,j;

      satırında 2 adet int tipi değişken tanımlamış oluyoruz.
      Daha ayrıntılı açıklamalar için sorularınızı forum bölümüne yazabilirsiniz.

      • dsa dedi ki:

        adsadSerial.println("hareket algılandı!");Serial.println("hareket algılandı!");Serial.println("hareket algılandı!");Serial.println("hareket algılandı!");Serial.println("hareket algılandı!");

  5. selim bayram dedi ki:

    çok güzel bir Arduino gelişmesini gösteren konu burası ve kitabınız …bence bu Türkiye’de büyütülmeli.Coşkun TAŞDEMİR hocam Arduino kitabınız hayırlı olsun güzel iş başardınız.Umarım inşallah Arduinolar lise ve üniversitelerde uygulama ders olarak başlatılır. BEN GÖRDÜM herkes görür İnşallah. teşekkür ettim coşkun hocam saygılar.

  6. Coşkun Taşdemir dedi ki:

    Teşekkür ederim yorumların için. Dileklerine ben de can-ı gönülden katılıyorum.

  7. alper aşan dedi ki:

    çoşkun bey kitabınızı aldım /*seri iletişim
    */
    void setup(){
    Serial.begin(9600);
    }
    void loop(){
    Serial.println(‘arduino’);
    delay(1000);
    }
    yazdıktan sonra serial monitore basıyorum ve
    28271
    28271
    28271 yazıp duruyor acaba sorun tam olarak nerede ?

  8. selami satilmis dedi ki:

    Merhaba,
    Processing’ den Arduino’ ya veri göndemek istiyorum. Arduino Mega 2560 board kullanıyorum. Kodları derlediğimde herhangi bir hata vermemesine rağmen çalışmıyor. Örneğin mause ‘u processing ile oluşturduğum dikdörtgensel bölge üzerine götürdüğümde led yansın istiyorum ancak sonuç yok. Kodlar aşağıda verdiğim gibi. Sanırım kodlarla ilgili bir hata değilde farklı bir sorun mevcut. Yardımcı olabilirseniz sevinirim.
    //**************************
    Arduino :
    char val; // Data received from the serial port
    int ledPin = 4; // Set the pin to digital I/O 4

    void setup() {
    pinMode(ledPin, OUTPUT); // Set pin as OUTPUT
    Serial.begin(9600); // Start serial communication at 9600 bps
    delay(50);
    }
    void loop() {
    if (Serial.available()) { // If data is available to read,
    val = Serial.read(); // read it and store it in val
    //digitalWrite(ledPin,HIGH);
    }
    if (val == ‘H’) { // If H was received
    digitalWrite(ledPin, HIGH); // turn the LED on
    } else {
    digitalWrite(ledPin, LOW); // Otherwise turn it OFF
    }
    delay(100); // Wait 100 milliseconds for next reading
    }
    //***************************************
    Processing :
    import processing.serial.*;

    Serial myPort; // Create object from Serial class
    int val; // Data received from the serial port

    void setup()
    {
    size(200, 200);
    String portName = Serial.list()[0];
    myPort = new Serial(this, portName, 9600);
    delay(50);
    }

    void draw() {
    background(255);
    if (mouseOverRect() == true) { // If mouse is over square,
    fill(204); // change color and
    myPort.write(‘H’); // send an H to indicate mouse is over square
    }
    else { // If mouse is not over square,
    fill(0); // change color and
    myPort.write(‘L’); // send an L otherwise
    }
    rect(50, 50, 100, 100); // Draw a square
    }

    boolean mouseOverRect() { // Test if mouse is over square
    return ((mouseX >= 50) && (mouseX = 50) && (mouseY <= 150));
    }

  9. Ömer Koman dedi ki:

    arduinoda “debug” hata ayıklama eksikliğini her zaman hissediyoruz.
    arduino tarafındaki kodu serial monitorden veya hyper terminalden bağlıyken denedinizmi H ve L yolladığınızda neler oluyor ? hatanın nerede olduğunu anlayalım önce?

    • selami dedi ki:

      Serial Monitorden ‘H’ gönderdiğimde olması gerektiği gibi led yanıyor, ‘L’ gönderdiğimde yine olması gerektiği gibi led sönüyor. Ayrıca aynı kod arduino Uno üzerinde sorunsuz çalışıyor. Donanımsal bir sorun olabilir mi acaba ?

  10. Ömer Koman dedi ki:

    processing kodunu deneyelim şimdi. processinge girip yukarıdaki proceesing kısmındaki kodu çalıştırın kodtaki return satırını aşağıdaki ile değiştirin.

    return ((mouseX >=50 && mouseX <=150 )&& (mouseY >=50 && mouseY <=150));

  11. selami dedi ki:

    bir değişiklik yok. hala bir tepki vermiyor.

  12. Ömer Koman dedi ki:

    processing kodunu hatasız compile ediyor değil mi? sizin buraya kopyaladığınız processing kodu çalışmıyordu verdiğim değişiklikle fonsiyon çalıştı. mouseyi hareket ettirdiğinizde karenin rengi değişiyor değilmi?

  13. selami dedi ki:

    Kopyalarken bir eksik kopyalama yapmış olabilirim ama bende çalışıyor bir hata yok. Karenin rengi değişiyor evet. Daha önce de söylediğim gibi Uno’ da sorunsuz çalışıyor sorun Mega’ da ve hala anlamış değilim… Bu arada ilgilendiğiniz için çok teşekkür ederim 🙂

  14. Ömer Koman dedi ki:

    aynı anda hem arduino hem processing programı açık olmasın, arduino programı serialmonitör üzerinde portu tutuyordur processing o anda kullanamaz.
    birde hatalı bir serial port görüyor olabilir sizdeki myPort = new Serial(this, portName, 9600); yerine şunu myPort = new Serial(this,”COM9″,9600); kullanın “COM9” yerine megaya bağlandığınızda bulduğu port neyse onu yazıp deneyin.

  15. selami dedi ki:

    Aynı anda Processing ile Serial Monitor ‘ un açık olmasına izin vermiyor zaten. Söylediğiniz şeklide de denedim ve programdan tamamen çıktım, yine de değişen bir şey olmadı ne yazık ki.

  16. Ömer Koman dedi ki:

    şurada http://arduino.cc/forum/index.php?PHPSESSID=419f7580b3cc4252fe87ee7c805749da&topic=52151.msg662087#msg662087 dediğine göre mega2560 ta problem var çözümü…
    pepperbilly33 has responded to Serial with new Arduino Mega 2560 in Forums: Integration and Hardware on 07-Jan-2012 03:28 PM
    i had the same problem. after some hours of searching, i finally find the solution:
    1. Disable Auto Reset
    2. Give some Delay after the port is open

    http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection
    http://arduino.cc/forum/index.php?PHPSESSID=f3d9e89cfffb8747990c06b77895b9db&topic=50484.0

  17. selami dedi ki:

    Bu çözüm yolunu ben de gördüm fakat pek cazip gelmedi açıkçası. Çünkü tam olarak 120 ohm’luk bir direnç bulmanın mümkün olmayacağını düşünüyorum. Fakat başka bir yol da yok gibi… Yardımcı olduğunuz için tekrardan teşekkürler.

  18. aydın dedi ki:

    Merhabalar benim yazığım arduino programında d diye belirttiğim bir karakter var(int k) şeklinde ve ben buna Serial Monitor?den istediğim veriyi gönderdiğimde d ye bu belirttiğim değeri atamasını istiyorum.ör:100 girildiğinde programın içindeki d=100 159 girildiğinde ise d=159 olacak.Bu nasıl mümkün olur acaba c de scan f şeklindeydi arduinoda nasıl oluyor şimdiden teşekkürler

  19. Hasan dedi ki:

    merhaba arduıno ve gps module kullanarak konum aldım.Fakat bu konumu bilgisayardada deplomak istiyorum bu konuda yardımcı olursanız sevinirim

  20. oktay dedi ki:

    merhaba arduino kitabınızı aldım programlama dili hiç bilmiyorum yeni yeni ögreniyorum 🙂 196. sayfadaki örnek kodu birebir yazdım hata veriyor normal olmayan bişeyler var sanırım 😀

  21. kaanceyhan dedi ki:

    @Oktay, yazdığın kodu ve aldığın hatayı foruma (http://forum.arduinoturkiye.com) yazarsan daha hızlı cevap bulabilirsin.

  22. fatih dedi ki:

    setup kısmındaki serial.begin için serial was not declared in this scope diyor sorun nerde?nerde hata yapıyorum.

  23. Bahadır dedi ki:

    Merhabalar;
    Arduino’nun serial monitöründen bilgi girişi yapabiliyormuyuz ?Yapabiliyorsak Nasıl?
    Mesela, benden bir sayi isteyecek bende o sayıyı Serial Monitöre gireceğim.Yapacağı işlemleri benim girdiğim sayı ile yapacak.

  24. İzzet ŞAHİN dedi ki:

    Merhaba;

    Bir rehberde DEBUG’lama için serial monitor bu şekilde kullanılmış. ancak serial monitor de hiç bir çıktı göremiyorum.

    Baud rate i hem kodda hem de serial monitör de eşitledim ancak yine bir çıktı alamadım. ancak ;
    Debug’ın değişken olarak tanımlanması ve if komutu içerisine yazılmasını anlamadım.

    kodun çalışmasında bir hata var mıdır?

    teşekkür ederim.

    int R_Pin = 9 ;
    int R_Val = 255 ;
    int i = 0 ;
    int wait = 50 ;
    int DEBUG = 0 ;

    void setup ()
    {
    pinMode (R_Pin, OUTPUT) ;

    if (DEBUG)
    {
    Serial.begin(115200) ;
    }
    }
    void loop ()
    {
    i +=1 ;
    if (i10);
    {
    DEBUG=1;

    Serial.print (i) ;
    Serial.print (“\t”) ;
    Serial.print (“R:”) ;
    Serial.print (R_Val) ;

    }
    }
    delay(wait) ;
    }

    • İzzet ŞAHİN dedi ki:

      yukarıda kodlarda bir yazım hatası olduğu için programın çalışmadığını düşünebilirsiniz. yazım hatasını düzeltim sorumu tekrarlıyorum. if ile yaptığım debugging çalışmıyor. bunun böyle yapılıp yapılamayacağını acıklayabilir misiniz ?

      Teşekkürler

      int R_Pin = 9 ;
      int R_Val = 255 ;
      int i = 0 ;
      int wait = 50 ;
      int DEBUG = 0 ;
      void setup ()
      {
      pinMode (R_Pin, OUTPUT) ;
      if (DEBUG)
      {
      Serial.begin(115200) ;
      }
      }

      void loop ()
      {
      i +=1 ;
      if (i10)
      {
      DEBUG =1;
      Serial.print (i) ;
      Serial.print (R_Val) ;
      }
      }
      delay(wait) ;
      }

      • meric dedi ki:

        Ayrıca DEBUG başlangıç değeri 0 olduğundan ve SETUP döngüsü saece 1 kez çalıştırılacağından seri port açılmayacaktır.

  25. meric dedi ki:

    if (DEBUG == 1)

    if (i == 10)

    İlgili satırları yukarıdaki gibi değiştirmeyi deneyin.

  26. meric dedi ki:

    int R_Pin = 9 ;
    int R_Val = 255 ;
    int i = 0 ;
    int wait = 50 ;
    int DEBUG = 0 ;
    void setup ()
    {
    pinMode (R_Pin, OUTPUT) ;
    //if (DEBUG)
    //{
    Serial.begin(115200) ;
    //}
    }
    void loop ()
    {
    i +=1 ;
    //if (i10)
    if (i == 10)
    {
    DEBUG =1;
    Serial.print (i) ;
    Serial.print (R_Val) ;
    }
    //}
    delay(wait) ;
    }

  27. meric dedi ki:

    Aslında debug değişkenine ihtiyacınız yok.

    Setupda serialportu açın.

    Loop içinde Serial.print yada Serial.println ile yazdırın yeter.

  28. meric dedi ki:

    Not:

    Eğer if içinde sizin kullandığınız şekilde (debug) diyeceksek debug değişkenini boolean yanımlamak gerekir.

    boolean DEBUG = true;

    Ya da false biçiminde

  29. Mete dedi ki:

    Aga serial monitorden sensorlerimle sicaklik ve hareket sensorunden bilgi aliyorum ama ard arda olmasi isime gelmiyor her delay sonrasinda monitoru nasil sifirlarim

    • Ömer Koman dedi ki:

      serialmonitor debug işlemlerinde kolaylık olsun diye hazırlanmış bir araç. siz c# ile hazırlayacağınız bir programla serialporta gelen verileri forma yazdırın. belirli aralıklarla ekranı sildirin veya boyayın ne yapacaksanız yapın. öyle olur. windowsda çalışan terminal programları ile de kullanabilirsiniz o programlara özgü kontrol karakterlerini kullanarak belirli bir koordinatta mesajlar yazabilir renklendirebilir veya silebilirsinizde…

  30. dbm dedi ki:

    merhaba ben pc kontrollü araba yapacağım xbee kullanıcam haberleşmeyi nasıl sağlicam

    • Ömer Koman dedi ki:

      xbee seçtiğine göre onu haberleşmesini biliyorsun diye düşündüm bak. foruma gelip bir sorsan beklemene gerek kalmaz böyle hem…

  31. Red Flag dedi ki:

    Merhaba Arkadaşlar
    Arduino Seri Port Kodları İçin Bu linke Bakabilirsiniz
    //www.youtube.com/watch?v=owOgHHKJ5bk

  32. Ali SARICA dedi ki:

    Arduino Uno ile seri port üzerinden 2 tane veri göndermek istiyorum. yardımcı olabilir misiniz??

    • Ömer Koman dedi ki:

      ali sarıca yardımcı oluyorum dikkat et. yukarıdaki örnek kodda Serial.println(sayac); yazan yerde aşağıdaki gibi yazarsan 2 tane veri yollarsın
      text veri yollamak istersen
      Serial.println(“alinin birinci verisi”);
      Serial.println(“alinin ikinici verisi”);
      veya
      Serial.println(“a”);
      Serial.println(“b”);

      sayısal veri yollamak istersen

      Serial.println(sayac);
      Serial.println(sayac);

      veya

      Serial.println(1);
      Serial.println(2);

      kolay gelsin. aklına birşey takılırsa foruma gel oradan sor.

  33. Engin dedi ki:

    ardunio ile seri haberleşme yapıp 4 tane step motor çalıştırmak için ne denediysem olmadı nasıl yapabilirim ?

    • Ömer Koman dedi ki:

      projeler parça parça yapılır ve ilerlenir sırasıyla bolum bolum ilerle, once seri iletişimi nasıl yapıyorsun mesajları duzgun alıp veriyormusun kontrol ettın mi?
      step motoru nasıl suruyorsun hangi motor surucuyu kullanıyorsun bir tane motoru surebıldın mı? onu surduysen diğerlerini birer birer ekleyerek kodunu geliştir. en son 4 stepi de kontrol edebıldıysen seri haberleşmeyi ekle üstüne. bu dedıklerımı yaptıysan kodunu foruma gel yapıştır yardım eden olacaktır.

  34. Engin dedi ki:

    2 adet step motoru tek tek sağa veya sola çevirdiğimizde rahatlıkla dönebiliyor ama ikisini aynı anda hareket ettirmek istediğimizde çok yavaş ve titreyerek ilerliyor nedeni nedir ?

    • Ömer Koman dedi ki:

      seri iletişim dışındaki soruları burada sormayın. foruma gelin istediğinizi sorun arkadaşım.

  35. Murat arslan dedi ki:

    Merhaba benim bi sorum var.
    Bluetooth aracılığıyla android uygulamasından 4 adet servo motor kontrol etmek istedim. Aynı zamanda bu servolar önceden kaydettiğim demolarda yapmalı. Yani hem otomatik hemde elle kontrol olmasını istiyorum Programın başlarında gayet iyi geliştirdim ancak androidden gönderdiğim veriler “A100, B150 vb Serial read komutuyla okunanı nasıl böleceğimi bilmiyorum. Aslında bi yöntem buldum ama ondada gelen veriyi char olarak kaydettigi icin gereken yere yazdıgımda olmuyor. Yardımınızı bekliyorum cok teşekkur ederim.

  36. Yasin dedi ki:

    arduinoya bağlı xbee s2 ve pc ye bağlı xbee s2 ile rssi bilgisini güncel olarak nasıl alabalirim.yardım ederseniz sevinirim.

  37. Serkan dedi ki:

    Merhaba,
    Öncelikle bu platformun kurulmasında emeği geçenlere teşekkürler.
    Yürüttüğüm bir çalışmada ufak bir problem ile karşılaştım ve gerekli aramayı google’u didik didik ettikten sonra bıraktım 🙁
    Seri haberleşme ile ilgili bu yazıyı gördüğüm zaman sorunu çözebilirim diye düşündüm.
    Sizden ricam bir MCU nin bir çıkış portundan 74HC595 entegresine seri olarak gönderilen bilgiyi Arduino yada başka bir PIC entegresi ile okumayabilmek nasıl yapılır.
    Örn: MCU e bağlı 2 adet 74HC595 entegresi ile 6 adet Seven Segment Display sürülmektedir ve yapılan işlem sayıcıdır.
    Yardımlarınızı bekliyor ve teşekkür ediyorum.

  38. selman dedi ki:

    hepinize kolay gelsin
    elimde iki adet atmega328 var iki işlemciyi ayrı devrelerde kullanıyorum. Devrelerim çok basit birinde pot ile ntcden analog bilgi alıp karşılaştırıyorum belirli bir şartı sağlayınca diğer devreye veri gönderiyor diğer devrede veriyi aldığında ledi yakıyor ancak iki atmega328i kablo şekilde rx tx pinlerinden bağladığımda çalışmıyorlar serial monitorden devreleri kontrol ettiğimde herhangi bir sıkıntı olmuyor 2 adet xbee aldım kablosuz dedim yine sorun oldu Bu konuyla ilgili yardım edebilecek varmı?
    şimdiden teşekkür ederim

  39. Alp dedi ki:

    Ben serial monitore ac yazinca led yanmasini kapat yazinca kapanmasini istiyorum rakamlarla yaptım ama kelimelerle yapamadim yardimci olabilecek varmi

  40. emre dedi ki:

    arduinoda serial monitöre yazdırdığımız bir sıcaklık verisi aynı ise yazmamasını sağlayan bir kod varmı acaba ????

    • Ömer Koman dedi ki:

      bir once yazdıgın değerden farklıysa yaz diye bır kod yazabilirsin yahu. ekrana veriyi yolladıgında bir değikende sakla. bir dahaki sefer yazmadan once kontrol et farklıysa yazarsın. bir tane if yazacaksın. foruma da gelin

  41. Rahşan dedi ki:

    Çok faydalı bir yazı olmuş, emeğinize sağlık. İyi çalışmalar.

  42. Tolga dedi ki:

    Hocam Merhaba

    Windows form application da oluşturduğum arayüzle arduino mu haberleştiriyorum ve LCD ekrana yazıda yazdırıyorum ama arduino resetlendiğinde yazı siliniyor tekrar program çalışmıyor

    Aslında yapmak istediğim c# dan gönderdiğim yazıyı veya numarayı arduinonun hafızasında kalmasını istiyorum ben değiştirene kadar çalışmasını istiyorum

    Nasıl yapabilirim bir fikriniz var mı? Şimdiden yardımlarınız için çok Teşekürederim

    • Ömer Koman dedi ki:

      eeprom a yazın okuyun uno için 1024byte hucreniz var 0-1023 arasında adr değeri olacak
      EEPROM.write(adr, val);
      val=EEPROM.read(adr);

      formdan aldığınız değeri eproma yazın arduino yenıden başladıgında ıse epromdan okuyun lcd ye yazın. ılk okundugunda değerler saçma gelmemesi için epromu bır okuyun hıc yazılmadıgında ıcınde ne deger var bakın eğer o degerı gormüşsenız epromdakı bılgıyi kullanmayın.

      • Tolga dedi ki:

        Hocam vermiş olduğunuz bilgi için çok teşekkürederim fakat 1024 byte yeterli olmayabilir büyük ihtimalle olmuycak.

        Bunun için bir Öner’iniz var mı?

        • Ömer Koman dedi ki:

          24cxxx serisi harici epromlar ı kullanın ama onlar zaten 1k bile değil, sd karta yazın diyecemde bu nasıl bir lcd. elınızdekı uno kaynakları belli, projelerınızı bu kaynaklar içinde yapmak daha ekonomik olur. daha gelişmiş projeler için zaten rasberry pi banana pi gibi mini bilgisayarlar var onlara geçin.

          • tolga dedi ki:

            hocam aslında c# dan arayüz ve veritabanını yazdım bitirdim. biraz eksiklikler var.

            ben arayüzden isim yazdığımda arduinoda kayıtlı kalmasını istiyorum taki arayüz programından değiştirene kadar tek sıkıntım bu.

            lcd.print(“yazılacak isim”);// bu şekilde yazdığım zaman sistem istediğim gibi çalışıyor fakat ordaki isim değiştireleceği zaman benim programa müdale etmem gerek bunu kolaylaştırmak için arayüz programı yazdım kullanıcının değiştirebilmesi için. yardımlarınızı bekliyorum

          • Ömer Koman dedi ki:

            arduino ile ilgili soracağınız bir şey varsa onlara bakalım. yukarıda yazdım alternatifleri o yoldan gidersiniz. kolay gelsin

  43. Ezgi dedi ki:

    Merhaba,
    Rfid ile çalışıyorum ancak kart numaralarını SQL veri tabanında tutmak ve EEPROMdan değil veritabanından kart id sini alıp karşılaştırmak istiyorum. Böyle bir şey mümkün müdür, yardımcı olabilirseniz sevinirim.

    • Ömer Koman dedi ki:

      bir web sunucu kurup sql i bağlayacaksınız. arduino ethernetle bu sunucuya bağlanıp rfid kodunu web sunucudan sorgulayıp işinizi göreceksiniz. foruma gelin

      • Ezgi dedi ki:

        Çok teşekkür ederim cevabınız için ben aslında seri port ile bunu yapabilir miyim onu merak ediyorum daha çok.

        • Ömer Koman dedi ki:

          seriportla pcdeki sqlclient kodunuzla ki bunu buyuk ıhtımal c# ıle yazılabılır ve sitemizde c# tan seriport ıle arduino ıle nasıl haberleşilir konusu var oradan faydalanarak yapabilirsin. bu arada bır cok rfıd okuyucunun zaten seri çıkışı oldugu ıcın hıc arduinoya bıle ıhtıyac duymadan pc ıle okuyup sqlden sorgularsın.

  44. Jamala dedi ki:

    Arduino’da sayı dizilerinin histogramını kurmak için program nasıl yazılır?

    • Ömer Koman dedi ki:

      sayı dizilerini oluşturmak için nasıl hesaplama yapıyorsanız o şekilde kodlamanız lazım. foruma gelin

  45. Merhaba, bir projemde gps ve gyroyu eş zamanlı olarak kullanmam gerekiyor fakat her ikisinin de boud değeri farklı. BU sorunu nasıl halledebilirim.

    • Ömer Koman dedi ki:

      gps genelde serial cıkış verir gyro ise i2c veya spi protokolu kullanır zaten ayrı iletişim şekilleri bunlar ortak bır noktası yok. gps siz istesenızde ıstemesenızde devamlı çıkış uretır devamlı o bılgıyı alıp degerlendıreceksınız. orada şşiniz bittiğinde veya boşluk zamanda gyrodan bılgı sorarak gerekli bilgileri birlikte değerlendirirsin.

  46. Hurşit Aksoy dedi ki:

    Hocam bilgisayardan veya herhangi bir cihazdan yazıcıya gönderilen yazdırma datasını ardiuno üzerinden nasıl görüntülerim

    • Ömer Koman dedi ki:

      yazıcı usb ise arduino hızı yetmez boşuna uğraşma.

      • Hurşit Aksoy dedi ki:

        Hocam buradaki amacım yazıcıyı devre dışı bırakmak veriyi arduinoda depolamak. Yani yazıcı olmayacak. USB ile gelen veriyi çektirip ardiuno üzerinde depolamak istiyorum. Ardiuno yeterli olmaz mı?

  47. İremÇ dedi ki:

    Hocam C kodu ile arduino arasında seri haberleşme yapmamız istendi. C’den sayı gönderip arduinoya bu sayının karesini hesaplatıp o veriyi tekrar bilgisayarda çalışan C koduna göndermemiz gerek. C kodundan arduinoya WriteFile() ile sayıyı gönderiyorum ancak arduinoda hesaplanan sayıyı bir türlü C kodu ile okuyamadım. ReadFile() ile deniyorum ama 0 basıyor. Yardımcı olur musunuz ?

    • Ömer Koman dedi ki:

      Önce şunu merak ediyorum arduinoyu biliyor musun kod yazdın mı örnekleri yaptın mı Led blinki denedin mi, print komutu ile adını yazıp ekranda gördün mü bunları bir yap önce 🙂

      aldığın hata c ile alakalı değil. Arduino sana String Formatta yollar (c tarafında char array) senin bunu int veya double formata çevirmen lazım.
      kendi kodunda önce bu dönüşümü test et.
      char str[10]={“123”};
      int ascii=str[0];

      sonucun 31 olarak dönmesi lazım bunu bir gör sonra sen bunu numerik değere de çevirebilirsin istersen elde ettiğin ascii sayısından 30 çıkar 31-30=1 olur bu sayı senin ilk sayıdır.
      sonraki adımın bunların ondalık değerini hesaplamak yani 3 karakterli bir sayı geliyorsa, ilk geleni 100 le ikinci geleni 10 la çarpar son geleni de bu sayıya toplarsın.
      int sayi;

      sayi=0;
      sayi=sayi+str[0]*100;
      sayi=sayi+str[1]*10;
      sayi=sayi+str[2]*1; // veya sayi=sayi+str[2]

      sayi artık 123 değerinde olacaktır, string “123” artık sayısal değeri olan 123 e dönüştü

      arduinoda şöyle yap; arduinodan devamlı loop içinde

      Serial.println(“123”);
      delay(2000);

      serial monitorde 123 123 şeklinde satır satır yolladığını görürsün.
      bunu senin c kodundan okuyup yukarıdaki gibi dönüştürmen lazım çünkü arduino bu kodu String formatında yollar binary formatta yollamaz yani sen bu karakteri char formatta 31 32 33 gibi okuman lazım.
      arduino her satır sonunda 13 ve 10 veya 13 veya 10 yollar buna emin değilim gelen değerleri kontrol edersin. bunlardan birini gördüğünde satır sonu olduğunu anlar sayı değişkeninin sıfırlarsın.
      aynı mantık arduino tarafında da aynıdır.

      bu dönüşümü binary formatta da yapabilirsin ama bu değişkenlerin hafızada durduğu şekilde yollayıp alman gerekir ama big andian litte andian dönüşümü de yapman lazım o kısım senin aklını karışırmasın şimdilik.

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar