Tenho feito algumas brincadeiras com computação física e aceitei o meu primeiro projeto de um dispositivo usando microprocessador. Enquanto o componente que preciso pra terminar esse projeto não chega (fiz o pedido pelo MercadoLivre) decidi brincar com outros componentes. Como eu estou fazendo um dispositivo que vai simular alguns comandos de teclado, decidi usar o Teensy 2.0 que possibilita uma programação de HID de modo bem fácil. É incrível como é fácil fazer isso com o Teensy.

Aproveitei um módulo de joystick que já tinha e adaptei o controle do mouse.

Então aqui vai a receita: Ingredientes:

  • Teensy 2.0

  • Módulo Joystick KY-023

  • alguns fios

  • Adaptador USB

Programação

int joyPin1 = PIN_F0;
int joyPin2 = PIN_F1;
int v1 = 0;
int v2 = 0;
int v1Padrao = 0;
int v2Padrao = 0;
int passo = 20;

void setup() {
  Serial.begin(9600);
  v1Padrao = analogRead(joyPin1);
  delay(100);
  v2Padrao = analogRead(joyPin2);
}

int change(int v, int unchange, int max_state) {
  if(v > unchange) {
    return int(passo * ( v – unchange ) / (max_state – unchange));
  } else if (v < unchange) {
    return int( (v / unchange * passo) – passo );
  }
  return 0;
}

void loop() {
  v1 = analogRead(joyPin1);
  delay(100);
  v2 = analogRead(joyPin2);
  Serial.println(“—-“);
  Serial.print(v1);
  Serial.print(” – “);
  Serial.println(change(v1, v1Padrao, 1023));
  Serial.print(v2);
  Serial.print(” – “);
  Serial.println(change(v2, v2Padrao, 997) );
  Mouse.move( change(v1, 506, 1023) , change(v2, 512, 997) );
  delay(100);
}

O Esquema do Fritzing

MouseX.png

Alguma explicações

O Joystick nada mais é do que dois potenciômetros e ainda um botão (para o caso de você pressionar o joystick pra baixo). O terminal VRx e VRy estão ligados à portas analógicas do Teensy enquanto o terminal SW que é o do botão está conectado a uma porta digital (apesar de não estar sendo usado). As portas analógicas vão do valor Zero a 1023. Só que a partir de alguns testes eu descobri que em um eixo os valores vão de zero a 1023 parando em 506 quando está centralizado e o outro eixo vai de zero a 997 parando em 512. Certamente outras peças terão limites diferentes. A função change faz o serviço de adaptar o valor retornado pelos potenciômetros para o número mais interessante para a função do mouse que deverá ir de -127 a 127.

Problemas

Eu tentei fazer funcionar o botão que vem com ele como clique do mouse, contudo eu não sei por qual motivo as vezes o valor é zero e outras é 1 sem nem mexer no joystick. Outra questão é que não é sempre que ele move pro sentido correto. Não entendi o motivo. Se alguem souber, me explique.

Aqui está o resultado:

MouseX2.png