Arduino seri port ile PWM kontrolü

Yakın, ama tersi. 😀 "Serial.read()" ile okuyoruz.

Tabii öncesinde setup fonksiyonunda "Serial.begin(9600)" fonksiyonu ile seri haberleşmeyi başlatmak gerekiyor. Buradaki 9600 baud rate, siz 9600 dediğiniz için ben de o şekilde yazdım. Değiştirebilirsiniz.

Tabii direkt okumuyoruz. Önce gelen bir veri olup olmadığını kontrol etmemiz gerekiyor. Bunu "Serial.available()" ile kontrol edebiliriz. Bir örnek vereyim:
C:
if (Serial.available() > 0) {
    //Ne yapmak istiyorsanız
}

Burada okuyabileceğimiz bir değer olup olmadığını kontrol ediyoruz. Varsa, okuyabiliriz. 🙂

available yazmadan olur mu? :)
 
Nasıl yani? Anlayamadım. Kontrol etmeden mi okumak istiyorsunuz? O zaman eğer gelmiş bir veri yoksa ve siz okumaya çalışırsanız -1 gibi bir değer dönüyor sanırım. Sağlıklı olmaz yani.
O zaman MBock ile işimi halledebilirim(!) [aslında işimi görüyor]
1601558389846.png

Doğru mu gidiyorum? :D
 
O zaman MBock ile işimi halledebilirim(!) [aslında işimi görüyor]
Eki Görüntüle 687139
Doğru mu gidiyorum? :D
Biraz temellerine bakarsanız daha güzel olur. 🙂

"Serial.begin(9600)"den sonra bir noktalı virgül eksik. Başlangıçta bu noktalı virgül hep unutuluyor.

Değişkeni de şöyle tanımlıyoruz: int Fan = 5;

Okunan veriyi de değişkene şöyle atayabiliriz:
C:
char alinan = (char) Serial.read();

Burada char'a dönüştürüyor muyduk, böyle doğru sonuç alır mıyız emin değilim. Onu tam hatırlayamadım. Ama sanki böyleydi.

Onun dışında güzel gidiyor. 🙂
 
Bu arada Seri porttan "Byte" okumak için ne yapmalıyım?
@Alpha Centauri
Byte işi biraz karıştırdı, onu unutalım. Yerine int kullanalım. (Integer, tam sayı yani.)

Tek tek açıklayayım. Her şeyden önce üste şu iki değişkeni tanımlayın:
C:
String alinan;
int hiz;

Bunları birazdan kullanacağız, burada dursun şimdilik.

C:
if (Serial.available() > 0) {
    char alinanKarakter = (char) Serial.read(); //Seri porttan değeri okuduk ve char tipine çevirdik.
  }
Açıklama kısmına da yazdığım gibi burada seri portta okunabilecek bir değer var mı diye kontrol edip varsa okuduk. "Serial.read()" ile veriyi okuduk, başına eklediğimiz "(char)" ifadesi ile char tipine dönüştürdük ve ardından char tipinde tanımladığımız "alinanKarakter" değişkenine atadık. "char"a dönüştürmemizin nedeni, değişkeni char olarak tanımlamamız. Ona sadece kendi türünde değer atayabiliriz. Şimdi bu sadece bir karakteri okudu.

C:
if (Serial.available() > 0) {
    char alinanKarakter = (char) Serial.read();
    if (alinanKarakter != '\n') {
      alinan = alinan + alinanKarakter;
    }
    else {
      hiz = alinan.toInt();
      alinan = "";
    }
  }
Şimdi burada ne yaptık? if (alinanKarakter != '\n' ifadesi, en son aldığımız karakterin "\n" olup olmadığını kontrol ediyor. Eğer "\n" değilse bloğa girebilir. (" != " operatörü " == " operatörünün tam tersi, eşit değilse demek) Eğer "\n" değilse yeni satır demek değildir, o zaman string olarak tuttuğumuz değişkene yeni gelen karakteri ekleyebiliriz.

Karakter karakter gelmesi şöyle, mesela siz "144" gönderdiniz. Bu '1', '4', '4' olarak geliyor. Ardından bir de yeni satır işareti '\n' gelecek. Önce '1' geldi, biz de '\n' olmadığı için alinan değişkenine '1' ekledik. Sonra '4' geldi. Onu da ekledik. Sonraki 4'ü de. Ardından '\n' geldi, durduk.

Bu sefer else bloğu çalışacak. Ne yapıyor, alınmış verilerin birleştirildiği "alinan" değişkenini int'e çeviriyor, artık elimizdeki veri bir metin değil sayı. Böylece PWM için kullanabiliriz. Ardından bundan sonra gelecek veri için string olan değişkeni boş yapıyor. (Boş yapmak derken "" içinde bir şey yok gibi yani. Normalde bir de null kavramı var ama çok karışacak, siz böyle düşünün)

Çok karışık oldu, kusura bakmayın. Elimden geldiğince anlaşılabilir şekilde anlatmaya çalıştım. Siz deneyin, takıldığınız noktada yine yardımcı olmaya çalışırım. 🙂
 
Byte işi biraz karıştırdı, onu unutalım. Yerine int kullanalım. (Integer, tam sayı yani.)

Tek tek açıklayayım. Her şeyden önce üste şu iki değişkeni tanımlayın:
C:
String alinan;
int hiz;

Bunları birazdan kullanacağız, burada dursun şimdilik.

C:
if (Serial.available() > 0) {
    char alinanKarakter = (char) Serial.read(); //Seri porttan değeri okuduk ve char tipine çevirdik.
  }
Açıklama kısmına da yazdığım gibi burada seri portta okunabilecek bir değer var mı diye kontrol edip varsa okuduk. "Serial.read()" ile veriyi okuduk, başına eklediğimiz "(char)" ifadesi ile char tipine dönüştürdük ve ardından char tipinde tanımladığımız "alinanKarakter" değişkenine atadık. "char"a dönüştürmemizin nedeni, değişkeni char olarak tanımlamamız. Ona sadece kendi türünde değer atayabiliriz. Şimdi bu sadece bir karakteri okudu.

C:
if (Serial.available() > 0) {
    char alinanKarakter = (char) Serial.read();
    if (alinanKarakter != '\n') {
      alinan = alinan + alinanKarakter;
    }
    else {
      hiz = alinan.toInt();
      alinan = "";
    }
  }
Şimdi burada ne yaptık? if (alinanKarakter != '\n' ifadesi, en son aldığımız karakterin "\n" olup olmadığını kontrol ediyor. Eğer "\n" değilse bloğa girebilir. (" != " operatörü " == " operatörünün tam tersi, eşit değilse demek) Eğer "\n" değilse yeni satır demek değildir, o zaman string olarak tuttuğumuz değişkene yeni gelen karakteri ekleyebiliriz.

Karakter karakter gelmesi şöyle, mesela siz "144" gönderdiniz. Bu '1', '4', '4' olarak geliyor. Ardından bir de yeni satır işareti '\n' gelecek. Önce '1' geldi, biz de '\n' olmadığı için alinan değişkenine '1' ekledik. Sonra '4' geldi. Onu da ekledik. Sonraki 4'ü de. Ardından '\n' geldi, durduk.

Bu sefer else bloğu çalışacak. Ne yapıyor, alınmış verilerin birleştirildiği "alinan" değişkenini int'e çeviriyor, artık elimizdeki veri bir metin değil sayı. Böylece PWM için kullanabiliriz. Ardından bundan sonra gelecek veri için string olan değişkeni boş yapıyor. (Boş yapmak derken "" içinde bir şey yok gibi yani. Normalde bir de null kavramı var ama çok karışacak, siz böyle düşünün)

Çok karışık oldu, kusura bakmayın. Elimden geldiğince anlaşılabilir şekilde anlatmaya çalıştım. Siz deneyin, takıldığınız noktada yine yardımcı olmaya çalışırım. 🙂
Anlamaya çalıştım. :D
Zamanında sözlük gibi bir şey yapmıştım şimdi buldum onu. Bakarak belki yapabilirim. :)
Anlamaya çalıştım. :D
Zamanında sözlük gibi bir şey yapmıştım şimdi buldum onu. Bakarak belki yapabilirim. :)
Şimdi fark ettim, yarıda bırakmışım bunu. :D
Hocam örnekleyebilir miyiz?
Bunu buldum:http://depo.btu.edu.tr/dosyalar/elektrik/Dosyalar/Arduino2.pdf
 
Son düzenleme:

Yeni konular

Geri
Yukarı