Go Down

Topic: [Conseil] Besoin d'aide - Contrôleur Joystick (Read 171 times) previous topic - next topic

Hellmora

Feb 11, 2018, 07:33 pm Last Edit: Feb 11, 2018, 07:54 pm by Hellmora
Bonjour, j'ai besoin d'aide .
Je cherche a réaliser ce projet , mais je n'y arrive pas.
http://www.instructables.com/id/Lets-make-a-game-controller/
J'ai pris le code qu'il donne dans l'exemple ci-dessu mais il est pour une carte teensy et il me sort plusieurs erreurs que je n'arrive pas a corriger.

J'ai acheter la carte Micro Genuino
J'ai essayé différents branchement de fils, ainsi que différent code.
Je ne connais que très peu la programmation mais j'essai d'apprendre, j'ai essayé de prendre d'autres exemples mais il ne fonctionne pas.
Est-ce que quelqu'un peut m'aider.

Je n'ai pas tous mis du projet, seulement 5 switch on/off (toggle) et 2 on/off bouton pressoir.
pas de potentiomètre ni de led.
Le but est de construire un panel pour jouer avec un simulateur d'avion.


Voici le code qu'il suggère :


Code: [Select]

#include <Joystick.h>

Joystick_ Joystick;
/*

  This code is for a teensy 3.1 used in my green russian control board
  You must select the teensy board in Tools and change USB Type to Joystick

*/


//How many buttons I'm using, must equal amount of values in following array
#define NUM_BUTTONS 14 
//Which pins I have attached to my buttons
int buttonList[NUM_BUTTONS] = {2,3,4,5,6,7,8,9,10,11,12,14,15,16};

//Led intensity, so super bright LEDS aren't shining in our eyes
#define INTENSITY 200


void setup() {

 
  //Declare button pins as input with the internal pullup resistor on
  for (int i = 0; i < NUM_BUTTONS; i++)  {
    pinMode(buttonList[i], INPUT_PULLUP);
  }
 
  //Declare our LED pins as outputs
  pinMode(17, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT);
  pinMode(20, OUTPUT);
}


void loop() {
  //Read our analogue pots
  //Remember that the analogue pin numbers are different than the digital ones!

 
  //Read our button states
  for (int i = 0; i < NUM_BUTTONS; i++) {
    if (digitalRead(buttonList[i]) == HIGH) {  //Check to see if pin is HIGH
      Joystick.button(i + 1, 0);  //If pin is HIGH, button isn't pressed, so send 0
    } else {
      Joystick.button(i + 1, 1);  //If pin is LOW, button is pressed, so send 1
    }
  }
 
 
  //Special case for LED status lights
  //Check status of button and change LED accordingly
 
  if (digitalRead(12) == LOW)  //Check if button is pressed/switch flipped
    analogWrite(17, INTENSITY);  //Set corresponding LED pin to intensity level 
    else
    analogWrite(17, 0);  //Otherwise turn off
 
  if (digitalRead(7) == LOW)  //Same for other pins
    analogWrite(18, INTENSITY);
    else
    analogWrite(18, 0);
 
  if (digitalRead(9) == LOW)
    analogWrite(19, INTENSITY);
    else
    analogWrite(19, 0);
 
  if (digitalRead(11) == LOW)
    analogWrite(20, INTENSITY);
    else
    analogWrite(20, 0);
 
  Joystick.send_now();  //Send control states
  Joystick.sendState()
  delay(5);  //Slow things down a bit
}

J-M-L

#1
Feb 11, 2018, 10:55 pm Last Edit: Feb 12, 2018, 03:03 am by J-M-L
Qu'est-ce qui vous a  fait croire que le code d'un teensy aurait la moindre de chance de fonctionner sur une Arduino de base? Fallait acheter un teensy...

Il vous faut (comme mentionné dans le tuto) un arduino qui supporte le HID (la possibilité d'être reconnu comme un périphérique de contrôle par votre PC) - c'est le cas du teensy mais pas des arduino de base
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Hellmora

Le vendeur au magasin d'électronique.... et le fait que je ne connaisse pas cela vraiment.
Cependant je ne cherche qu'a apprendre.

En essayant différents code j'ai réussi à faire comprendre à l'ordinateur que je voulais qu'il soit
détecter comme un joystick.

J'ai réussi a faire détecter lorsqu'une switch au pc était a ON.
Les bouton pressoir fonctionne très bien et tandis que les switch toggle il faut que je la mette a on puis a off pour faire comme si j'avais allumer(ce qui ne me dérange pas vraiment).

Cependant lorsque je connecte plusieurs switch et que je tente des les utiliser, l'ordinateur ne réponds pas correctement il détecte des switch qui ne devrai pas être allumer.
Je me suis dis que c'était un problème de programmation dans le loop plutôt qu'un problème de HID
puisque la connexion fonctionne.

Vous me dites que ce n'est donc pas possible avec cette carte et devrai me commander une teensy pour arriver a mes fins?

merci de votre aide

voici le code que j'ai utiliser dans mes différente tentative.

Code: [Select]


// Simple example application that shows how to read four Arduino
// digital pins and map them to the USB Joystick library.
//
// Ground digital pins 9, 10, 11, and 12 to press the joystick
// buttons 0, 1, 2, and 3.
//
// NOTE: This sketch file is for use with Arduino Leonardo and
//       Arduino Micro only.
//
// by Matthew Heironimus
// 2015-11-20
//--------------------------------------------------------------------

#include <Joystick.h>

Joystick_ Joystick;

void setup() {
  // Initialize Button Pins
  pinMode(7, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 9;

// Last state of the button
int lastButtonState[4] = {0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 4; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}



J-M-L

#3
Feb 12, 2018, 03:06 am Last Edit: Feb 12, 2018, 03:15 am by J-M-L
Euh j'ai dit n'importe quoi ci dessus - lu trop vite votre post et pensé à un arduino de base

 le Micro ou micro pro utilise le chip ATMega32u4 et donc offre le HID

pinMode(7, INPUT_PULLUP); ça ne devrait pas être 7 mais 9 --> les 4 pins boutons sont 9,10,11 et 12 d'après le code et doivent être en input pullup

Le câblage doit être le suivant

Pin <---> bouton <---> GND

Est ce bien ce que vous avez fait?
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

lesept


Hellmora

Merci pour le lien je vais regarder, sinon concernant les input_pullup et le filage c'est beau.
Je savais pour la pin 7 vs 9... je l'avais changer mais sur la carte elle était bien installer.
les 7 switchs sont grounder ensemble puis un seul fil rejoint la pin du ground.
Un peu comme le guide que j'ai tenté de suivre était fait.

Sur le 2ème code que j'ai mis, j'ai la ligne de code suivante qui semble avoir un impact lorsque je change les chiffres mais je ne comprends pas l'impact réel qu'il sert.
est-ce que ça peut avoir un lien?

int lastButtonState[4] = {0,0,0,0};

merci de votre aide encore une fois

Hellmora

ohh je viens de trouver  :)

voici le code que je vais finalement utiliser.

Mes 7 pin fonctionnes et communiques sans bordel à l'ordinateur.
il ne me reste qu'à apprendre le principe des switch toggle (High/Low) et tout fonctionnera
Merci de votre aide... et si quelqu'un a la réponse n'hésiter pas.
ce sont pour les pin # 6 à #10

Code: [Select]





#include <Joystick.h>

Joystick_ Joystick;

void setup() {
  // Initialize Button Pins
 
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
     
  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 6;

// Last state of the button
int lastButtonState[7] = {0,0,0,0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 7; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}




HotHexus

Je n'ai jamais eu aucun problème avec ce tuto : https://www.instructables.com/id/Arduino-LeonardoMicro-as-Game-ControllerJoystick/

Go Up