salut a tous,
je viens de développer un petit programme qui permet d'émuler le déplacement d'une souris a l'aide d'un arduino leonardo et d'un accéléromètre de chez tinkerkit.
ayant rencontré un petit souci en testant l'émulation HID, j'ai décidé de bricoler vite fait une porte de sortie afin d'éviter que ça foute le bordel sur mon ordi dès que je branche l'usb (pour info, mon leonardo émulait un clavier et envoyait des caractères non-stop sur mon PC ce qui m’empêchait de le reprogrammer).
Pour faire vite, j'ai donc utilisé la méthode suivante : j'ai court-circuité entre le +5V et lepin_8 de mon arduino et dans mon prog, les actions de type "commandes HID" sont encapsulées dans une condition "if(pin_8==HIGH);".
le problème, c'est que quand je connecte le "shunt" ça se met bien sur ON, par contre, lorsque je déconnecte le shunt il faut entre 6 et 10 secondes à l'arduino pour le prendre en compte.
Ma méthode est-elle foireuse (il semble que oui a la vue du résultat) ? et pourquoi ?
merci d'avance.. je joins mon programme au cas ou ça interresse quelqu'un (d'autant que les sites de tinkerkits sont un peu foireux aussi ce qui rends difficile la recherche d'infos sur leurs accelerometres (ref : t000020 ver2).
//-----------------------------------------------------------------// // EXCLUSIVEMENT POUR ARDUINO LEONARDO // // ce programme permet d'emuler le déplacement de la souris // // grace a un accelerometre connecté à un arduino leonardo // // cet algorithme gère 2 axes et est "3 axes ready" c'est à dire // // que les lignes gèrant l'axe Z sont présentes en annotation. // // par Thermo_nono / le 11-06-2015 // // // // axe X => AO // // axe Y => A1 // // axe Z => A2 // // LED => pin_13 // // interrupteur => ON si +5V sur pin_8 / OFF si 0V sur pin_8 // //-----------------------------------------------------------------// int Xread; int Xrest; double Gx; int sensorpinX = 0; int Yread; int Yrest; double Gy; int sensorpinY = 1; // int Zread; // int Zrest; // double Gz; // int sensorpinZ = 2; int interrupteur=8; void setup() { pinMode(interrupteur,INPUT); // initialisation du senseur, ne pas le toucher pendant deux secondes Serial.begin(9600); digitalWrite(13, HIGH); delay(1000); Xrest = analogRead(sensorpinX); // initialisation de la position du senseur X Yrest = analogRead(sensorpinY); // initialisation de la position du senseur Y // Zrest = analogRead(sensorpinZ); // initialisation de la position du senseur Y Serial.print("init X : "); Serial.print(Xrest); Serial.print(" / init Y : "); Serial.print(Yrest); Serial.println(" "); // supprimer cette ligne pour activer l'axe Z // Serial.print(" / init Z : "); // Serial.println(Zrest); digitalWrite(13, LOW); // initialisation de l'emulation HID Mouse.begin(); } void loop() { // boucle principale int interON=digitalRead(interrupteur); Xread = analogRead(sensorpinX) - Xrest; // soustraction de la position initiale Gx = -Xread / 4; // facteur de conversion (67.584) Yread = analogRead(sensorpinY) - Yrest; // soustraction de la position initiale Gy = Yread / 4; // facteur de conversion (67.584) // Zread = analogRead(sensorpinZ) - Zrest; // soustraction de la position initiale // Gz = Zread / 4; // facteur de conversion (67.584) Serial.print("Gyroscope X : "); Serial.println(Gx); Serial.print("Gyroscope Y : "); Serial.println(Gy); // Serial.print("Gyroscope Z : "); // Serial.println(Gz); if(interON==HIGH){ Serial.println("l'interrupteur est sur ON"); // emulation HID Mouse.move(Gx, Gy); } else { Serial.println("l'interrupteur est sur OFF"); } delay(50); }