Stránka 1 z 1

arduino joystik

Napsal: 04 črc 2017, 08:12
od BigSandy
Zdar tu všicí.
Jsem koupil od Číňanu joystik KY-023 pro ovadaní Motor Driver BTS7960

Nějak se s ním nemohu domluvit.
Každý den má úplně jíné klidové hodnoty.

Včera X: 531 Y : 528
Dnes X: 564 Y: 547

Doporučte nějaký, co by normálně fungoval.

Napsal: 04 črc 2017, 08:24
od Zaky
Měl bys sem dát schéma zapojení, alespoň okolí toho joysticku. Je to mechanická záležitost, tak nečekej, že bude návrat do neutrálu vždy tip ťop na stejnou hodnotu. Neutrály je prostě potřeba ošetřit softwarově pro určitý rozsah hodnot. Uváděnou chybu máš okolo 6%, což sice na jednu stranu není málo, na druhou stranu je to u této kategorie výrobku dost možná normální. Pro vyloučení vlivu nevhodného zapojení můžeš zkusit na potenciometr zapojit ohmmetr a vždy po zakvrdlání joystickem odečíst odpor, uvidíš, jaké rozdíly naměříš.

Napsal: 04 črc 2017, 08:25
od rnbw
Je to asi rovnaka vlastnost ako u analogoveho joysticku na PC. Jednoducho su to dva potenciometre a z principu je to nepresne. Musi sa to osetrit v SW - stredovu polohu si nakalibruj po zapnuti a pridaj k nej nejaku toleranciu.

Napsal: 04 črc 2017, 08:39
od _luky_
Přesně tohle jsem někdy v dubnu řešil na "profi" joysticku. Vyvedl jsem si hodnotu z AD převodníku na seriovou linku a čtvrt hodiny jsem tady s tim kvedlal, abych zjistil, co všechno může být klidová poloha. K tomu jsem ještě kousek přidal (pro sichr) a funguje to skvěle.

Napsal: 04 črc 2017, 08:52
od BigSandy
Vyřešeno :D

Napsal: 30 črc 2017, 08:31
od BigSandy
By byl dotaz.
Půjde toto nějak pořešít?

Středova hodnota joystiku vlevo - vpravo je 510.
Tedy 2 podmínky

Kód: Vybrat vše

if (joystick[1] > 520)
{
int vpravo = ????
}

Kód: Vybrat vše

if (joystick[1] < 500)
{
int vlevo = ????
}

Půjde v těchto podmínkách souřadnice joystiku nějak přepočítat, tak abych v každé proměnné mněl hodnotu 0 - 100?

PS: řeším otáčení vozítka přes Motor Driver BTS7960 43A.
Dopředu 0 - 255
Dozadu 0 - 255
Bych chtěl, aby při naklonění joystiku třeba do leva na 50%, odečítat s driveru co řídí levé kolo těch 50%

Napsal: 30 črc 2017, 08:46
od misocko
Skusil by som funkciu map.

Napsal: 30 črc 2017, 08:52
od BigSandy
misocko píše:Skusil by som funkciu map.

:D

Napsal: 02 srp 2017, 08:15
od BigSandy
By mně zajímalo, kde dělám kopanec.

Kód: Vybrat vše

////////////////////////////////////////////////////////////
// leve kolo
if (joystick[1] <= 500)
{
 vlevo = map(joystick[1], 0, 500, 100, 0);
}
else
{
 vlevo = 0;
}

///////////////////////////////////////////////////////////////
// Dopředu

if (joystick[0] >= 535)
                     {                       
                       dopreduPWM_pravekolo = map(joystick[0], 535, 1023, 0, 255);
                       dopreduPWM_levekolo = map(joystick[0], 535, 1023, 0, 255);
                       
                       int le = (dopreduPWM_levekolo/100)* vlevo;
                       
                       Serial.print(dopreduPWM_levekolo);
                       Serial.print("  ---  ");
                       Serial.print(vlevo);
                       Serial.print("  ---  ");
                       Serial.println(le);


Když mam joy úplně vpředu a vlevo, přes ser to vypisuje 255 --- 100 --- 200

int le = (dopreduPWM_levekolo/100)* vlevo;
dopreduPWM_levekolo/100 je 255/100, a mame jedno procento což je 2,55.
2,55 * 100 je zase 255 a ne 200

Napsal: 02 srp 2017, 11:40
od _luky_
Počítáš to jako "int" což je celé číslo. A tedy 255/100 je 2, nikoli 2.55. Já jsem se trápil s úplně tím samým (joystick + pohon dvěma pásy). Musíš nejdřív násobit a pak teprve dělit, aby ses vyhnul desetiným číslům. A pozor na maximální hodnotu - aby ti to nepřeteklo.

Napsal: 02 srp 2017, 12:22
od BigSandy
Dik :wink: