Différences entre versions de « Arduino 2axis joystick button »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
(Page créée avec « = Partie électronique = == Le composant == Un joystick est composé de deux résistances variables accompagnées d'un bouton. Il ressemble à ceci: Fichier:2_axis_joys... »)
 
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
= Partie électronique =
 
= Partie électronique =
 
== Le composant ==
 
== Le composant ==
Un joystick est composé de deux résistances variables accompagnées d'un bouton. Il ressemble à ceci:  
+
Un joystick est composé de deux résistances variables accompagnées d'un bouton. Il ressemble à ceci :  
[[Fichier:2_axis_joystick.jpg|centré|100px]]
+
{|align=center
 +
| [[Fichier:2_axis_joystick.jpg|centré|200px]]  
 +
|width=20px|
 +
| [[Fichier:2_axis_joystick_desc.jpg|centré|350px]]
 +
|}
 
Ce composant va permettre de faire varier une tension (différence de potentiel) sur l'axe X ainsi que sur l'axe Y. Il faut mémoriser la valeur de départ comme valeur de référence et on sait que le joystick à bougé que si la valeur est plus petite (bas ou gauche) ou plus grande (haut et droite) que cette valeur de référence.
 
Ce composant va permettre de faire varier une tension (différence de potentiel) sur l'axe X ainsi que sur l'axe Y. Il faut mémoriser la valeur de départ comme valeur de référence et on sait que le joystick à bougé que si la valeur est plus petite (bas ou gauche) ou plus grande (haut et droite) que cette valeur de référence.
  
Ligne 30 : Ligne 34 :
  
 
void setup() {
 
void setup() {
  // put your setup code here, to run once:
 
 
   Serial.begin(9600);
 
   Serial.begin(9600);
 
   pinMode(pinSW, INPUT_PULLUP);
 
   pinMode(pinSW, INPUT_PULLUP);
Ligne 47 : Ligne 50 :
 
}
 
}
  
// loop()
 
 
void loop(){
 
void loop(){
 
   xValue = readXAxis();
 
   xValue = readXAxis();
Ligne 69 : Ligne 71 :
 
   }
 
   }
 
   if(xValue != OFF || yValue != OFF || isSW()){
 
   if(xValue != OFF || yValue != OFF || isSW()){
     Serial.println("----------");
+
     Serial.println("-------------");
 
     // Temps de pause entre lecture
 
     // Temps de pause entre lecture
 
     delay(500);
 
     delay(500);

Version actuelle datée du 21 novembre 2016 à 05:55

Partie électronique

Le composant

Un joystick est composé de deux résistances variables accompagnées d'un bouton. Il ressemble à ceci :

2 axis joystick.jpg
2 axis joystick desc.jpg

Ce composant va permettre de faire varier une tension (différence de potentiel) sur l'axe X ainsi que sur l'axe Y. Il faut mémoriser la valeur de départ comme valeur de référence et on sait que le joystick à bougé que si la valeur est plus petite (bas ou gauche) ou plus grande (haut et droite) que cette valeur de référence.

Le montage

Le montage suivant permet de récupérer les valeurs retournées par le joystick et de les afficher.

Joystick diagram.png

Partie logicielle

Voila un exemple qui affiche les différentes valeurs du joystick sur la console.

const uint8_t UP=0;
const uint8_t DOWN=1;
const uint8_t LEFT=2;
const uint8_t RIGHT=3;
const uint8_t OFF=5;

// PIN analogiques
const uint8_t pinX = A0;
const uint8_t pinY = A1;
// Pin digital
const uint8_t pinSW = 2;

// Marge de sensibilité (+/-10% de la valeur de base)
uint8_t margin=10;

int16_t baseX, baseY, xValue, yValue; 
uint16_t marginX, marginY;

void setup() {
  Serial.begin(9600);
  pinMode(pinSW, INPUT_PULLUP);
  // On récupére la valeur de référence (Joystick au repos)
  calibrate();
  Serial.println(F("Calibration datas : "));
  Serial.print(F("X base : "));
  Serial.println(baseX);
  Serial.print(F("Y base : "));
  Serial.println(baseY);
  Serial.print(F("X marge : "));
  Serial.println(marginX);
  Serial.print(F("Y marge : "));
  Serial.println(marginY);
  Serial.println(F("-------------"));
}

void loop(){
  xValue = readXAxis();
  if(xValue != OFF){
    if(xValue == UP){
      Serial.println(F("UP"));
    }else{
      Serial.println(F("DOWN"));
    }
  }
  yValue = readYAxis();
  if(yValue != OFF){
    if(yValue == RIGHT){
      Serial.println(F("RIGHT"));
    }else{
      Serial.println(F("LEFT"));
    }
  }
  if(isSW()){
    Serial.println(F("SW"));
  }
  if(xValue != OFF || yValue != OFF || isSW()){
    Serial.println("-------------");
    // Temps de pause entre lecture
    delay(500);
  }
}

uint8_t readXAxis(){
  int16_t value = analogRead(pinX)-baseX;
  if(abs(value) > marginX){
    if(value > 0){
      return UP;
    }
    return DOWN;  
  }
  return OFF;
}

uint8_t readYAxis(){
  int16_t value = analogRead(pinY)-baseY;
  if(abs(value) > marginY){
    if(value > 0){
      return RIGHT;
    }
    return LEFT;
  }
  return OFF;
}

bool isSW(){
  return digitalRead(pinSW) == 0;
}

void calibrate(){
  baseX = analogRead(pinX);
  baseY = analogRead(pinY);
  marginX = baseX*margin/100;
  marginY = baseY*margin/100;
}

Résultat

Voila le résultat :

Arduino joystick reading serial.png