Olá para todos !

   Primeiramente, é um imenso prazer estar associado a um dos fóruns de tecnologia mais importantes do país. Grato à moderação por permitir que eu faça parte desta família. 

   Amigos(as), eu até já postei esta dúvida recentemente em outro fórum. No entanto, gostaria de saber se alguém deste fórum poderia me ajudar.

   Antes de mais nada, peço desculpas por talvez demorar a responder aqueles que tentarem me ajudar, pois o tempo infelizmente não é nada meu amigo. Do nada, eu preciso realizar um serviço e a carga horária é bem indefinida. Mas, me esforçarei para não deixar ninguém no "vácuo". Eu prometo. 

   Enfim, caros(as) amigos(as), creio eu que esta dúvida requer que a pessoa que possa me dar uma grande moral, tenha um bom conhecimento em programação e em V-USB para Arduino. 

   Seguinte, galera...eu encontrei uma adaptação que podemos considerar bem recente, da biblioteca "UsbJoystick". Caso alguns não conheçam, ao realizar uma pesquisa na rede, vocês encontrarão projetos fabulosos, desde uma adaptação do controle do nintendinho para USB, até braços robóticos por controle remoto. É uma gama de coisas bacanas que o V-USB para microcontroladores AVR, permite ao usuário. 

  

    Eu achei esta adaptação fantástica, além de me parecer mais "objetiva", ela permite a implementação de incríveis oito botões. Diferente da versão anterior, que só permitia quatro. Porém, uma coisa me inferniza, seja nesta versão ou na anterior: "axis". Isto me deixa ainda mais careca do que eu já sou...

  

     Quero montar um gamepad, onde haja os oito botões e quatro direções, as direções comuns, "cima", "baixo", "esquerda" e "direita". Eu usei os pinos analógicos como default para consolidar as direções. Exemplo:

#define pinY  A0,

void setup(){

pinMode(pinY, INPUT_PULLUP);

}

void loop,(){

if(pinY == LOW){

\\digamos que ativa o direcional para "cima"

}

}

 Só que os axis na biblioteca estão configurados de acordo com o " USB descriptor"   que determina o Logical Minimum como zero e o Logical Maximum, como 127. 

  Aí, os botões que configuro para saída digital, funcionam maravilhosamente. Mas os benditos axis não. Testando um joguinho em um emulador, os axis funcionam de maneira louca. Num jogo de plano X e Y, o bonequinho vai direto para cima e se pressionamos para ir para direita, ele até vai, mas volta para a esquerda, ou seja, um inferno. 

Eu sei o seguinte: 127 em Y, vai para baixo, em X, vai para a direita. Mas quais são os valores para cima e para esquerda ? em tese, seria zero — eu acho. Mas, se ponho zero, nada acontece, não ocorre nenhum evento. Inclusive, para qualquer valor menor que zero, a biblioteca determina que valores menores que zero serão iguais a zero. Se coloco 1 , que é maior que zero e é menor que 127, ainda fica desfuncional. Voltando ao exemplo do game com plano X e Y, o bonequinho fica igual a um doido rodopiando.

   Já alterei os descriptors para 255, mas a porcaria do problema persiste. Eu não sei mais o que fazer. 

    

    Tipo...será que algum(a) fera pode me orientar na programação desses raios de axis ? se necessário, eu mando a biblioteca mais a Sketch de exemplo. Quero tanto dar um "gamepad das antigas" aos meus moleques. Se amarraram no emulador do mega drive, estão sempre jogando...  :'(

 

      No mais, obrigado a todos pela atenção e tomara que alguém possa dar esse valioso help.

                      Obrigado !

 

Exibições: 281

Responder esta

Respostas a este tópico

Oi AB, bom dia.

acredito que a função map(), atenderia sua necessidade.

exemplo:

Valor lido em A0 vai de 0 a 1023, então  xpto =   map(minhavariavel, 0,1023,-127,127);

xpto tem que ser "signed" e conterá valores de -127 até +127 (hex).

Rui

Olá, Rui ! Boa noite !

    Primeiro, perdão por somente entrar em contato agora. Cheguei há uns 40 minutos aproximadamente.Saí tarde e o trânsito ainda deu aquela "maravilhosa" ajuda. Eu tenho hora pra chegar, mas não para sair, máquinas com proxy impedindo acessos diversos no serviço, um caos. Me perdoe por só responder agora.

   Segundo, estou mesmo no fórum certo, assessorado pelos grandes deste meu Brasil. Sua sugestão foi espetacular. É muito bom ter peritos no assunto para ajudar gente como eu, meio tonto( ou completamente).

    Eu passei longe de pensar em uma função quase que "universal" como esta, a "map function". Putz ! eu não nasci para isso mesmo. Estudar sempre é o melhor mesmo para mim, pois dom é para pessoas como você.

   A sua ajuda me orientou de uma maneira muito importante. Te agradeço por esta luz de ouro.

    No entanto, eu devo estar fazendo alguma "necessidade fisiológica" ainda. Porque não consigo ainda que o raio da coisa vá para "cima" ou para a "esquerda". Ahhhhhhhh ! eu vou me enforcar, Rui !

  Veja, eu tenho duas direções em Y. Na primeira que mostrarei é para "baixo":

(dentro de um if)

 

Y1 == LOW ;   
        int downY = analogRead(0);   
   downY = map(downY,127, 1023,-127,127);
     UsbJoystick.setY(downY);

  Mas para "cima", o negócio não funfa( válido o mesmo para "esquerda").  :'(

 Y == LOW ;   
        int upY = analogRead(1);   
   upY = map(upY,0, 1023,127,-127);
     UsbJoystick.setY(upY);

 

     De toda forma, sua ajuda foi fundamental para eu seguir em uma vertente muito mais objetiva, do que a que eu estava seguindo antes.

    Obrigado !  :D

.

   

Bom dia , Rui !

 Como eu havia dito na resposta anterior, você me deu uma "luz de ouro" !

    E graças à esta grandiosa luz, eu consegui ontem pela noite, consolidar os axis corretamente !

      A idiotice de minha parte, é que na pressa(hábito de minha vida, por conta das atividades e rotinas que exerço), eu estava invertendo os valores mínimo e máximo de X e Y.

    

        Ainda coloquei um adendozinho antes de "map", que foi a designação (int). Tipo assim...

   minha variável = (int) map(parâmetros) ;

            Eu não sei como posso te agradecer. Você fez três crianças felizes: eu e meus dois moleques !

                          Muitíssimo obrigado !

       

Olá, caro Luís ! bom dia !

 

   Seria de grande valia um tópico deste gênero e sim, claro: em modo mais objetivo, tendo em vista que minha linguagem possa ter sido um pouco subjetiva, ou, talvez "avançada).

 

    Se estiver incluso neste intuito o objetivo de fazer tal tópico como uma espécie de tutorial, sem dúvida alguma, você estaria ajudando outros usuários, ou melhor dizendo, outros garagistas que não possuam ainda uma experiência vasta com Arduino e microcontroladores da família AVR.

  

     O meu intuito, graças ao Rui, foi devidamente atingido. Agora, é chegar em casa depois da batalha e montar os componentes do meu projeto, que é uma adaptação de antigos gamepads para USB, utilizando o V-USB para chips AVR.

  

     Agradeço a atenção dada ao tópico, que inclusive, já pode ser considerado como solucionado.

                          Um grande abraço !

  

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço