.:Info
Nick: Japala  Info
Age: 39
Location: Raahe

.:Projects by user

.:Albums

.:
Arduino + Laptop Touchpad

Author: Japala
Used time: ~3 hours
Cost:
Categories: Electronics

Testing it out

alt

Here are both the TouchPad and the 8x8 Ledmatrix hooked up to Arduino. Touchpad uses the 5 and 6 pins on Arduino and the MAX7219 utilizes the pins 10, 11 and 12. What goes were can be easy seen inside the code.


First test - Direction and buttons



TouchPad reports the movement of the finger. One gets a pair of coordinates that indicated the amount of movement and the direction from the last position. For example -12, 2 would mean a swipe towards 10 o'clock and the X-axis movement being faster.

As it turns out, even the tap functionality works perfectly.

Code:

// Arduino + Laptop TouchPad. Basic functionality
//
// http://Metku.net
// Jani Pönkkö
// 23.07.2009


#include "PS2Mouse.h"
#include "LedControl.h"

#define MDATA 5 // touchpad ps/2 data pin
#define MCLK 6 // touchpad ps/2 clock pin
#define SENSITIVITY 5 // amount of movement needed to get a reaction


LedControl lc=LedControl(12,11,10,1); // forum pin outs

PS2Mouse mouse_one(MCLK, MDATA, REMOTE);

void setup()
{
   lc.setIntensity(0,8);
   lc.shutdown(0,false); // need to take MAX out of shutdown
   lc.clearDisplay(0);
   delay(10);
 
   Serial.begin(115200);  
   mouse_one.initialize(); 
   mouse_one.set_scaling_1_1();
}

void loop()
{
  int data[2];
  mouse_one.report(data);
  Serial.print(data[0]); // Status Byte
  Serial.print(":");
  Serial.print(data[1]); // X Movement Data
  Serial.print(",");
  Serial.print(data[2]); // Y Movement Data
  Serial.println();

  // draw the initial box to the center
  lc.clearDisplay(0);

  // if no movement, light up the center block
  if(data[1]==0 && data[2]==0)
  {
    lc.setLed(0,3,3,true);
    lc.setLed(0,3,4,true);
    lc.setLed(0,4,3,true);
    lc.setLed(0,4,4,true);
  }


   // X-movement
   if(data[1]>SENSITIVITY)
   {
     lc.setLed(0,1,3,true);
     lc.setLed(0,1,4,true);
     lc.setLed(0,2,3,true);
     lc.setLed(0,2,4,true);
   }
   if(data[1]<-SENSITIVITY)
  {
    lc.setLed(0,5,3,true);
    lc.setLed(0,5,4,true);
    lc.setLed(0,6,3,true);
    lc.setLed(0,6,4,true);
  }


  // Y-movement
  if(data[2]>SENSITIVITY)
  {
    lc.setLed(0,3,1,true);
    lc.setLed(0,3,2,true);
    lc.setLed(0,4,1,true);
    lc.setLed(0,4,2,true);
  }
  if(data[2]<-SENSITIVITY)
  {
    lc.setLed(0,3,5,true);
    lc.setLed(0,3,6,true);
    lc.setLed(0,4,5,true);
    lc.setLed(0,4,6,true);
  }


  // Left button
  if(data[0]==10)
 {
    lc.setLed(0,0,6,true);
    lc.setLed(0,0,7,true);
    lc.setLed(0,1,6,true);
    lc.setLed(0,1,7,true);
 }

  // Middle button
  if(data[0]==12)
 {
    lc.setLed(0,3,6,true);
    lc.setLed(0,3,7,true);
    lc.setLed(0,4,6,true);
    lc.setLed(0,4,7,true);
 }

  // Right button
  if(data[0]==9)
  {
    lc.setLed(0,6,6,true);
    lc.setLed(0,6,7,true);
    lc.setLed(0,7,6,true);
    lc.setLed(0,7,7,true);
  }

 // some delay so one can see the leds properl

 delay(100);

}





Second test - iPod style gesture



I adapted the code a bit so it could react to a iPod style circular gesture. This could be use to speed up a motor, increase volume, turn a servo etc... hmm... a game of safe cracker perhaps... ;)

The code may not be the highest quality but it should give you the idea what is happening.

Code:

// Arduino + Laptop TouchPad. iPod style gesture
//
// http://Metku.net
// Jani Pönkkö
// 23.07.2009


#include "PS2Mouse.h"
#include "LedControl.h"

#define MDATA 5 // touchpad ps/2 data pin
#define MCLK 6 // touchpad ps/2 clock pin
#define SENSITIVITY 5 // amount of movement needed to get a reaction

LedControl lc=LedControl(12,11,10,1); // forum pin outs

PS2Mouse mouse_one(MCLK, MDATA, REMOTE);

int value;
int i;
int l;
int dir; // indicates where user is "turning" the dial

void setup()
{
   lc.setIntensity(0,8);
   lc.shutdown(0,false); // need to take MAX out of shutdown
   lc.clearDisplay(0);
   delay(10);

  Serial.begin(115200);
   mouse_one.initialize();
  mouse_one.set_scaling_1_1();

   value=7;
}

void loop()
{
   int data[2];

  mouse_one.report(data);

   // handle the leds. Made this way to combat flickering...
  for(i=7;i>=0;i--)
  {
     if(value<=i)
    {
      for(l=0;l<=7;l++)
      lc.setLed(0,l,i,true);
    }
    else
    {
      for(l=0;l<=7;l++)
      lc.setLed(0,l,i,false);
    }
  }


  // Moving to the right
  if(data[1]>SENSITIVITY)
  {
    if(dir==0) // direction is counter clockwise
   dir=-1; // dec
  }

  // Moving to the left
  if(data[1]<-SENSITIVITY)
  {
    if(dir==0) // direction is clockwise
    dir=1; // incrementation
  }

  // top of the "turn"
  if(data[2]>SENSITIVITY)
  {
    dir=0; // we got the start indication (top part of the circle)
  }

  // bottom of the "turn"
  if(data[2]<-SENSITIVITY)
  {
    if(dir==-1) // we got counter clockwise turn
    {
      if(value>0)
      {
        value=value-1;
        dir=-2; // reset the value to something non-valid
      }
    }
    if(dir==1)
    {
       if(value<7)
       {
         value=value+1;
         dir=-2; // reset the value to something non-valid
       }
    }
  }

// some delay so one can see the leds properl
delay(100);


}




Conclusion

I hope that you found this short tutorial useful. If you ever find this material useful, please, share your findings and projects with us. Either by registering here to Allthemods.com or by visiting Metku.net . Thanks.

-Jani Pönkkö







Remove this ad by registering or by logging in.

Remove this ad by registering or by logging in.




Login with your Facebook account to comment:



18.05.2011 21:49 JapalaThere should be enough information on the first page to get you started. If you want that led matrix in your build, just follow the link that I gave on MAX7219. Then there is the picture of the touchpad's connector with name of the pins. They correlate directly with the pin names found inside the code: #define MDATA 5 // touchpad ps/2 data pin --- and #define MCLK 6 // touchpad ps/2 clock pin
18.05.2011 15:51 newbie15006Great work. I'm trying to do a similar thing for my degree project. The problem is I'm a complete newbie to electronics. Do you have the schematic diagram for the hardware setup? Any help would be greatly appreciated.
10.08.2009 22:38 vikiYeah saw this one too :D
24.07.2009 15:05 JapalaHehe, that is the point. Great :)
24.07.2009 14:38 groudon185pYou just gave me some nice ideas :-)
23.07.2009 20:14 akeehI remember seeing one touchpad hanging around here, have to test something out too.