Nintendo DS touch screen
Bueno, lo que dice screen no es. Es solo el panel resistivo que como es transparente pues puede acoplarse a una pantalla.
Al tema, el panel tiene de bueno que se vende muy barato (€3) por eBay y es bastante sensible.
¡OJO! Solo por una cara.
La conexión es con cinta de plástico y se vende un enganche especifico (break board connector) un poco dificil de conseguir.
¿Alguien dijo miedo? Por 3 euros, NO.
Con la punta de un destornillador fino ( por cierto, algo mellado) y raspando con suavidad, pero sin miedo, se puede descubrir el cobre. Basta con un tamaño mínimo (1x1 mm) ya que estaña muy bien. Hay un lado de cinta adecuado, en el otro vereis que el destornillador patina continuamente sobre un plástico más resistente, usar el otro lado.
Vemos la placa resistiva, las soldaduras, el circuito de conexión y ya terminado.
A la derecha son los valores que se optienen en reposo y según las coordenadas x-y de la placa, abajo a la izquierda y derecha y arriba derecha e izquierda.
Por supuesto en cada sitio de la placa obtenemos valores distintos.
Detrás de la placa podemos poner una pantalla o un papel con botones dibujados.
Dejo el código simplificado mas abajo.
Ni que decir que puede mejorarse muchisimo y lograr que podamos dibujar en una pantalla gráfica con Arduino o en el ordenador con programa puente (Processing por ejemplo).
int xBajo = A3; int xAlto = A1;
int yBajo = A0; int yAlto = A2;
void setup() {
Serial.begin(9600);
}
void loop()
{
int x = readX();
int y = readY();
Serial.print("x: ");
Serial.print(x - 121); //-121 para calibrar x en MI placa a cero (o casi)
Serial.print(" - y: ");
Serial.println(y - 119);
delay(400);
}
int readX(){
pinMode(xAlto, OUTPUT);
pinMode(xBajo, OUTPUT);
pinMode(yBajo, INPUT);
pinMode(yAlto, INPUT);
digitalWrite(xBajo, LOW);
digitalWrite(xAlto, HIGH);
delay(5);
return analogRead(yBajo);
}
int readY(){
pinMode(xAlto, INPUT);
pinMode(xBajo, INPUT);
pinMode(yBajo, OUTPUT);
pinMode(yAlto, OUTPUT);
digitalWrite(yBajo, LOW);
digitalWrite(yAlto, HIGH);
delay(5);
return analogRead(xBajo);
}