J'ai refais mon câblage il faut donc pas tenir compte du post #16 mais du post #18 concernant le câblage c'est exactement ce que j'ai fait
je zappe en règle général les images en couleur .... mais passe vontiers du temps sur les schémas ![]()
je vois ici un bouton de joystick relié à 6

alors que le code montré au même message #16 définit cela :
const int mouseButton = 3; // input pin for the mouse pushButton
Donc je remplace
const int mouseButton = 3; // input pin for the mouse pushButton
par
const int mouseButton = 6; // input pin for the mouse pushButton ?
oui ! le code doit impérativement connaître la réalité du câblage, là il attendait sur D3 l'action sur le bouton du joystick
Je viens donc de faire la modification, le problème c'est quand je fais le transfert des données, la souris se met à cliquer n'importe comment !
activer le pull up interne pour l'entrée 6 reliée au bouton du joystick, sans cela étant en lair , comme une antenne, elle change d'état de manière aléatoire
pinMode(mouseButton, INPUT_PULLUP); // the switch pin
et fare de même pour l'autre bouton
C'est bien expliqué ici : https://www.locoduino.org/spip.php?article122
C'est à dire ? Désolé mais je débute lol
Apprendre à pêcher ou donner un poisson ?
Un simple bouton - Arduino : premiers pas en informatique embarquée • Tutoriels • Zeste de Savoir
J'ai bien remplacé pinMode(switchPin, INPUT); // the switch pin par pinMode(mouseButton, INPUT_PULLUP); // the switch pin mais la nouveau bug le clic gauche reste maintenu malgré que j'ai relâché le bouton poussoir.
/*
JoystickMouseControl
Controls the mouse from a joystick on an Arduino Leonardo, Micro or Due.
Uses a pushbutton to turn on and off mouse control, and a second pushbutton
to click the left mouse button.
Hardware:
- 2-axis joystick connected to pins A0 and A1
- pushbuttons connected to pin D2 and D3
The mouse movement is always relative. This sketch reads two analog inputs
that range from 0 to 1023 (or less on either end) and translates them into
ranges of -6 to 6.
The sketch assumes that the joystick resting values are around the middle of
the range, but that they vary within a threshold.
WARNING: When you use the Mouse.move() command, the Arduino takes over your
mouse! Make sure you have control before you use the command. This sketch
includes a pushbutton to toggle the mouse control state, so you can turn on
and off mouse control.
created 15 Sep 2011
updated 28 Mar 2012
by Tom Igoe
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/JoystickMouseControl
*/
#include "Mouse.h"
// set pin numbers for switch, joystick axes, and LED:
const int switchPin = 2; // switch to turn on and off mouse control
const int mouseButton = 6; // input pin for the mouse pushButton
const int xAxis = A0; // joystick X axis
const int yAxis = A1; // joystick Y axis
const int ledPin = 5; // Mouse control LED
// parameters for reading the joystick:
int range = 12; // output range of X or Y movement
int responseDelay = 5; // response delay of the mouse, in ms
int threshold = range / 4; // resting threshold
int center = range / 2; // resting position value
bool mouseIsActive = false; // whether or not to control the mouse
int lastSwitchState = LOW; // previous switch state
void setup() {
pinMode(mouseButton, INPUT_PULLUP); // the switch pin
pinMode(ledPin, OUTPUT); // the LED pin
// take control of the mouse:
Mouse.begin();
}
void loop() {
// read the switch:
int switchState = digitalRead(switchPin);
// if it's changed and it's high, toggle the mouse state:
if (switchState != lastSwitchState) {
if (switchState == HIGH) {
mouseIsActive = !mouseIsActive;
// turn on LED to indicate mouse state:
digitalWrite(ledPin, mouseIsActive);
}
}
// save switch state for next comparison:
lastSwitchState = switchState;
// read and scale the two axes:
int xReading = readAxis(A0);
int yReading = readAxis(A1);
// if the mouse control state is active, move the mouse:
if (mouseIsActive) {
Mouse.move(xReading, yReading, 0);
}
// read the mouse button and click or not click:
// if the mouse button is pressed:
if (digitalRead(mouseButton) == HIGH) {
// if the mouse is not pressed, press it:
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT);
}
}
// else the mouse button is not pressed:
else {
// if the mouse is pressed, release it:
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
}
delay(responseDelay);
}
/*
reads an axis (0 or 1 for x or y) and scales the analog input range to a range
from 0 to <range>
*/
int readAxis(int thisAxis) {
// read the analog input:
int reading = analogRead(thisAxis);
// map the reading from the analog input range to the output range:
reading = map(reading, 0, 1023, 0, range);
// if the output reading is outside from the rest position threshold, use it:
int distance = reading - center;
if (abs(distance) < threshold) {
distance = 0;
}
// return the distance for this axis:
return distance;
}```
Bonjour à tous
Bon ca y est ! Première partie de l'objectif atteint
la création d'un joystick avec le clic gauche est désormais fonctionnel. Je me suis basé sur ce modèle et là et ça fonctionne.
Deuxième partie maintenant créer un contacteur à souffle pour réaliser un clic droit et gauche. Pour cela j'ai commandé ce module.
salut, j'arrive un peu après la bataille, mais je vais pas me gêner pour jouer mon monsieur je sais tout!
plutot qu'un tube creux dans lequel on souffle (et qui viendra déclencher l'action correspondante, quelqu'elle soit), est-ce qu'un tube plein avec une protubérance à un embout dans lequel on vient mordre et qui propage la déformation jusqu'à l'autre extrémité pourrait faire l'affaire?
je pense aux systèmes pneumatiques qu'on pose sur les routes pour compter les passages de voitures, ou simplement à la déformation d'un ballon de baudruche qu'on vient pincer d'un coté (et qui regonfle de l'autre).
Si je pense à ça, c'est surtout à cause de certains avantages qui me viennent à l'esprit:
- le contacteur pourrait être un simple bouton poussoir qui sera activé par la déformation du tube;
- on peut maintenir le contact tant qu'on serre les dents sur l'extrémité (par rapport à une expiration) -> clic court ou clic long;
- on peut envisager une mesure d'intensité en fonction de l'effort appliqué sur le tube (peut etre plus accessible que "souffler avec une certaine force");
- enfin, on s'astreint de certaines problématiques liés aux tubulures (nettoyage des conduits, accumulation d'humidité).
voilà, dans le meilleur des cas ça vous fera sourire, sinon je vous aurais un peu ennuyé avec tout ça.
@GrandPete je vois de quoi tu parles. Tu parles de ce contacteur buccale par exemple ?
Personnellement depuis que j'utilise le système de contacter un souffle j'ai trop l'habitude de ce système. Donc tu sais ce que c'est que les habitudes, ce n'est pas évident d'en changer lol
Merci pour ton retour (et tant pis pour mon brevet lol).
du coup ça existe bien et tu as l'air familier du mécanisme!
si tu sais déjà pécher, trouves toi un cuistot! ça fera 2 heureux.
Malheureusement en ce qui concerne toutes ces techniques j'ai fait énormément le tour et j'en suis arrivé à justement devoir faire mon propre matériel car sinon c'est hors de prix. Voilà pourquoi me voilà arrivé dans votre communauté lol
et bien je trouve que c'est une bien belle démarche, dommage qu'elle soit poussée par des exigences capitalistes!
on a tous une bonne raison d'atterrir ici, j'espère voir d'autres de tes projets!
J'en ai d'autres dans ma tête donc je pense qu'on se reverra lol
Bonjour
Toujours en relation avec la création de mon Joystick , entre la direction X et Y, est-ce qu'il est possible de réaliser un déplacement en diagonale ?
tu veux bien preciser?
si je me souviens bien, tu as 2 "capteurs de souffle" qui peuvent activer chacun un switch.
est ce que tu obtiens des valeurs disons analogiques? (j'entends par là pas juste cliqué/pas cliqué) par exemple en modulant le souffle?
est ce qu'il est possible de souffler dans les 2 en meme temps?
en tout cas si tu as deja la possibilité de récuperer des valeurs analogiques sur 2 axes, il sera assez facile de les combiner.
je dis facile, mais quand je le fais moi meme, cest rarement très propre ou élégant en termes de code.
J'ouvre un if statment qui s'appuie sur la valeur d'un des 2 axes (genre : Y est-il different de sa position centrale?) et à l'l'intérieur de cette boucle je fais pareil avec le 2eme axe.
Avant de clôturer la 1ere boucle, le code a à sa disposition les 2 valeurs, et je peux mettre les actions correspondantes.
une manière plus lisible et élégante pourrait etre d'utiliser les "switch case" mais je n'ai pas d'expérience avec.
Et bien avec le Joystick , lorsqu'on appuie sur la manette du haut ça monte, manette du bas ça descend, la manette de droite c'est la droite, la manette de gauche à gauche. Mais ma question était, si avec la manette si on voudrait aller en diagonale ! Est-ce que c'est possible ?