Arduino Map ve Constrain Fonksiyonları

Başlatan mfurkan7, 12 Ekim 2013, 23:28:10

mfurkan7

Merhaba arkadaşlar birisi bana arduino'daki map ve constrain komutlarını açıklayabilir mi? Ne olduğunu bir türlü çözemedim. Bir aralık belirliyoruz ama hangi aralık hangi işe yarar anlayamadım.

Tagli

Pek Arduino deneyimim yok ama constrain fonksiyonunu biliyorum. Girilen bir değerin asgari ve azami sınırlar içinde kalmasını sağlıyor. Buna bazen satürasyon da denir. Örneğin bir x değerinin 0 ile 100 arasında olmasını istiyorsan bu fonksiyona giriyorsun. Değer mesela 120 ise, 100 olarak yeniden ayarlanıyor. Değer sınırlar dahilindeyse müdahele etmiyor.
Gökçe Tağlıoğlu

mfurkan7

Hocam biraz daha açar mısın konuyu örnek filan verebilirsen çok sevinirim. Bir de map fonksiyonu hakkında?

mistek

double constrain(double value, float a, float b)
 {
 if(value < a) return a;
 if(value > b) return b;
return value;
}
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mfurkan7

Hocam bu kodu anlamadım. Arduino'ya biraz benzerse daha iyi anlarım. Size örnek için kodumu koyayım. Ona göre bana yardımcı olabilirseniz sevinirim.


int led = 9;
int ldr = 0;

void setup()
{
  analogReference(DEFAULT);
  pinMode(led,OUTPUT);
  
}

void loop()
{
  int val = analogRead(ldr);
  val = constrain(val, 600, 800);
  int hassas = map(val, 250, 0, 600, 800);
  analogWrite(led,hassas);

  
}

mistek

Alıntı yapılan: mfurkan7 - 13 Ekim 2013, 00:45:04
Hocam bu kodu anlamadım. Arduino'ya biraz benzerse daha iyi anlarım. Size örnek için kodumu koyayım. Ona göre bana yardımcı olabilirseniz sevinirim.


int led = 9;
int ldr = 0;

void setup()
{
  analogReference(DEFAULT);
  pinMode(led,OUTPUT);
  
}

void loop()
{
  int val = analogRead(ldr);
  val = constrain(val, 600, 800);
  int hassas = map(val, 250, 0, 600, 800);
  analogWrite(led,hassas);

  
}


Verdiğim kod constrain fonksiyonunun ne yaptığı.

Siz fonksiyona 3 parametre gönderiyorsunuz bu fonksiyon sizin belirlediğiniz sınırlar içersinde kısıtlıyor.

Sizin kodunuzdaki val değişkenini 600 ve 800 aralığında olmasını istemişsiniz.

Eğer val değişkeni 600den küçük ise fonksiyon size 600 değerini döndürür.
Eğer val değişkeni 800den büyük ise fonksiyon size 800 değerini döndürür.
Eğer val değişkeni 600 ile 800 aralığında bir değer ise fonksiyon size aynı değeri döndürür.

Constrain kelime anlamı = Sınırlamak,zorlamak,mecbur etmek.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mfurkan7

Alıntı yapılan: mistek - 13 Ekim 2013, 00:54:59
Verdiğim kod constrain fonksiyonunun ne yaptığı.

Siz fonksiyona 3 parametre gönderiyorsunuz bu fonksiyon sizin belirlediğiniz sınırlar içersinde kısıtlıyor.

Sizin kodunuzdaki val değişkenini 600 ve 800 aralığında olmasını istemişsiniz.

Eğer val değişkeni 600den küçük ise fonksiyon size 600 değerini döndürür.
Eğer val değişkeni 800den büyük ise fonksiyon size 800 değerini döndürür.
Eğer val değişkeni 600 ile 800 aralığında bir değer ise fonksiyon size aynı değeri döndürür.

Constrain kelime anlamı = Sınırlamak,zorlamak,mecbur etmek.

Şimdi constraini anladım ama işin Map kısmında takılıyorum. Bu kod istenilen gibi çalışmıyor. Map kısmında hata var. Yani ayar hatası.

mistek

Alıntı yapılan: mfurkan7 - 13 Ekim 2013, 00:59:48
Şimdi constraini anladım ama işin Map kısmında takılıyorum. Bu kod istenilen gibi çalışmıyor. Map kısmında hata var. Yani ayar hatası.

Map nasıl çalışması gerekiyor ?

http://arduino.cc/en/Reference/map
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mfurkan7

Yok hocam ben bunu anlayamıyacağım sanırım. Neden fromLow dan to Low yapılıryor ya da tam tersi fromHigh to High. Amacımız ne bunu yapmada? Nerelerde kullanacağız bunu? Kullanmazsak böyle birşeyi ne olur? Bunun işleyişi nasıl adım adım bakarsak? ve aklımda buna benzer birçok soru oluşuyor. Bence burada çok yüzeysel geçmiş ya da bana öyle geliyor. Acemi olduğum için.

Klein

#9
Diyelim ki;
bir analog girişin var.  Giriş boşken yani 0 iken ADC değerin 200,  giriş max iken de ADC değerin 600.

bir de ekranın var. giriş boşta yani 0 iken  ekranda 0,  giriş max iken Ekranda 1000 görünsün istiyorsun.


işte bu map(...) fonksiyonu bu işe yarıyor.

Not: Bunları @mistek tarafından verdilen linkteki fonksiyon bakarak söylüyorum.

mfurkan7

Hocam varya bu kadar iyi açıklanırdı sen çok yaşa :D