Aller au contenu


Photo
- - - - -

latence sur mon arduino


  • Veuillez vous connecter pour répondre
3 réponses à ce sujet

#1 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 825 messages

Posté 11 juin 2015 - 02:04

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);
}



#2 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 11 juin 2015 - 08:08

Salut!

Essai de mettre une résistance entre le pin et la masse pour voir? Ou alors la résistance de rappelle sur le pin s'il yen a.

#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 11 juin 2015 - 08:30

En effet rajouter une résistance de pull down devrait résoudre le problème ;)  Sinon tu peux aussi shunter le pin avec la masse APRES avoir retirer le shunt 5V. ( Mieux vaut éviter le court circuit 5V sur masse ^^ )

Pourquoi ? Car quand tu as un pin qui est connecté à rien son état est tout simplement indéterminé. Et donc l'état de ta pin peut varier en fonction de toutes les perturbations environnantes ... Ce sont ces perturbations qui font qu'à un moment donné ta arduino voit un potentiel " Low" sur ta pin 8.

 Une résistance de tirage va fixer le potentiel de ta pin au potentiel de tirage et cette dernière sera moins perturbée. 
 

 

@+ ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#4 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 825 messages

Posté 11 juin 2015 - 08:45

merci pour ces réponses, je pense que vous avez raison, j'ai voulu aller trop vite et j'ai oublié la resistance depulldown. je vais voir comment bricoler ça...

:thank_you:






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users