Go Down

Topic: Auduino + synaptics touch panel (Read 702 times) previous topic - next topic

Wishi

Apr 20, 2011, 06:56 am Last Edit: Apr 20, 2011, 07:01 am by Wishi Reason: 1
Hi everyone, i dont now if this is the right place for my post, im very sorry if its not, please move it ( sorry for my english too) i wasen't sure if this goes here or in interecative arte.

some days ago i found some laptop parts, the frames that old the keyboard, but witout the keyboard only the touchpads and some mini speakers ( pics soon ).

with a friend we manage to use a nintendo ds touch to control the auduino synth, i like to do the same with this touch module


i got working the synaptic touch panel in absolute mode with this code

Code: [Select]
#include <ps2.h>

PS2 mouse(6, 5);
unsigned int maxx,minx,maxy,miny;

void touch_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);
 mouse.write(0xe8);
 mouse.read();  // ack byte
 mouse.write(0x03); // x1  ( x1 * 64  +  x2 * 16  +  x3 * 4  +  x4   == modebyte )
 mouse.read();  // ack byte
 mouse.write(0xe8);
 mouse.read();  // ack byte
 mouse.write(0x00); // x2
 mouse.read();  // ack byte
 mouse.write(0xe8);
 mouse.read();  // ack byte
 mouse.write(0x00); // x3
 mouse.read();  // ack byte
 mouse.write(0xe8);
 mouse.read();  // ack byte
 mouse.write(0x01); // x4
 mouse.read();  // ack byte
 mouse.write(0xf3); // set samplerate 20 (stores mode)
 mouse.read();  // ack byte
 mouse.write(0x14);
 mouse.read();  // ack byte
 delayMicroseconds(100);
}

void setup()
{
 Serial.begin(9600);
 touch_init();
 maxx = 5850;
 minx = 1250;
 maxy = 4850;
 miny = 1000;
}

void loop()
{
 byte mstat1;
 byte mstat2;
 byte mxy;
 byte mx;
 byte my;
 byte mz;

 int realx;
 int realy;

 unsigned int cx,cy;

 mouse.write(0xeb);
 mouse.read();
 
 mstat1 = mouse.read();
 mxy = mouse.read();
 mz = mouse.read();
 mstat2 = mouse.read();
 mx = mouse.read();
 my = mouse.read();

 // collect the bits for x and y
 cx = (((mstat2 & 0x10) << 8) | ((mxy & 0x0F) << 8) | mx );
 cy = (((mstat2 & 0x20) << 7) | ((mxy & 0xF0) << 4) | my );
 
 // determine real values
 realx = map(cx,minx,maxx,0,1024);
 realy = map(cy,miny,maxy,0,1024);
   
 if(realx<0)realx=0;
 if(realx>1024)realx=1024;
 if(realy<0)realy=0;
 if(realy>1024)realy=1024;

 
 Serial.print(mstat1, BIN);
 Serial.print("\tX=");
 Serial.print(realx, DEC);
 Serial.print("\tY=");
 Serial.print(realy, DEC);
 Serial.println();
 
 
 
 delay(20);
}



this gives me an output from 0 to 1024 in X / Y

then i merged it with the auduino code like this

" see code.txt attach "


when the touch loop is off the synth works, but when is on it dosen't

if i comment // a line in the part where the loop gets the bytes like this

mouse.write(0xeb);
 mouse.read();
 mstat1 = mouse.read();
 mxy = mouse.read();
// mz = mouse.read();
 mstat2 = mouse.read();
 mx = mouse.read();
 my = mouse.read();

the synth works but obviously the touch dont

everything is well connected the touch works great alone, i realy would thank if anyone can help me


bye

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy