Skocz do zawartości

Joystick Arduino - zapytanie


Pomocna odpowiedź

Napisano

Witam. 🙂

Na forum jestem od dawna, ale dopiero teraz postanowiłem coś napisać. Tak jak w temacie moje zapytanie będzie dotyczyło joysticka do arduino. Zakupiłem ostatnio kilka do sterowania moim projektem (jak ukończę, to oczywiście wstawię na forum ) i chciałbym się dowiedzieć, czy może ktoś próbował, albo gdzieś słyszał czy można ten joystick przerobić tak, aby on nie odbijał, tzn. żeby pozostawał w ostatnim położeniu i nie wracał do punktu centralnego??

Czekam na odpowiedzi i pomoc 😉

Tylko tak się zastanawiam, czy jak zdejmę tą metalową obudowe to mi się to wszystko nie wysypie tak, że nie będę później wiedział co do czego.

możesz spróbować to ograniczyć programowo do ostatniego stanu sczytanego z joysticka (zapisywanie stanu w jakiejś zmiennej), wydaje mi się, że podobny problem był gdzieś poruszany na forum

Joy to nie przycisk, bez przeróbki mechanicznej to będzie trudno, bo przecież nie wiadomo kiedy stan ma być zapamiętany a kiedy nie. Może jakiś dodatkowy przycisk "wyzwalający" śledzenie lub po puszczeniu - "zamrażający" aktualne położenie joysticka mimo jego powrotu do neutrum?

Jeśli joystick ma służyć do pozycjonowania jakiegoś mechanizmu, to może zmień sposób sterowania na taki, by wychylanie powodowało przesuw - im głębiej wychylisz tym szybciej coś się przemieszcza a gdy puścisz i joystick powróci do pozycji neutralnej to mechanika zostaje w aktualnym położeniu. Gdy chcesz powrócić, przechylasz w drugą stronę.

Napisz co to będzie za urządzenie, może jeszcze coś komuś przyjdzie do głowy. Z drugiej strony joystick to nie stary budzik - bez przesady, jego rozmontowanie raczej nie spowoduje wybuchu setki elementów po pokoju.

Joystick zostający (bez sprężynek) jest stosowany np. w nadajnikach RC do zdalnego sterowania modeli. Tam gaz (obroty silnika samolotu) są właśnie tak zrobione by nie trzeba było siłować się przez 20 minut ze sprężynką, ale i tak wciąż trzymasz palce na drążkach. Zostawianie go bez nadzoru nie jest dobrym pomysłem, bo każdy powrót dłoni do drążka to lekkie przesunięcie pozycji, szczególnie gdy nie patrzysz na ręce.

Mialyby one sluzyc do sterowania manipulatorem. Pomysl z predkoscia zaleznie od wychylenia joya jest ciekawy tylko nie bardzo wiem jakby to rozwiazac w programie 😉

Pomysl z przyciskiem tez na pewno zostanie wykorzystany ale do jednej dodatkowej funkcji.

problem z joystickami jak na razie odszedł na bok 😉

teraz pojawił się zupełnie inny problem.

otóż tak:

napisałem program do obsługi serw za pomocą ty joysticków i dzieje się dziwna rzecz, a mianowicie serwa głupieją, tzn. cały czas drżą, a gdy przestawię joystick(max. wartość oporu) to tylko wtedy serwo ustawia się na max kat.

na lcd wyświetla mi aktualny kat położenia serwa i tam to się cuda dzieją: cyfry zmieniają się jak szalone 😃

poniżej wstawiam kod programu i proszę o jakąś pomoc.

#include

#include

LiquidCrystal lcd(32 ,30 ,28 ,26 ,24 ,22);

const int servo1 = 2;

const int servo2 = 3;

const int servo3 = 4;

const int servo4 = 5;

const int servo5 = 6;

const int servo6 = 7;

const int servo7 = 8;

const int servo8 = 9;

const int servo9 = 10;

const int servo10 = 11;

const int joyX1 = 0;

const int joyY1 = 1;

const int joyX2 = 2;

const int joyY2 = 3;

const int joyX3 = 4;

const int joyY3 = 5;

int servoVal;

Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

Servo myservo6;

Servo myservo7;

Servo myservo8;

Servo myservo9;

Servo myservo10;

void setup() {

myservo1.attach(servo1);

myservo2.attach(servo2);

myservo3.attach(servo3);

myservo4.attach(servo4);

myservo5.attach(servo5);

myservo6.attach(servo6);

myservo7.attach(servo7);

myservo8.attach(servo8);

myservo9.attach(servo9);

myservo10.attach(servo10);

lcd.begin(16, 2);

lcd.clear();

lcd.setCursor(4,0);

lcd.print("Pozycja");

lcd.setCursor(0,1);

lcd.print("Serwomechanizmow");

delay(3000);

lcd.clear();

}

void loop(){

//obrót

servoVal = analogRead(joyX1);

servoVal = map(servoVal, 0, 1023, 0, 10);

myservo1.write(servoVal);

lcd.setCursor(0,0);

lcd.print("I: ");

if (servoVal<100) lcd.write('0');

if (servoVal<10) lcd.write('0');

lcd.print(servoVal);

//koniec obrotu

//Pierwsza oś

servoVal = analogRead(joyY1);

servoVal = map(servoVal, 0, 1023, 0, 160);

myservo2.write(servoVal);

servoVal = analogRead(joyY1);

servoVal = map(servoVal, 0, 1023, 160, 0);

myservo3.write(servoVal);

lcd.setCursor(8,0);

lcd.print("II: ");

if (servoVal<100) lcd.write('0');

if (servoVal<10) lcd.write('0');

lcd.print(servoVal);

//Koniec Pierwsza oś

//Druga oś

servoVal = analogRead(joyX2);

servoVal = map(servoVal, 0, 1023, 0, 160);

myservo4.write(servoVal);

servoVal = analogRead(joyX2);

servoVal = map(servoVal, 0, 1023, 160, 0);

myservo5.write(servoVal);

lcd.setCursor(0,1);

lcd.print("III: ");

if (servoVal<100) lcd.write('0');

if (servoVal<10) lcd.write('0');

lcd.print(servoVal);

//Koniec Druga oś

//Trzecia oś

servoVal = analogRead(joyY2);

servoVal = map(servoVal, 0, 1023, 0, 160);

myservo6.write(servoVal);

servoVal = analogRead(joyY2);

servoVal = map(servoVal, 0, 1023, 160, 0);

myservo7.write(servoVal);

lcd.setCursor(9,1);

lcd.print("IV: ");

if (servoVal<100) lcd.write('0');

if (servoVal<10) lcd.write('0');

lcd.print(servoVal);

//Koniec Trzecia oś

//Obrót chwytaka

servoVal = analogRead(joyX3);

servoVal = map(servoVal, 0, 1023, 0, 160);

myservo8.write(servoVal);

//Koniec Obrót chwytaka

//Chwytak

servoVal = analogRead(joyY3);

servoVal = map(servoVal, 0, 1023, 0, 160);

myservo9.write(servoVal);

servoVal = analogRead(joyY3);

servoVal = map(servoVal, 0, 1023, 160, 0);

myservo10.write(servoVal);

//Koniec Chwytak

delay(15);

}

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...