Mostrando entradas con la etiqueta mouse. Mostrar todas las entradas
Mostrando entradas con la etiqueta mouse. Mostrar todas las entradas

PAN3401 y PAN3101 - A2636 pinout








Pinout con arduino:

PIN 7 - SCLK    a digital 2 de Arduino
PIN 8 - SDIO    a digital 3 de arduino
PIN 4 - GND     a GND de arduino
PIN 5 - VCC     a VCC de arduino


Codigo:

// This example reads out the PixArt PAN3101 Optical Navigation Sensor
// It's used in many cheap optical mouses.
//
// For support for the Agilent ADNS-2051, ADNS-2083 or ADNS-2610, move
// the files for your mouse to the folder with the OptiMouse files.
// Then uncomment the right header files and object instances below.
//
// The Arduino will keep track of a (x, y) coordinate by increasing
// or decreasing the x and y variables by dx and respectively dy.
// Every 128th sample it reports the current (x, y) over the Serial.
//
// Written by Martijn The -> post [at] martijnthe.nl
// Tutorial: http://www.martijnthe.nl/optimouse/
// Based on the sketches by Beno�t Rousseau

#include "PAN3101.h"
// #include "ADNS2051.h"
// #include "ADNS2610.h"
// #include "ADNS2083.h"

#define SCLK 2                            // Serial clock pin on the Arduino
#define SDIO 3                            // Serial data (I/O) pin on the Arduino

PAN3101 Optical1 = PAN3101(SCLK, SDIO);   // Create an instance of the PAN3101 object
// ADNS2051 Optical1 = ADNS2051(SCLK, SDIO);
// ADNS2610 Optical1 = ADNS2610(SCLK, SDIO);
// ADNS2083 Optical1 = ADNS2083(SCLK, SDIO);

signed long x = 0;                        // Variables for our 'cursor'
signed long y = 0;                        //

int c = 0;                                // Counter variable for coordinate reporting

void setup()
{
  Serial.begin(38400);
  Optical1.begin();                       // Resync (not really necessary?)
}

void loop()
{

//  The status commands are available only for the PAN3101 and the ADNS2051:

//  Optical1.updateStatus();                // Get the latest motion status
//  if (Optical1.motion())                  // If the 'Motion' status bit is set,
//  {

    x += Optical1.dx();                   // Read the dX register and in/decrease X with that value
    y += Optical1.dy();                   // Same thing for dY register.....

//  }
 
  if (c++ & 0x80)
  {                                       // Report the coordinates once in a while...
    Serial.print("x=");
    Serial.print(x, DEC);
    Serial.print(" y=");
    Serial.print(y, DEC);
    Serial.println();
    c = 0;                                // Reset the report counter
  }
}


Leer mouse ps2 o USB con arduino y enviar datos a C#

*** Libreria PS2 en DRIVE ***

Para mouse con conector PS2

pin 5 (CLOCK) -> Arduino digital 6
pin 1 (DATA)   -> Arduino digital 5
pin 4 (VCC)      -> Arduino VCC
pin 3 (GND)      -> Arduino GND

Codigo Arduino:

#include <ps2.h>

PS2 mouse(6, 5);

void mouse_init()
{
  mouse.write(0xff);  // reset
  mouse.read();  // ack byte
  mouse.read();  // blank */
  mouse.read();  // blank */
  mouse.write(0xf0);  // remote mode
  mouse.read();  // ack
  delayMicroseconds(100);
}

void setup()
{
  Serial.begin(9600);
  mouse_init();
}

void loop()
{
  char mstat;
  int mx;
  int my;

  mouse.write(0xeb);  // give me data!
  mouse.read();      // ignore ack
  mstat = mouse.read();
  mx = mouse.read();
  my = mouse.read();

  if (mx != 0)
  {
    if (mx > 200)
      Serial.println("L");
    if (mx < 200)
      Serial.println("R");
  }

  if (my != 0)
  {
    if (my > 200)
    {
      Serial.println("D");
    }
    if (my < 200)
      Serial.println("U");
  }
}


Codigo C#

*** Agregar un timer con intervalo 1 ***

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace Mouse3
{
public partial class MainForm : Form
{
SerialPort port = null;
bool U, D, L, R = false;
static int inc = 10;

public MainForm()
{
InitializeComponent();
}

void MainFormLoad(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();

foreach (string p in ports)
{
   port = new SerialPort(p, 9600);
   if (port.PortName == "COM15")  
break;
}

port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
}

  void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
  int n = 0;
  int count = port.BytesToRead;
while (count > 0)
{
   n = port.ReadByte();
 
   var letra = Convert.ToChar(n);
 
   switch (letra)
   {
    case 'U': U = true; break;
case 'D': D = true; break;
case 'L': L = true; break;
case 'R': R = true; break;
   }

   count--;
}

        }
 
void Timer1Tick(object sender, EventArgs e)
{
if (U)
{
pic1.Top-=inc;
U = false;
}
if (D)
{
pic1.Top+=inc;
D = false;
}
if (L)
{
pic1.Left-=inc;
L = false;
}
if (R)
{
pic1.Left+=inc;
R = false;
}
}
}
}




Para mouse con conector USB


Verde (CLOCK)  -> Arduino digital 6
Blanco (DATA)   -> Arduino digital 5
Rojo (VCC)          -> Arduino VCC
Negro (GND)       -> Arduino GND

El codigo para arduino es el mismo.


-------------------------------------------------------------------------------------------------------------


Fuentes:
http://playground.arduino.cc/ComponentLib/Ps2mouse


http://sohilpatel.org/arduino-ps2-mouse/


PARA MOUSE USB:
http://www.msx.org/forum/msx-talk/hardware/use-10eu-connect-modern-mouse-msx