map(val2, 512, 1023, 0, 255)

Başlatan cann, 15 Ekim 2013, 20:45:41

cann

selamlar

2 eksen potansiyometre için koordinat formülü arıyorum (benim denediğim formüller olmadı. bazen ileri- geri pozisyonda karışıyor.

internette bir örnek buldum. anladığım dil değil:

void loop() {
val1 = analogRead(AI_Pin1);   // read the input pin
val2 = analogRead(AI_Pin2);   // read the input pin

if (val1 < 512) {
digitalWrite(DO_Dir1, LOW); // Direction Forward
val1 = map(val1, 0, 511, 255, 0);  // Integer re-map 0-255

}

if (val1 >= 512) {
digitalWrite(DO_Dir1, HIGH); // Direction Backwards
val1 = map(val1, 512, 1023, 0, 255);  // Integer re-map 0-255
}

if (val2 < 512) {
digitalWrite(DO_Dir2, LOW); // Direction Forward
val2 = map(val2, 0, 511, 255, 0);  // Integer re-map 0-255
}

if (val2 >= 512) {
digitalWrite(DO_Dir2, HIGH); // Direction Backwards
val2 = map(val2, 512, 1023, 0, 255);  // Integer re-map 0-255
}


analogWrite(DO_Pwm1, val1);
analogWrite(DO_Pwm2, val2);
}

bu yazılımda :
map(val2, 512, 1023, 0, 255);  // Integer re-map 0-255
ve
analogWrite(DO_Pwm1, val1)

protunda -basic de nasıl ifade edilir?


Kazım

#1
21:00 de bu mesaji editleyip,hitech c ile yazdigim kodu ekleyecegim.gerci hiz datası icin, pwm duty değerini de hesaplattiracağım ama henuz yazmadim.hizda kontrol edecekmisin? kodumu sadece if dongusu kullanarak yasdiğim icin sen subprosedure donusturursun.eksenler ters calisirsa val1 ve val2 icin,analog kanallarini yer degistirirsin

cann

#2
teşekkür ederim cevap için hız kontrolü var, val1 1. motorun hızını ve yönünü, val2   2. motorun hızını ve yönünü belirliyor olmalı. 512 den büyükse geri küçükse ilerii .

cann

map(val2, 512, 1023, 0, 255)

bu nasıl bir tanımlama hangi dilde,
protonda karşılığı nasıl olur, bunu kavrarsam devamını çıkarabilirim.

cann

Syntax:   
map(value, start1, stop1, start2, stop2)
Parameters:   
value   float: the incoming value to be converted
start1   float: lower bound of the value's current range
stop1   float: upper bound of the value's current range
start2   float: lower bound of the value's target range
stop2   float: upper bound of the value's target range

bunları buldum. basic de bunun karşılığı var mı?

burak ozturk

Alıntı yapılan: cann - 16 Ekim 2013, 12:21:36
map(val2, 512, 1023, 0, 255)

bu nasıl bir tanımlama hangi dilde,
protonda karşılığı nasıl olur, bunu kavrarsam devamını çıkarabilirim.

hocam bu arduino kodu val2 değeri 512 oldugunda 0 , 1023 oldugunda 255 degerini alacak fonksiyon sonunda.bir nevi oranlama olarak düşünebilirsiniz.

matematiksel fonksiyonu şu şekilde ;

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


eger fonksiyondaki işlemleri basic de uygularsanız aynı işlemi basicde yapmış olacaksınız .

tüm arduino kodları açıklamalarına aşağıdaki linkten ulaşabilirsiniz.

http://arduino.cc/en/Reference/HomePage
happy coding.

Kazım

#6
Hızı şimdi yazamayacağım zira kodu henüz dün yazdım.

Ben joystick değerini okumak için timer kurdum ve datayı sadece joystic konumu değiştikçe iletiyorum.Remotede birden çok aygıt olduğu için , örneğin pervaneler için ; bir byte deviceid + 1 byte directiondata + 1 byte packet lenght gönderiyoum. Hızı ekleyememdeki sorun L298 devresini ayrı bir modul olarak tasarladım ama henüz tespit edemediğim ( ki l298'den şüpheleniyorum ( bakıcaz artık )) bir nedende dolayı motorları döndüremedim localde de çalışmıyor. Ancak diğer kısımları test ettim.

Sağa_Geri vb. gibi yönler ara yönlerdir. 400 ile 600 arasında kalan bölge Stop yani joystiği bıraktığınızdaki konumdur. Bu mantığı joystik konumlarının haritasını çizmeden anlayamazsınız.

Hız datası için, aşağıdaki haritadan CCPR1L değeri için bir eşitlik hesabı yapmanız gerekiyor..

Ters değerler çıkarsa Analog kanallarını, programından terslemen gerekir.Yoksa ILERI - GERI yerine SAĞA veya SOLA gider.

         x0
          |
          |
          |
y0 -- 500 ------- y1023
          |
          |
          |
     x1023 

    if (( xAxisVal<400)&&(yAxisVal>400)&&(yAxisVal<600)){
        directionData=20;    // TAM_ILERI
        
    }

    if ((xAxisVal<400)&&(yAxisVal>600)){
        directionData=30;   // SAGA_ILERI
    }

    if ((xAxisVal<400)&&(yAxisVal<400)){
        directionData=40;   // SOLA_ILERI
        
    }

    if ((yAxisVal>600)&&(xAxisVal>400)&&(xAxisVal<600)){
        directionData=80;  // TAM_SAGA
    }

    if ((yAxisVal<400)&&(xAxisVal>400)&&(xAxisVal<600)){
        directionData=90;  // TAM_SOLA
    }

    if ((xAxisVal>600)&&(yAxisVal>400)&&(yAxisVal<600)){
        directionData=50;  // TAM_GERI
      
    }

    if ((xAxisVal>600)&&(yAxisVal>600)){
        directionData=60;  // SAGA_GERI
        
    }

    if((xAxisVal>600)&&(yAxisVal<400)){
        directionData=70;  // SOLA_GERI
    }

    if ((xAxisVal>400)&&(xAxisVal<600)&&(yAxisVal>400)&&(yAxisVal<600)){
        directionData=10;  // DUR
    }

    if ((tempDirect!=directionData))  {   //  joystick aynı konumdaysa remoteye data göndrme
      veriGonder(Gonderici_Buffer,BaitBoatDirection,directionData,2);
    }

    tempDirect=directionData;


   

cann

Teşekkürler Graski
çok faydalı oldu

Kazım

#8
Alıntı yapılan: cann - 16 Ekim 2013, 08:21:24
teşekkür ederim cevap için hız kontrolü var, val1 1. motorun hızını ve yönünü, val2   2. motorun hızını ve yönünü belirliyor olmalı. 512 den büyükse geri küçükse ilerii .

Bu mesajını okumamıştım . Tekrar yazmak zorunda hissettim. val1 ile 1. motoru ileri-geri  val2 ile 2. motoru ileri - geri kontrol edeceksen benim kodlarım senin uygulamana uymayacak. Kodlardaki val1= X ekseni , val2 ise Y eksinidir veya tersi

Senin, 1.motorun için benim ileri-geri. 2.motorun için sağa-sola kodlarımı kullanman lazım.Yani x ekseni1.motor, Y ekseni ile 2. motor kontrol edilecek.  1. motorun için TAM İLERİ - TAM GERİ.  2.motorun TAM SAĞA - TAM SOLA kodlarını kullan. DUR için zaten DUR kodunu kullanacaksın. Çok kafa yoramadım ama mantığı anlatabildim sanırım

Ancak potu 2 motor kontrolu  için , 2 eksende çok hassas kullanman lazım.Yanlışlıkla ara yonlere saptırma.