AlexRVD me dijo "¿Por que no te curras un keypad?" y a partir de aqui empezó todo. Primero localizar un keypad de desguace (en las chatarrerias/deixalleries siempre se encuentran cosas interesantes).
Una vez abierto.... sorpresaaaaaaaaaa! aparte de la botonera habia una placa electrónica que me sobrava, luego tuve que empezar a cortar pistas con un cutter para asegurarme de evitar señales cruzadas.
Y a partir de aqui todo es manos a la obra: soldador y un puñado de resistencias.
En la versión beta monté divisores de tensión que luego me daban lecturas "falsas" cuando la entrada respecto a positivo era inferior a 5 kOhms por lo que decidí que la resistencia siempre serian a partir de 5 kOhms hacia arriba a excepción de una combinación en que no uso ninguna resistencia (derivando todo a GND).
Os dejo un ejemplo gráfico de como es, luego sólo hay que múltiplicar el circuito por tantas veces como queramos (en mi caso x 4 veces). Otra opción seria montar más divisores de tensión intermedios pero en mi caso preferia asegurar las lecturas.
Aproximadamente los valores que utilizé fueron R1 y R8 = 10 kOhms, R2 = 6k8 , R3 = 3k3, R4 = 8k , R5 = 2k2, R6 = 6k2 y R7= 4k2.
Por si no os acordais de los colores de las resistencias, aqui teneis una tabla:
Luego ya todo es programación pura y dura. Yo lo hice a base de leer los datos del AnalogRead(x) y luego mediante instrucciones if provocar que ejecute una acción , por ejemplo Serial.print(tecla).
Y aqui la programación. Los valores que hay dentro de las comparativas if son susceptibles que se tengan de ir modificando o depurando, pero eso ya es cosa de que cada uno se lo optimize a su gusto.
El delay(200) es importante si no queremos que nuestro teclado se convierta en una metralleta de datos.
/*
Keypad para Arduino
(G) CopyGuay by XavierGP 2011
*/
int sensorValue0 = 0; // variable to store the value coming from the sensor
int sensorValue1 = 0; // variable to store the value coming from the sensorint sensorValue2 = 0; // variable to store the value coming from the sensor
int sensorValue3 = 0; // variable to store the value coming from the sensor
void setup() {
Serial.begin(9600);
}
void loop() {
// read the value from the sensor:sensorValue0 = analogRead(A0);
sensorValue1 = analogRead(A1);
sensorValue2 = analogRead(A2);
sensorValue3 = analogRead(A3);
if(sensorValue0<2){
Serial.println("Esc");
}
if(sensorValue0>329 && sensorValue0<334){
Serial.println("Del");
}
if(sensorValue0>393 && sensorValue0<397){
Serial.println("7");
}
if(sensorValue0>182 && sensorValue0<185){
Serial.println("4");
}
if(sensorValue0>1020){
Serial.println("1");
}
if(sensorValue1<2){
Serial.println("Ctrl");
}
if(sensorValue1>330 && sensorValue1<333){
Serial.println("/");
}
if(sensorValue1>395 && sensorValue1<399){
Serial.println("8");
}
if(sensorValue1>182 && sensorValue1<185){
Serial.println("5");
}
if(sensorValue1>1020){
Serial.println("2");
}
if(sensorValue2<2){
Serial.println("Alt");
}
if(sensorValue2>332 && sensorValue2<335){
Serial.println("*");
}
if(sensorValue2>398 && sensorValue2<401){
Serial.println("9");
}
if(sensorValue2>179 && sensorValue2<182){
Serial.println("6");
}
if(sensorValue2>1020){
Serial.println("3");
}
if(sensorValue3<2){
Serial.println("<-");
}
if(sensorValue3>328 && sensorValue3<331){
Serial.println("-");
}
if(sensorValue3>393 && sensorValue3<396){
Serial.println("+");
}
if(sensorValue3>178 && sensorValue3<182){
Serial.println("Enter");
}
if(sensorValue3>1020){
Serial.println("0");
}
delay(200);
}
Yo, cuando alguien me dice que es capaz de multiplexar lo que sea, no puedo por menos que hacerle la ola :D
ResponderEliminarMuy interesante lo puesto.
ResponderEliminarMe podrias ayudar, me interesan teclas sueltas simples sin led para conectar independientemente a arduino y que estas teclas sean mecánicas. Sabes donde conseguirlas a buen precio?
Rober glez.
Gastos.menores@gmail.com
Muy interesante lo puesto.
ResponderEliminarMe podrias ayudar, me interesan teclas sueltas simples sin led para conectar independientemente a arduino y que estas teclas sean mecánicas. Sabes donde conseguirlas a buen precio?
Rober glez.
Gastos.menores@gmail.com
Buenos dias Rober. Dame más pistas. Si quieres teclas de ordenador no sé dónde puedes encontrarlas. Si quieres pulsadores en rs-amidata hay de muchos tipos.
EliminarSuerte!