Différences entre versions de « Arduino 2axis joystick button »
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é| | + | {|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() { | ||
− | |||
Serial.begin(9600); | Serial.begin(9600); | ||
pinMode(pinSW, INPUT_PULLUP); | pinMode(pinSW, INPUT_PULLUP); | ||
Ligne 47 : | Ligne 50 : | ||
} | } | ||
− | |||
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 :
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.
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 :