Algumas pessoas tem dificuldades em implementar código para esse joystick porque ele é resistivo e ao soltar a alavanca, ele retorna o valor para o ponto 0. Eu já escrevi um código a respeito e volto a disponibilizá-lo nesse breve artigo.
Onde comprar
Se você tem um projeto em mente, é uma boa ideia dar uma olhada no site da AutoCore Robótica e ver se tem tudo à disposição. Lá você encontrará também esse joystick (que pode ser acessado diretamente através desse link).
Esse joystick tem 3 eixos, ou seja, esquerda-direita, frente-trás e cima-baixo (apertando-o). Você pode ver sua utilização nesse video que fiz com um suporte pan-tilt. O Joystick é o mesmo, mas não está em um módulo isolado:
No código a seguir, ele atua no controle de servos-motor dentro de limítrofes definidos no próprio código. Sua utilização é simples e direta, com certeza você não terá problema em implementá-lo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#include <Servo.h> //pinos selecionados para os servos #define PIN_UD 10 #define PIN_LR 9 //uma instancia para cada servo Servo servoLeftRight; Servo servoUpDown; struct joyshield { char sel = 2; //pino do select (apertando o joystick) int leftRight = 504; //valor inicial do joystick int upDown = 511; //valor inicial do joystick int button[4] = {3,4,5,6}; //pinos digital dos 4 botoes int result = 505; //ponto central medio int lastPosLR = 0; //memoria de ultimo estado, para desligar/ligar o servo 1 int lastPosUD = 0; //memoria de ultimo estado, para desligar/ligar o servo 2 }; struct joyshield joystick; void controller(int LR, int UD){ //LR if ((LR < 500 || LR > 508) && LR != joystick.lastPosLR){ servoLeftRight.attach(PIN_LR); delay(20); servoLeftRight.write(LR); delay(300); servoLeftRight.detach(); joystick.lastPosLR = LR; } //UD if ((UD <504 || UD > 512) && UD != joystick.lastPosUD){ servoUpDown.attach(PIN_UD); delay(20); servoUpDown.write(UD); delay(300); servoUpDown.detach(); joystick.lastPosUD = UD; } } void setup(void){ controller(joystick.leftRight,joystick.upDown); pinMode(joystick.sel, INPUT); digitalWrite(joystick.sel, HIGH); for (int i=0;i<4;i++){ joystick.button[i] = i+3; pinMode(joystick.button[i],INPUT); digitalWrite(joystick.button[i],HIGH); } Serial.begin(9600); } void loop(void){ joystick.leftRight = map(analogRead(0),0,1023,40,150); Serial.print("Left/Right: "); Serial.println(joystick.leftRight); joystick.upDown = map(analogRead(1),0,1023,0,180); Serial.print("Up/Down: "); Serial.println(joystick.upDown); Serial.print("Select: "); Serial.println(digitalRead(joystick.sel)); for (int i=0;i<4;i++){ Serial.print("Button D"); Serial.print(joystick.button[i]); Serial.print(": "); Serial.println(digitalRead(joystick.button[i])); } controller(joystick.leftRight,joystick.upDown); delay(10); } |
O wiring também não tem segredo, você coloca os pinos do joystick aos pinos 9 e 10 conforme especificado no código; leva ground e VCC ao joystick e voilá!
Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.
Siga-nos no Do bit Ao Byte no Facebook.
Prefere twitter? @DobitAoByte.
Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.
Nossos grupos:
Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do bit Ao Byte – https://www.facebook.com/groups/dobitaobyte/
Projetos Arduino e Eletrônica – https://www.facebook.com/groups/projetosarduinoeletronica/
ESP8266 BR – https://www.facebook.com/groups/ESP8266BR/
Próximo post a caminho!
Você precisa fazer log in para comentar.