Arduino Leonardo Joystick Sorunu
  • Merhaba Arkadaşlar,

    Arduino Leonardo ile joystick yapmaya çalışmaktayım. Joystick library'isinde

    "class Joystick_
    {
    private:
    bool autoSendState;
    int8_t xAxis;
    int8_t yAxis;
    int8_t zAxis;
    int16_t xAxisRotation;
    int16_t yAxisRotation;
    int16_t zAxisRotation;
    uint32_t buttons;
    uint8_t throttle;
    uint8_t rudder;
    int16_t hatSwitch[2];"

    böyle bir bölüm var. Şimdi ben hx711 den okuduğum veriyi map komutu ile 0,255 arasında düzenleyip rudder'a yazıyorum. Gayet iyi çalışıyor. Sorunum şu int16_t xaxisrotation adlı bölüm 16 bit çözünürlüğe sabit değilmi ? Ben map komutunu 0,65535 arası yaptığımda o aralıkta çalışmıyor hala 0,255 aralığında çalışıyor ama kütüphanede x-y-z axisrotation'lar int16_t.Bunun nedeni nedir acaba ?

    Şimdiden Teşekkürler....
  • int16_t işaretli sayı. -32768 ile +32767 arasındaki sayıları alır. Joystick üzerindeki analoglar merkezden bir tarafa gidince artı, diğer tarafta eksi değer üretirler.

    İşaretsiz sayı türlerinin başında u (unsigned) eki bulunur. uint16_t gibi.
  • peki o zaman 0,32767 aralığını kullanabilir miyim ?
    yani map komutuna 0,255 yerine 0,32767 yazsam bendeki değerler loadcell den hx711 aracılığı ile geldiğinden negatif değer olmadığından düzgün çalışması gerekmez mi ?
  • 0,32767 aralığını kullanabilirsin ama çalışıp çalışmayacağını bilemem.
  • word skala=map(deger,0,5000,0,32767); şeklinde yazıyorum ama denetim masası>aygıtlar>gamepad ayarlarından baktığımda pedal sona gelene kadar 3-4 kadar sil baştan doluyor aralık yani gene 0,255 arası çalışıyor çözemedim bir türlü ?
  • Kodu görmeden bişey demek zor.
  • void loop() {
    if(Serial.available()>0)
    gelen=Serial.read();
    if(gelen== 'H'){
    seri=1;
    ayar();
    }
    clutch.set_scale(110);brake.set_scale(66);throttle.set_scale(110);
    clutch_value=(clutch.get_units(3));
    brake_value=(brake.get_units(3));
    throttle_value=(throttle.get_units(3));

    if (clutch_value<20) clutch_value=0; <br />if (clutch_value>65500) clutch_value=0;
    if (brake_value<20) brake_value=0;<br />if (brake_value>65500) brake_value=0;
    if (throttle_value<20) throttle_value=0;<br />if (throttle_value>65500) throttle_value=0;

    cvalue_map =map(clutch_value,0,5200,0,255);
    bvalue_map=map(brake_value,0,2300,0,255);
    tvalue_map=map(throttle_value,0,5200,0,32767);
    if (cvalue_map>200) cvalue_map=255;
    if (bvalue_map>200) bvalue_map=255;
    if (tvalue_map>300) tvalue_map=350;
    Joystick.setRudder(bvalue_map); // 8-bit library'de
    Joystick.setThrottle(cvalue_map); // 8 bit library'de
    Joystick.setYAxisRotation(tvalue_map); //int16 library'de
    }
  • Pedala sonuna kadar bastığında hangi değeri üretiyor? Yukarıda "if (throttle_value>65500)" şeklinde koşul belirlemişsin. 65500 olma şansı var yani? Peki aşağıdaki 5200 ne?

    throttle_value değişkeninin türü nedir? uint16_t (word) mi? Öyleyse ilgili map fonksiyonunu silip şu şekilde denesen.
    Joystick.setYAxisRotation(throttle_value / 2);
  • pedala sonuna kadar bastığımda 5200 değerini üretiyor şimdilik. Orjinal yayı takınca 65500 e kadar olacak. throttle_value programın başında word olarak tanımlı.
    map fonksiyonunu kaldırıp sizin yazdığınızı denediğimde de aralık sonuna kadar 3 4 kere doluyor. yani doluyor başa dönüp yeniden doluyor ve 4.' den sonra 5. yarım doluyor

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.