Manual

do

Maker

.

com

Controle fácil do joystick com Arduino

Controle fácil do joystick com Arduino

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:

https://youtu.be/ddaPED6\_nKo

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.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.