Manual
do
Maker
.
com
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.
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:
#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 canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.