Pages: [1]   Go Down
Author Topic: initialisation souris optique ???  (Read 609 times)
0 Members and 1 Guest are viewing this topic.
paris
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
je suis nouveau sur le forum, l'arduino (duemilanove) et la programmation, ça fait pas mal de nouveauté pour moi ! smiley
j'essaye de récupérer les données x,y d'une souri à base de ADNS 2051 (d'un mac) avec du code trouvé (et traficoté)  ça et là !
ça marche presque mais lorsque je débranche l'arduino et que je la rebranche,
il me faut débrancher le +5v  de la souris à chaud, la rebrancher , puis réinitialiser l'arduino... avant de pouvoir lire des valeurs cohérentes.
bizarre et pas très performant !!!
une idée ???

merci  d'avance !!!

je colle mon code ci dessous :

//////////

//credits : http://www.bidouille.org/hack/mousecam

/////
/////ATTENTION DÉBRANCHER ET REBRANCHER L'ALIMSOURIS POUR QUE ÇA MARCHE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/// PUIS RESETER L'ARDUINO  !!!!!!!!
///

////////////////////////////////definition/declaration pour la lecture optique///////////////////////////////////////////
#include <LiquidCrystal.h>

//#define PD 4 bouton pour plus tard.......

#define REG_MOTION 0x02
#define REG_DELTA_X 0x03
#define REG_DELTA_Y 0x04
#define REG_CONFIG_BITS 0x0A
int dumpWidth = 128; // Number of pixels to read for each frame.
byte frame[128];

LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // initialize the library with the numbers of the interface pins
#define SCLK 2
#define SDIO 3
float x=0; //variable pour stoker le nombres de pas

//int incomingByte = 0;   // for incoming serial data
////////////////////////////////////////////////////////////
void setup() {
 

 
reset();
  byte config = readRegister(REG_CONFIG_BITS);
  config |= B00000001; // Don't sleep (LED always powered on).
  writeRegister(REG_CONFIG_BITS, config);
 
   Serial.begin(115200);
 lcd.begin(16, 2);
   lcd.setCursor(0, 0);
   lcd.print(" machin");
   delay (1000);
   lcd.clear();
   Serial.begin(115200);
   
   
}

void loop() {
 
if(Serial.available() > 0) { // si le port de la souris est ouvert alors.....

 }
 
  readRegister(REG_MOTION); // Freezes DX and DY until they are read or MOTION is read again.
  char dx = readRegister(REG_DELTA_X); //lecture des registres
  char dy = readRegister(REG_DELTA_Y);
 
  x=(x+dx);            // on ajoute dx à la variable x....
  lcd.setCursor(0,1);
  lcd.print(x);  //affichage.... de x
 Serial.println(x);
 
 }


////////////////////// sous programmes /////////////////
void reset() {
  pinMode(SCLK, OUTPUT);
  pinMode(SDIO, INPUT);
  //pinMode(PD, OUTPUT);
  digitalWrite(SCLK, LOW);
 // digitalWrite(PD, HIGH);
  delayMicroseconds(100);
 // digitalWrite(PD, LOW);
}

byte readRegister(byte address) {
  pinMode (SDIO, OUTPUT);

  for (byte i=128; i >0 ; i >>= 1) {
    digitalWrite (SCLK, LOW);
    digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);
    digitalWrite (SCLK, HIGH);
  }

  pinMode (SDIO, INPUT);
 delayMicroseconds(100); // tHOLD = 100us min.

  byte res = 0;
  for (byte i=128; i >0 ; i >>= 1) {
    digitalWrite (SCLK, LOW);
    digitalWrite (SCLK, HIGH);
    if( digitalRead (SDIO) == HIGH )
      res |= i;
  }

 return res;
}

void writeRegister(byte address, byte data) {
 address |= 0x80; // MSB indicates write mode.
 pinMode (SDIO, OUTPUT);

 for (byte i = 128; i > 0 ; i >>= 1) {
  digitalWrite (SCLK, LOW);
  digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);
   digitalWrite (SCLK, HIGH);
 }

  for (byte i = 128; i > 0 ; i >>= 1) {
  digitalWrite (SCLK, LOW);
  digitalWrite (SDIO, (data & i) != 0 ? HIGH : LOW);
   digitalWrite (SCLK, HIGH);
 }
 delayMicroseconds(100); // tSWW, tSWR = 100us min.
}
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'ai fait un hack dans le genre pour récupéré l'image 16*16 du capteur optique (sur ma chaine youtube si ça intéresse).
J'avais eu un problème semblable en ajoutant un delay de 5s au démarrage de l'arduino le capteur sembler de nouveau fonctionner correctement (j'avais un ADNS2610 mais le principe doit être le même) de plus si ce capteur ce comporte comme le mien il faut faire un soft reset avant qu'il transmette les premières données.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

paris
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai tenté les pistes que tu propose mais pour l'instant  je n'arrive pas à faire un soft reset sur la broche du 2051...
 je reste sur le coup et je tiens au courant
merci de tes conseils en tout cas !!!
Logged

Pages: [1]   Go Up
Jump to: