arduino map komutu pic karşılıgı nedir ?

Başlatan emrah, 04 Haziran 2016, 12:13:37

emrah

merhabalar,

arduinoda kullanılan map komutu gibi pic te lineer oran yapmam gerekiyor fakat arduino map komutunun şu formülü uyguladığımda doğru sonuç alamıyorum

(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

yapmak istediğim ;analog sensörden gelen bilgi 0 ise çıkış 100 olsun sensörden gelen bilgi 10 iken çıkış 0 olsun

protonda bu işi yapan bir kod varmıdır yada bildiğiniz bir formül ?

mehmet

Sabit çıktı değil de aralık verseydiniz
daha iyi olacaktı.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

olemiss

Map() komutunun CCS derleyicisi için yazılmış bir karşılığı şu linkte bulunuyor: https://www.ccsinfo.com/forum/viewtopic.php?t=49501
Yazılım Mühendisi, Çevirmen.

tekosis

#3
çıkış = 100 - bilgi*10
dediğiniz işlem için bu formülü uygulamanız yeterli. komuta gerek yok ki nihayetinde komut ta arka planda bu işlemi yapacak.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Maxim

aynen her şey için extra bir komut olmasına gerek yok
sizin isteğiniz şöylede yapılabilir rahatlıkla protonda
çıkış = (-10 * gelen bilgi) + 100

excel de formülü test edebilirsiniz, doğru
gelen bilgi 0 ise çıkış 100 olacak
gelen bilgi 10 ise çıkış 0 olacak

@tekosis, senin formül hatalı sanırım.

tekosis

İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Maxim

Alıntı yapılan: tekosis - 05 Haziran 2016, 10:28:39
İkisi de ayni hocam.
evet haklısın, böyle yazınca daha net anlaşılıyor.
çıkış = 100 - (bilgi*10)





emrah

cevaplar için teşekkür ederim fakat vermiş olduğum örneğe göre bir folrmül söylemişsiniz. bana asıl dediğim gibi arduinodaki map komutu işi yapabilecek bir komut lazım. mesela ben bu işlemi PLC yaparkende kullanıyorum

şöyle örnek vereyim;

0-10 volt analog bilgiyi ben plc de 0-65535 olarak alıyorum ve bu analog bilgim loadcell den geliyor ise bunu kg ya oranlayan hazır komut var onu kullanıyorum

komut parametreleri

x1= min giriş
y1= min çıkış

x2= max giriş
y2  max çıkış

x= giriş
y=çıkış

bu min ve max degerler değişken olması gerekiyor. buna göre formulunuz nasıl olur ?

arduinoda;
(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

fakat degerleri yerine yazdıgım zaman sonuç negatif çıkıyor.


mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

emrah

programada yerlerine yazdığım zaman sonuç farklı çıkıyor
bu  değişkenleri word olarak yaptım ondanmı sıkıntı çıkıyor ? protonda int olarak ayarlayamıyoruz herhalde ?

robomaster

#11
Arduino map komutu şudur :
val = map(val, 0, 1023, 0, 63);


İçeriği budur :
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;
}


Kullandığınız derleyiciye göre değişeken tiplerini ve  kendinize göre değişken adlarını düzenleyiniz.

yas

Alıntı yapılan: emrah - 06 Haziran 2016, 11:17:30
değişkenleri word olarak yaptım ondanmı sıkıntı çıkıyor ? protonda int olarak ayarlayamıyoruz herhalde ?
protonda 16 bitlik işaretli değişken kullanmak için değişkeni SWORD olarak tanımlamak gerekli.

emrah

#13
buradaki değişkenler ne tip ?  byte ? word ? float?

mesaj birleştirme:: 06 Haziran 2016, 11:47:52

yardımlarınız için teşekkür ederim. Sword olarak değiştirince formül sonucu doğru çıkıyor .