Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Sobre o Joystick
Você já deve ter visto um joystick usado como controle de jogo, controle de brinquedo ou até em máquinas grandes, como os controles de escavadeiras.
O joystick tem dois potenciômetros dispostos em formação quadrada e um botão de pressão. Ele fornece as seguintes saídas:
Um valor analógico (de 0 a 1023) para a posição horizontal (coordenada X)
Um valor analógico (de 0 a 1023) para a posição vertical (coordenada Y)
Um estado digital de um botão (HIGH ou LOW)
Quando você combina os dois valores analógicos, eles formam coordenadas 2D. Essas coordenadas ficam centralizadas quando o joystick não está sendo movido. Você pode descobrir facilmente a direção real dessas coordenadas executando um código de teste, que veremos na próxima seção.
Algumas aplicações podem usar as três saídas, enquanto outras usam apenas algumas delas.
Pinagem
Um joystick usa cinco pinos.
Pino GND: conecte ao GND (0V)
Pino VCC: conecte ao VCC (5V)
Pino VRX: fornece um valor analógico para a posição horizontal (coordenada X).
Pino VRY: fornece um valor analógico para a posição vertical (coordenada Y).
Pino SW: vem do botão de pressão do joystick. Normalmente ele fica aberto. Usando um resistor de pull-up, este pino fica em HIGH quando não pressionado e em LOW quando pressionado.
Como Funciona
Movimento Esquerda/Direita
Quando você move o joystick para a esquerda ou para a direita, ele muda o sinal elétrico (tensão) no pino VRX.
Mover para a esquerda reduz a tensão a 0 volts.
Mover para a direita aumenta a tensão a 5 volts.
O Arduino lê essa tensão e a converte em um número entre 0 e 1023. Assim, 0V corresponde a 0, e 5V corresponde a 1023.
Movimento Para Cima/Para Baixo:
Da mesma forma, mover o joystick para cima ou para baixo muda a tensão no pino VRY.
Mover para cima reduz a tensão a 0 volts.
Mover para baixo aumenta a tensão a 5 volts.
O Arduino também lê essa tensão, convertendo-a em um número entre 0 e 1023, assim como no pino VRX.
Movimentos Combinados:
Quando você move o joystick em qualquer direção (não apenas puramente esquerda/direita ou para cima/para baixo), ele muda a tensão nos pinos VRX e VRY com base na sua posição em cada eixo.
Pressionando o Joystick:
Quando você empurra o joystick para baixo (como se apertasse um botão), ele aciona um botão interno dentro do joystick.
Se você conectar um resistor de pull-up ao pino SW, a tensão neste pino vai mudar de 5V para 0V quando pressionado.
O Arduino lê essa mudança como um sinal digital, mostrando HIGH (5V) quando não pressionado e LOW (0V) quando pressionado.
Em resumo, mover o joystick muda as tensões em VRX e VRY, que o Arduino lê como números entre 0 e 1023. Pressionar o joystick muda a tensão no pino SW, que o Arduino lê como HIGH ou LOW.
Diagrama de Ligação
This image is created using Fritzing. Click to enlarge image
O joystick é formado por dois componentes: uma parte analógica (eixos X e Y) e uma parte digital (um botão de pressão).
Para ler os valores dos eixos X e Y, basta usar a função analogRead() no pino de entrada analógica.
int xValue = analogRead(A1);int yValue = analogRead(A0);
Para a parte digital, que é um botão de pressão: é só um botão. Um método fácil e eficaz é usar a biblioteca ezButton. Essa biblioteca ajuda a tratar a estabilidade do botão e também ativa um sistema interno para manter o botão estável. Você pode saber mais no tutorial Arduino UNO R4 - Botão. Mostraremos como usar o código na próxima parte deste tutorial.
Depois de obter as leituras dos pinos analógicos, talvez precisemos transformá-las em valores mais fáceis de manusear. A seção a seguir traz códigos de exemplo para isso.
Código Arduino UNO R4
Aqui estão códigos de exemplo para o Arduino UNO R4:
Código de exemplo: obtém valores analógicos do joystick
Código de exemplo: obtém valores analógicos e verifica o estado do botão do joystick
Código de exemplo: transforma o valor analógico em comandos: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
Código de exemplo: transforma valores analógicos em ângulos para controlar dois servo motores (como em uma câmera pan-tilt)
Lê valores analógicos do joystick
/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick*/#define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin#define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pinint xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisvoidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// print data to Serial Monitor on Arduino IDESerial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.println(yValue);delay(200);}
Ligue o joystick ao Arduino UNO R4 conforme o diagrama fornecido.
Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
Abra a Arduino IDE no seu computador.
Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
Copie o código acima e abra-o na Arduino IDE
Clique no botão Upload na Arduino IDE para carregar o código no seu Arduino UNO R4
Empurre o manete do joystick até a borda e depois gire-o em círculo (no sentido horário ou anti-horário)
Verifique os resultados no Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
Ao girar o joystick, fique de olho no Serial Monitor. Se o valor de X mostrar 0, lembre-se dessa posição como esquerda; o oposto é direita. Se o valor de Y for 0, anote essa posição como para cima; o oposto é para baixo.
Lê valores analógicos e lê o estado do botão de um joystick
/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick*/#include <ezButton.h>#define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin#define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin#define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pinezButtonbutton(SW_PIN);int xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisint bValue = 0; // To store value of the buttonvoidsetup() {Serial.begin(9600) ;button.setDebounceTime(50); // set debounce time to 50 milliseconds}voidloop() {button.loop(); // MUST call the loop() function first// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// Read the button value bValue = button.getState();if (button.isPressed()) {Serial.println("The button is pressed");// TODO do something here }if (button.isReleased()) {Serial.println("The button is released");// TODO do something here }// print data to Serial Monitor on Arduino IDESerial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.print(yValue);Serial.print(" : button = ");Serial.println(bValue);}
Passos Rápidos
Vá até o ícone Libraries no lado esquerdo da Arduino IDE.
Procure por “ezButton” e encontre a biblioteca de botão do ArduinoGetStarted.com
Pressione o botão Install para adicionar a biblioteca ezButton.
Copie o código e abra-o na Arduino IDE.
Clique no botão Upload na Arduino IDE para carregar o código no Arduino UNO R4.
Mova o manete do joystick para a esquerda, direita, para cima ou para baixo.
Pressione a parte de cima do joystick.
Verifique os resultados no Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
Converte o valor analógico em comandos MOVE LEFT/RIGHT/UP/DOWN
/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-joystick*/#define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin#define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin#define LEFT_THRESHOLD 400#define RIGHT_THRESHOLD 800#define UP_THRESHOLD 400#define DOWN_THRESHOLD 800#define COMMAND_NO 0x00#define COMMAND_LEFT 0x01#define COMMAND_RIGHT 0x02#define COMMAND_UP 0x04#define COMMAND_DOWN 0x08int xValue = 0 ; // To store value of the X axisint yValue = 0 ; // To store value of the Y axisintcommand = COMMAND_NO;voidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// converts the analog value to commands// reset commandscommand = COMMAND_NO;// check left/right commandsif (xValue < LEFT_THRESHOLD)command = command | COMMAND_LEFT;elseif (xValue > RIGHT_THRESHOLD)command = command | COMMAND_RIGHT;// check up/down commandsif (yValue < UP_THRESHOLD)command = command | COMMAND_UP;elseif (yValue > DOWN_THRESHOLD)command = command | COMMAND_DOWN;// NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS// print command to serial and process commandif (command & COMMAND_LEFT) {Serial.println("COMMAND LEFT");// TODO: add your task here }if (command & COMMAND_RIGHT) {Serial.println("COMMAND RIGHT");// TODO: add your task here }if (command & COMMAND_UP) {Serial.println("COMMAND UP");// TODO: add your task here }if (command & COMMAND_DOWN) {Serial.println("COMMAND DOWN");// TODO: add your task here }}
Passos Rápidos
Copie o código acima e abra-o na Arduino IDE.
Clique no botão Upload na Arduino IDE para carregar o código no Arduino UNO R4.
Mova o manete do joystick para a esquerda, direita, para cima, para baixo ou em qualquer outra direção.
Verifique os resultados no Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
※ Nota:
Às vezes, pode não haver nenhum comando, haver um comando ou haver dois comandos ao mesmo tempo (por exemplo, UP e LEFT juntos).
Converte valores analógicos em ângulos para controlar dois servo motores
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!