Arduino Dersleri – Serial Port ve Fonksiyonları

Merhaba arkadaşlar,
Mobilhanem.com için hazırladığımız Arduino derslerine Serial Port ile devam ediyoruz. Serial Port tüm Arduino kartlarda en az bir adet mevcuttur ve Arduino kartımız ile bilgisayar veya diğer cihazların haberleşmesinde kullanılır. Bizim bu seride ki derslerimizde kullanacağımız Arduino UNO kartında bir adet Serial Port vardır. Birden fazla Serial Port kullanmak isteyen kulllanıcıların Arduino MEGA veya Arduino DUE gibi toplamda 4 adet Serial Port sahip olan kartları tercih etmesi gerekmektedir.

Arduino UNO ve Serial

Kırmızı Ok – TX ve RX pinleri
Beyaz Ok – TX ve RX bilgi ledleri

 

0’dan başlayıp 13’te bitmek üzere toplamda 14 adet dijital pine sahip olan Arduino UNO kartında da diğer kartlarda olduğu gibi dijital 0 (RX) ve dijital 1 (TX) pinleri Serial Port’u için ayrılmıştır. Serial Port ile haberleşmek için bu iki pinin yanı sıra Arduino kartımız ile bilgisayarımız arasındaki USB bağlantısını kullanarak haberleşme sağlayabiliriz.

Arduino kart üzerinde bulunan iki adet uyarıcı ledin yardımı ile çalışma esnasında Serial Port’un o anki çalışma durumunu takip edebiliriz.

Not: Serial Port kullanılırken Arduino kartımız üzerinde bulunan Serial Port için ayrılmış pinleri başka giriş veya çıkış işlemleri için kullanamayız.

 

 

 

Serial Port Ekranı Butonu

Bilgisayarınız ve kartınız arasındaki bağlantıyı sağladıktan sonra  Serial Port Ekranı butonuna tıklayarak açılan Serial Port Ekranına ulaşabilir ve bu ekran aracılığı ile kartınız ile haberleşme ekranına ulaşabilirsiniz.

Arduino Serial Nesnesi

Arduino programlama dilinde seri haberleşme portunu kullanımı için tanımlanmış bir Serial nesnesi bulunmaktadır. Serial nesnesi işimizi kolaylaştırıcı bir çok fonksiyona sahiptir. Bu fonksiyonlar;

fonksiyonlarıdır. Birlikte bu fonksiyonların bir çoğunu inceleyeceğiz.

if ( Serial )

Belirlenen Seri Portun hazır olup olmadığını kontrol etmemize yarar. Serial nesnelerinin mantıksal bir alan alanda kullanılması durumunda eğer belirtilen Seri Port hazır ise True eğer belirtilen Seri Port hazır değilse False değeri dönecektir.

void setup() {
  Serial.begin(9600);
  while (!Serial) { // Serial portun hazır olmasını bekle.
    ;
  }
}

void loop() {
}

 

available ()

Serial Port’tan okuma yapmak için kullanılabilir byte( karakter )’in  olup olmadığını kontrol etmemize yarar. Gönderilmiş olan veriyi byte byte değerlendirir.

int alinan = 0; // alınacak degeri saklamak için kullanılacak değişken

void setup() {
  Serial.begin(9600); // Seri Portumuzu 9600 baud olarak ayarlıyoruz.
}

void loop() {
  if (Serial.available()) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    // eğer girdi varsa oku ve yazdır.
    
    alinan = Serial.read(); // Serial Porttan değer okuma
    Serial.print("Alinan Deger: ");
    Serial.print(alinan); // integer olarak alınan değeri yazdırma
    Serial.print(" - Char Olarak Alinan Deger: ");
    Serial.println((char)alinan); // char'a dönüştürerek alınan değeri yazdırma.
  }
}
available örnek ekran çıktısı

begin ()

Arduino’dan bilgisayarımıza veya seri haberleşme portunu kullanan diğer cihazlara gönderilecek verinin hızını saniyede bit ( bit / saniye ) cinsinden ayarlar. Bir cihaz ile birlikte kullanıldığında hem Arduino’muzun hemde diğer cihazımızın veri transfer hızları aynı olmalıdır.

Kullanım Şekli:

Serial.begin(speed)
Serial.begin(speed, config)

begin() fonksiyonu bir hız parametresi ve isteğe bağlı ikinci bir parametre olarak parity veya stop biti alabilir. Arduino’muz ile bilgisayarımız arasında bir seri haberleşme gerçekleştirmek istediğimizde hız parametresi olarak 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200, 230400 veya 250000 kullanmamız gerekmektedir.

Bilgisayarımızın varsayılan hızı 9600’dür. Bu hızı değiştirmek için Arduino yazılımında yukarıda nasıl erişileceğinden bahsedilen Serial Port Ekranından aşağıdaki resimdeki gibi değiştirebilirsiniz. Kartınızın ve bilgisayarınızın hızlarının aynı olması gerektiğini unutmayınız.

void setup() {
  Serial.begin(9600); // veri transfer hızını 9600 olarak ayarla.
  Serial.println("Merhaba Dunya !"); // Seri mönitöre Merhaba dünya yaz.
}

void loop() {
  // bu örnek için loop'u kullanmadık.
}

Not: Yukarıdaki örnekte düzgün çıktılar alabilmemiz için Seri Monitörümüzünde baud hızının 9600 olması gerekir.

end ()

Seria Portun çalışmasını devre dışı bırakır. Daha önce belirttiğimiz gibi TX ve RX pinlerini Serial Portu kullandığımızda giriş çıkış işlemleri için kullanamıyoruz. end() ile Serial Port devre dışı bırakıldıktan sorna TX ve RX pinlerini giriş çıkış işlemleri için tekrar kullanabiliriz. Serial Portu tekrar devreye almak istersek begin() fonksiyonunu kullanabiliriz.

void setup() {
  Serial.begin(9600); // Seri portu başlat.
}

void loop() {
  Serial.print("Mobilhanem !"); // Ekrana Mobilhanem yaz.
  Serial.end(); // Seri portu devre dışı bırak.
  Serial.println("Burası yazılmayacaktır."); // Seri port devre dışı olduğu için bu satır yazdırılmayacaktır.
  Serial.begin(9600); // tekrar seri portu devreye al
  delay(1000);
}
örnek ekran çıktısı

find ()

Find fonksiyonu ile Serial Port üzerinden gönderilen değer içerisinde arama işleme yapılır. Eğer aranan değer gönderilen değer içerisinde varsa True, yoksa False değeri döndürür.

void setup() {
  Serial.begin(9600);  // Seri Portu başlat
}

void loop() {
  while (Serial.available()) { // okumak için veri varmı.
    if (Serial.find("arduino")) { // girilen değer içerisinde arduino var mı ? 
      Serial.println("Mobilhanem.com"); 
    }
    else { 
      Serial.println("Arduino Dersleri"); 
    }
  }
}

 

örnek ekran çıktısı

parseFloat () ve parseInt ()

parseFloat() ve parseInt() fonksiyonları Seri Porta gönderilen veri dizisi içerisindeki ondalıklı ve tam sayıları almamızı sağlar. Bu işlemi yaparken gelen veri dizisinde değişikliklerde oluşur. Bunu aşağıdaki örneğinizde görebilirsiniz.

int tamSayi = 0;
float ondalikliSayi = 0;
void setup() {
  Serial.begin(9600);  // Seri Portu başlat
}

void loop() {
  if (Serial.available()) { // okumak için veri varmı.

    tamSayi = Serial.parseInt(); // veri dizisindeki tam sayıları oku
    Serial.println(tamSayi);
    
    ondalikliSayi = Serial.parseFloat(); // veri dizisindeki ondalikli sayıları oku
    Serial.println(ondalikliSayi);

  }
}

Not: Bu örnek özel bir durumu göstermek için hazırlanmıştır. Örnek ekran çıktısına parametre olarak 3.14 mobilhanem 3.14 verilmiştir.

örnek ekran çıktısı

print () ve println ()

Her iki fonksiyonda seri haberleşmede gönderilen parametreleri ASCII‘ye uygun olarak yazdırma işlemi yapar. Diğer programlama dillerinden de alışık olduğumuz şekilde print fonksiyonu yazma işlemini gerçekleştirdikten sonra imleci yazma işleminin bittiği noktada bırakırken, println fonksiyonu yazma işlemi bittikten sonra imleci bir alt satırın başına getirir ve daha sonraki yazmaların bir alt satırdan olmasını sağlar.

Kullanım şekilleri:

Serial.print(val)
Serial.print(val, format)

Serial.println(val)
Serial.println(val, format)

Özellikleri;

  • Parametre olarak aldıkları veriyi seri monitor ekranına yazarlar.
  • C gibi dillerde kullanılan kaçış karakterleri ( \t, \n vs. ) bu fonksiyonlar içinde geçerlidir.
  • Ondalıklı sayılar yazdırıldığın da varsayılan hassasiyet olan virgülden sonraki 2 basamağı yazdırılır.
  • İkinci parametre olarak alınan format değişkeni ile yazdırma hassasiyeti veya yazdırılan sayının hangi taban aritmetiğinde olması istendiği ayarlanabilir.
    • Serial.println(1.23456)  şekildeki kullanımda ekrana onluk tabanda 1.23 yazdırılır.
    • Serial.println(1.23456, 3) şeklindeki bir kullanımda ekrana 1.234 çıktısını yani, virgülden sonra üç basamağı yazdırılır. Daha farklı hassasiyetler için örnekteki 3 rakamını değiştirebiliriz.
    • Serial.println(123, format) kullanımında format değişkeni değer olarak BIN ( ikilik ), OCT ( sekizlik ), DEC ( ondalık), HEX ( on altılık ) değerlerini alır ve bu aldığı değerlere uygun tabanda sayı formatlandırılarak yazdırılır.
      • Not: Bu kullanım şekli ondalıklı sayılar için geçerli değildir.

print () ve println () örnekleri

void setup() {
  Serial.begin(9600);      // Seri Haberleşme Portunu hızını 9600 olarak ayarla   
}

void loop() {  
  // başlıkları yazmak için bu kod bloğu kullanılmıştır.
  Serial.print("NO FORMAT");       // Ekrana no format yazdır
  Serial.print("\t");              // bir tab kadar boşluk bırak.

  Serial.print("DEC\t");           // Ekrana DEC yazdır ve bir tab kadar boşluk bırak. Gerek No format taki gibi gerekse bu satırdaki gibi \t ekleyebiliriz.
  Serial.print("HEX\t"); 
  Serial.print("OCT\t");
  Serial.print("BIN\n");           // Ekrana BIN yazdır ve bir alt satıra in

  for(int x=0; x< 64; x++){    // 0'dan 64'e kadar olan tam sayıları alıp yazdırmak için bu döngü kullanılmıştır.

    Serial.print(x);       // X değerini formatsız bir şekilde yazdırma. Varsayılan olarak DEC (onluk) tabanda yazdırılacaktır.
    Serial.print("\t\t");    // prints a tab

    Serial.print(x, DEC);  // X değerini ONLUK tabanda yazdır
    Serial.print("\t");    // prints a tab

    Serial.print(x, HEX);  // X değerini ON ALTILIK tabanda yazdır
    Serial.print("\t");    // prints a tab

    Serial.print(x, OCT);  // X değerini SEKİZLİK tabanda yazdır
    Serial.print("\t");    // prints a tab

    Serial.println(x, BIN);  // X değerini İKİLİK tabanda yazdır ve bir alt satıra in.
    delay(200);            // 200 ms bekle.
  }
  Serial.println(); // parametresiz olarak kullanıldığında yalnızca imleci bir alt satıra indirir.
}
Örnek ekran çıktısı
float y = 1.23456; // formatlamak için kullanacağımız değişken.

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

void loop() {
  Serial.print("Ondalikli sayi\t");        // Ekrana ondalıklı sayı yaz ve bir tab boşluk bırak.
  Serial.print("Basamak Hassasiyeti\t");  
  Serial.println("Formatli Sayi");         // Ekrana formatlı sayı yaz ve bir alt satıra in.
  
  for (int i = 0; i < 7; i++) { 
    Serial.print(y);        // Varsayılan yazdırma şekli ile y değişkenini yazdır.
    Serial.print("\t\t");   // Daha düzgün bir görünüm için bir miktar boşluk bırak.

    Serial.print(i);        // Kaç basamak hassasiyetinde olacağını yazdır.
    Serial.print("\t\t\t"); 

    Serial.println(y, i);     // y değişkenini i hassasiyetinde yadır ve bir alt satıra in.
    
    delay(1000);
  }
  Serial.println();
}
Örnek ekran çıktısı.

read ()

Seri Porttan gelen veriyi ilk byte ile başlayarak sırayla okuma işlemini gerçekleştirir ve okuduğu her değerin integer karşılığını döndürür. Bu integer değer tip dönüşümü yapılarak istenilen formda kullanılabilir. Eğer okunacak veri yoksa -1 değerini döndürür.

int alinan = 0; // alınacak degeri saklamak için kullanılacak değişken
 
void setup() {
  Serial.begin(9600); // Seri Portumuzu 9600 baud olarak ayarlıyoruz.
}
 
void loop() {
  if (Serial.available()) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    // eğer girdi varsa oku ve yazdır.
    
    alinan = Serial.read(); // Serial Porttan değer okuma
    Serial.print("Alinan Deger: ");
    Serial.print(alinan); // integer olarak alınan değeri yazdırma
    Serial.print(" - Char Olarak Alinan Deger: ");
    Serial.println((char)alinan); // char'a dönüştürerek alınan değeri yazdırma.
  }
}

 

readBytes()

readBytes fonksiyonu Serial Porttan gelen veriyi istenilen byte adedinde okuyarak char veya byte tipinde bir diziye yazma işlemini gerçekleştirir. Bu işlemi gerçekleştirirken geriye kaç byte lık işlem yaptığını integer tipinde döndürür.

Kullanım şekilleri:
Serial.readBytes(buffer, length)

buffer : char veya byte tipinde bir dizi

length : integer tipinde kaç byte lık okuma yapılacağı

int byteSayisi = 0;
char dizi[10]; // 10 boyutlu bir dizi oluştur.
void setup() {
  Serial.begin(9600); // Seri Portu başlat.
}

void loop() {

  if (Serial.available() > 0) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    byteSayisi = Serial.readBytes(dizi,4); // 4 byte okuma yap ve diziye yaz. Ayrıca gelen verinin kaç byte inin işlendiğini sakla.

    Serial.print("Dizi : ");
    Serial.println(dizi); // üzerine yazılmış olan diziyi ekrana yaz.
    Serial.println(byteSayisi); // kaç byte lık işlem yapıldığını yaz.
  }
}

Not: Örnek ekran çıktısına parametre olarak mobilhanem verilmiştir.

örnek ekran çıktısı

readBytesUntil ()

Bu fonksiyon readBytes fonksiyonundan farklı olarak bir char parametre daha alır ve bu aldığı char parametre gelen veri dizisi içerisinde varsa okuma işlemini sonlandırır.

Kullanım şekilleri:
Serial.readBytesUntil(character,buffer, length)

character : aramak için char tipinde karakter

buffer : char veya byte tipinde bir dizi

length : integer tipinde kaç byte lık okuma yapılacağı

int byteSayisi = 0;
char dizi[15]; // 15 boyutlu bir dizi oluştur.
void setup() {
  Serial.begin(9600); // Seri Portu başlat.
}

void loop() {

  if (Serial.available() > 0) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    byteSayisi = Serial.readBytesUntil('.', dizi, 15);
    // yukarıdaki satırda 15 byte okuma yap ve diziye yazdırma, gelen verinin kaç byte inin işlendiğini saklama
    // ve . (nokta) işareti görülünce kaydı bitirma işleme yapılır.

    Serial.print("Dizi : ");
    Serial.println(dizi); // üzerine yazılmış olan diziyi ekrana yaz.
    Serial.println(byteSayisi); // kaç byte lık işlem yapıldığını yaz.
    
    for (int i = 0; i < 15; i++) { // diziyi tekrar yazmaya hazır olması için sıfırlama
      dizi[i] = NULL;
    }
  }
}

Not: Örnek ekran çıktısına parametre olarak mobilhanem.com verilmiştir.

örnek ekran çıktısı

readString ()

Bu fonksiyon Serial Porta gelen girdi dizisini satır sonuna kadar okuyarak okunan değeri String formunda geri döndürür.

String okunan; // girilecek parametreyi saklamak için String değişken
void setup() {
  Serial.begin(9600); // Seri Portu başlat.
}

void loop() {

  if (Serial.available() > 0) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    okunan = Serial.readString(); // Serial Porttaki girdi değerini oku ve string e ata.
    Serial.println(okunan); // okunan değeri ekrana yazdır.
  }
}

Not: Örnek ekran çıktısına parametre olarak mobilhanem.com verilmiştir.

örnek ekran çıktısı

readStringUntil ()

Bu fonksiyon readString fonksiyonundan farklı olarak bir char parametre daha alır ve bu aldığı char parametre gelen veri dizisi içerisinde varsa okuma işlemini sonlandırır.

String okunan; // girilecek parametreyi saklamak için String değişken
void setup() {
  Serial.begin(9600); // Seri Portu başlat.
}

void loop() {

  if (Serial.available() > 0) { // Serial Porta girdi değerinin olup olmadığını kontrol et
    okunan = Serial.readStringUntil('.'); 
    // yukarıdaki satırda Serial Porttaki girdi değerini okunur ardından string e atanır
    // ve eğer . (nokta) karakterine rastlanırsa okumayı sonlandır.s
    Serial.println(okunan); // okunan değeri ekrana yazdır.
  }
}

Not: Örnek ekran çıktısına parametre olarak mobilhanem.com verilmiştir.

örnek ekran çıktısı

setTimeout ()

Bu fonksiyon ile Seri Porttan gelecek olan verinin maksimum ne kadar bekleneceği mili saniye cinsinden ayarlanır. readBytes, readBytesUntil, parseFloat veya parseInt gibi fonksiyonların varsayılan bekleme süreleri 1000 ms’dir.

void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(10000);  // bekleme zamanını 10.000 ms (10 sn) olarak ayarla.
}

void loop()
{
  Serial.println("Bekleme zamani ornegi icin giris bekleniyor.");
  int alinan = Serial.parseInt(); // tam sayı alma.
  Serial.print("Alınan deger : ");
  Serial.println(alinan);
}

Not: Bu örnek kod çalıştırıldığında parseInt fonksiyonuna sıra geldiğinde 10 sn beklendiği görülecektir.

write ()

Bu fonksiyon print fonksiyonuna benzer bir işlev görür. Tek byte büyüklüğündeki değerleri yazdırmakta, String değerler ve char veya byte tipinde dizileri yazdırmakta kullanılır. Alacağı ikinci bir parametre ile de yazdırılan String veya dizinin kaç elemanının yazdırılacağı ayarlanabilir. Ayrıca write fonksiyonu geri dönüş değeri olarak üzerinde işlem yapılan byte sayısı döndürür.

char dizi[] = {'.','c','o','m'}; // yazdırmak üzere hazırladığımız char tipindeki dizi
void setup() {
  Serial.begin(9600); // Seri Portu başlat.
}

void loop() {
  
  Serial.write(77); // 77 = M yazdır.

  Serial.write("obilhanem - Arduino Dersleri",9); // String'in ilk dokuz karakterini yazdır.

  int byteSayisi = Serial.write(dizi); // diziyi yazdır ve kaç byte lık işlem yapıldığını sakla
  Serial.print("\ndizi'den okunan byte sayisi: ");
  Serial.println(byteSayisi); // kaç byte lık işlem yapıldığını yazdır.

  delay(10000);
}

Not: Bu örnek kod çalıştırıldığında 77 yerine yazdırıldığına ve obilhanem – Arduino Dersleri yerine sadece ilk 9 karakterin yazdırıldığına dikkat ediniz.

örnek ekran çıktısı

 

 

Arduino’da Serial Portu, Serial nesnesini ve Serial nesnesinin bir çok fonksiyonunu inceledik. Konuyla ilgili yorumlarınızı konu altından yapabilir, sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz. Bir sonraki içeriğimizde Mobilhanem.com‘da görüşmek üzere.

Tüm Arduino Dersleri için tıklayınız..

201

Muhammed Enes Ateş

15 Yorum

  • […] Serial portan okuma yapmak için başka fonksiyonlarda vardır . Burdan erişebilirsiniz. […]

  • merhaba serihaberleşme ekranından string veri yolluyorum ve string olarak veri alıyorum, veriyi parçalayıp displaye gönderiyorum.
    ancak veriyi bir cihazdan okumam gerekiyor. cihaz çok hızlı şekilde seri veri yolluyor bu defa ben sürekli seriport okumada kalıyorum.

    bir şekilde okuduğum veriyi sınırlamam yada benzeri birşey yapmam gerekiyor.

    cihazın veri formatı B12345678 şeklinde. sürekli seri portta takılı kalmamam gerekiyor. nasıl bir yoldan giderim.

    • Merhaba.
      Yapmak istediğiniz şey sadece seri port üzerinden data geldiğinde okuma işlemi gerçekleştirmek ve data gelmediğinde farklı işlemler yapmak mı? Yoksa gelen dataların tamamı ile değil de bir kısmı ile mi ilgilenmek istiyorsunuz?
      Ne yapmak istediğinizi biraz açabilirseniz daha iyi olacaktır.

      • yapmak istediğim bir kantardan gelen veriyi yapmış olduğum displaye aktarmak. kantarın bana yollamış olduğu veri şu şekilde “B123456” bu veriyi sürekli satır sonu yollamadan gönderiyor. string olarak almaya kalksam seri monitörden yolladığım strin değerlerle tam istediğim işleri yazılımsal olarak yapıyorum.
        Ama kantara bağlayınca anladığım kadarı ile veri= Serial.readString();

        komutunda çakılıp kalıyorum çünkü sürekli okumaya çalışıyor . yapmak istediğim hızlı ve peş peşe gelen ve B harfiyle başlayan B123456 değerinden 23456 lı hanelerdeki değerleri display a yazdırmak. readbyte denesem bu sefer değerleri kaçırıyorum.

          • serial event bence çözmeyecek çünkü, sürekli kesmede kalacak diye düşünüyorum. veri 100 veya 200 ms hızla geliyor sanırım. ve hiç durmuyor.

        • Merhaba sorunu çözebildinizmi? Şuan sizin yaptığınız projeye benzer birşeyle uğraşıyorum . Bende indikatörden RS232 ile gelen veriyi p10 led e yazdırmak istiyorum. Yardımcı olurmusunuz?

  • hocam merhaba çok güzel anlatım olmuş. iyi yararlandım bilgilerinizden. gsm sim800c shield var elimde arduinoda softwareserial kütüphanesi kullanıyorum seri portta gsm in komutlarını girebiliyorum sms göndermek için numara ve mesajı girdiktan ctrl-z yada enter a bas diyor yapıyorum ama olmuyor. satır başlarında büyüktür işareti var > . düzeltemedim bir bilginiz varmı acaba

  • merhaba seri porttan isim yazıp yollayacağım farklı isimler gireceğim bunları alt alta yazacak bunu nasıl yapabilirim

  • Öncelikle Merhabalar,
    Benim ismim Adem. Size ufak birşey sormak istiyorum;

    Ben bir ultrasonik mesafe sensörü kullanıyorum arduinomda ve yaazdığım kod alttaki gibi;

    ——————– 0000 —————

    int trigPin = 6; /* Sensorun trig pini Arduinonun 6 numaralı ayağına bağlandı */
    int echoPin = 7; /* Sensorun echo pini Arduinonun 7 numaralı ayağına bağlandı */
    int takili;
    long sure;
    long uzaklik;

    void setup(){
    pinMode(trigPin, OUTPUT); /* trig pini çıkış olarak ayarlandı */
    pinMode(echoPin,INPUT); /* echo pini giriş olarak ayarlandı */
    Serial.begin(9600); /* Seri haberlesme baslatildi */
    }
    void loop()
    {
    digitalWrite(trigPin, LOW); /* sensör pasif hale getirildi */
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH); /* Sensore ses dalgasının üretmesi için emir verildi */
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW); /* Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi */
    sure = pulseIn(echoPin, HIGH); /* ses dalgasının geri dönmesi için geçen sure ölçülüyor */
    uzaklik= sure /29.1/2; /* ölçülen sure uzaklığa çevriliyor */
    if(uzaklik 0){
    delay(50);
    Serial.print(uzaklik);
    Serial.println(“Kask Takılmıştır.”);

    }
    else {
    Serial.print(uzaklik);
    Serial.println(“Takılı Degil”);
    delay(50);

    }
    }

    ——————– 0000 —————

    ben mesafe sensörümden “delay()” komutu ile 50 ms de 1 mesafe ölçmek istiyorum ”delay(50)” ama ben ekrana eğer 0(hariç) ile 20(hariç) mm yaklaşırsam ekrana “kask takıldı” eğer 0 (dahil) ve 20’den büyük değerler kadar yakın isem de “takılı değil” yazdırmak istiyorum.

    BURAYA KADAR SIKITI YOK.

    AMA…

    Ben ekrana baktığımda ‘mesela’: sensör 17mm yakınlıkta iken ekranda yazan “17 kask takıldı” ifadesi’ni yazma sıklığı sensör okuma hızı(delay(50)) ile aynı.

    Birdiğer ifade ile ekranda 50 ms ara ile “17 kask takılı” yazıyor.

    Benim yapmaya çalıştığım şey ise; sadece kask durum değiştirirse ekrana yazmasını istiyorum.
    eğer 20 mm den daha yakın olursa sensörün ünündeki engel ekrana sadece bir kere “(uzaklık mm’si) kask takıldı” yazsın ve ekrana sadece ve sadece “else” komutu aktif olduğunda yani; 20mm’den daha uzaklaşırsa ikinci bir bilgiyi ekrana yazsın istiyoırum.

    ÖZETLEMEK GEREKİRSE:

    “İF” VE “ELSE” DEĞİŞKENLERİ EKRANA İŞLERKEN SADECE İF’DEN ELSE’YE GEÇİŞ OLURSA YENİ BİR BİLGİ YAZILMASINI SAĞLAMAYA ÇALIŞIYORUM.

    YARDIMINIZI BEKLİYORUM ARKADAŞLAR.

    Teşekkür ederim şimdiden…

  • Hocam merhaba degerli bilgiler icin tak edrim arduinoda yeniyim kucuk bir projem mevcud plastik kramayer disli ustunden reduktorlu motor 2 adet 1 selonoid 2 adette dc motor sirali bir sekilde calismasini sagladim fakat guc kesilip kapaltildiginda kaldigi yerden devam edmemesi yada basa dönmemesi buyuk sorun cikartiyor dis atliyor bu sorunu nasil cozebilirim basa almasi yada kaldigi yerden devam edmesi icin tskler

  • Devc++ da kod(c kodu) yazarak arduino ile nasıl LED yakabiliriz. Final ödevimde LED yakmam gerekiyor fakat bunu devc++da yapmak zorundayım. Seri port örneği var fakat üstüne nasıl ekleme yapacağım? Devc++ ile arduino IDE yi birlikte mi kullanmalıyım, eğer kullanacaksam nasıl?

  • teşekkür ederim güzel bir kaynak fazlasıyla yararlandım. emeği geçen arkadaşa/arkadaşlara teşekkürler

  • Merhaba. Ben bir projeye uğraşıyorum. Mesela seri porta led.on yazacaksın ve arduino da ışık yakacak led.off yazacaksın ışığı kapatacak. Pot yazacaksın bir potansiyometrenin değerini seri porta yazacak. Measfe diyeceksin bir mesafe sensörünün değerini seri porta yazacak gibi.. Bunun gibi daha birsürü şey eklenebilecek.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?