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:

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 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!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta