Arduino seri port ile PWM kontrolü

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]

Doğru mu gidiyorum?
 
O zaman MBock ile işimi halledebilirim(!) [aslında işimi görüyor]
Eki Görüntüle 687139
Doğru mu gidiyorum?
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?
@Utku Oktay
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.
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.
Hocam örnekleyebilir miyiz?
Bunu buldum:http://depo.btu.edu.tr/dosyalar/elektrik/Dosyalar/Arduino2.pdf
 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…