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; if (clutch_value>65500) clutch_value=0; if (brake_value<20) brake_value=0; if (brake_value>65500) brake_value=0; if (throttle_value<20) throttle_value=0; 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