Arduino Map Analog Değerlerini Değiştirme

Katılım
12 Mar 2017
Mesajlar
252
Puanları
1
Yaş
48
Merhaba,

analog_out = map(analog_deger, 0, 1023, 0, 255); satırı ile

Arduino ile 0-5V arası analog girişi PWM sinyale dönüştürüyorum.

ancak 0-2,5V arasını 0-255 olarak değiştirmek istediğimde başarılı olamıyorum.
Yani satırı aşağıdaki gibi yapıyorum. 2,5V dan sonra yine sıfıra düşüyor.
analog_out = map(analog_deger, 0, 511, 0, 255);

istediğim şu 0-2,5V arası 0-100 % pwm olacak. 2,5V dan fazla sinya gelde bile %100 kalacak
 
Siz daha fazla sadeleştirebilirsiniz. Bilerek
ayrıntılı yazdım.
C:
analog_deger1 = analogRead(A0); //0-1023
analog_deger2 = analog_deger1 >> 2; // 0-255
analog_deger3 = map(analog_deger2, 0, 127, 0, 255); //0-127 > 0-255
analog_deger = constrain(analog_deger3, 0, 255);
 
Son düzenleme:
Hocam biraz açıklar mısın? kodları anlayamadım.
2 sayısı ne işe yarıyor?
1023 neden ve nasıl 255 oldu?
bir de analogdeger2 analog_deger2 olarak düzelttim. doğru mudur?
 
Son düzenleme:
İlgili mcunun kataloğunu bol bol incelemelisiniz.
Bit maniplasyon ve Boolean matematiği konularını
çalışmalısınız.
ATMega328 de adc 10-bittir. Yani 0-1023 arasında,
1024 değer alır. ">>" ifadesi bitleri sağa kaydırır.
Burada iki kere sağa kaydırıldı, yani iki kere ikiye
bölündü. Böylece 0-255 arası değerimiz oldu.
Biz 0-127 arasını %100 istiyoruz, yani 0-255 arası
0-127 değere çevirmeliyiz. "map" koduda bu yüzden.
"constrain" de; verdiğimiz değer, istediğimiz değerler
arasında mı onu sınırlıyoruz.
C:
analog_deger = constrain(map(analogRead(A0) >> 2, 0, 127, 0, 255), 0, 255);
şeklinde yazılabilir.

Ek:
Aslında 2,5V, 0-127 arasında olmalı. Buna göre
düzenledim...
 
Son düzenleme:
Hocam yardımlarınız için çok teşekkür ederim.
0 ila 0,5V arası 0-100% oldu. 2,5 ila 5V arası %100 olarak kaldı. tam istediğim gibi oldu.
peki benim yaptığım analog_out = map(analog_deger, 0, 511, 0, 255); 512 den sonra neden çıkış %0'a düşüyor?
 
"analog_out = map(analog_deger, 0, 511, 0, 255);"
"analog_deger" -> 0-1023 arası değer geliyor. Bunu
ihmal ediyorsunuz.
"map" fonksiyonu altta, 512 ve daha büyük değerleri
elle hesaplayınız, neler çıkacak bakalım...
C:
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;
}
Bir byte, 255 değerini alabilir en fazla. Siz long bile
tanımlasanız ilgili değişkeni, pwm fonksiyonunda
"unsigned char"(uint8_t) olarak alacaktır.
 
Son düzenleme:

Forum istatistikleri

Konular
129,832
Mesajlar
930,566
Kullanıcılar
452,656
Son üye
kontrolkalemi355
Geri
Üst