Paso 2: Programa Teensy
http://www.pjrc.com/store/teensy3.html
El esquema de los terminales está en el siguiente enlace:
http://www.pjrc.com/Teensy/pinout.html
Usé el Teensy porque es muy fácil convertirlo en un teclado USB. Después de configurar su Teensy y probándolo con una simple luz parpadeante, en el programa de Arduino, haga clic en "Herramientas" luego en "Tipo" seleccione "Teclado + ratón + Joystick" y cambiar al siguiente código:
* Nota * para ahora, no te preocupes que resultados de botón en cualquier clave. De hecho, podría ser mejor cambiar todas las claves a #'s 4-9 y A-z (usar mayúsculas) y utilizar símbolos como {} + reemplazar las teclas etiquetadas 1,2,3. Esto hace más fácil para sentarse allí y prueba para asegurarse de que realmente están recibiendo cada botón. (Que hice en el paso 5) Si haces esto, no utilice los números 1, 2 o 3 para propósitos de prueba. Esas claves se asignan a Delete, tab y shift.
Para escribir una mayúscula, presione Mayús, liberación, y pulsa el que clave desea capitalizar.
/*
Dibujo de teclado
Imprime la tecla pulsada en un teclado al puerto serie
Probado con éxito el 28/06/13
*/
const int numRows = 6; número de filas en el teclado
const int numCols = 6; número de columnas
const int debounceTime = 20; número de milisegundos para interruptor estable
/*
{ '6','7'}
*/
mapa de teclado define el carácter cuando se presiona la tecla correspondiente
const char keymap [numRows] [numCols] = {}
{'z', 'b', 'o', 'x', '3 ',' j'},
{ '.','m','l' , ',','"','k'},
{ '?',' ','p' , 'v','\'','n'},
{'2', 'w', ' t ', 'q', '1 ',' e'},
{ 's','g','i' , 'c','\n','h'},
{'a f ',' ', 'u','d ',' y ',' r'}
};
1 es eliminar
2 es ficha
3 es el cambio
esta matriz determina los pasadores utilizados para las filas y columnas
const int rowPins [numRows] = {1,2,3,4,5,6}; Filas de 0 a 3
const int colPins [numCols] = {10,12,13,14,15,16}; Columnas de 0 a 2
char el sft = '0';
void setup()
{
Serial.Begin(9600);
para (int fila = 0; fila < numRows; fila ++)
{
pinMode(rowPins[row],INPUT); Conjunto fila pines como entrada
digitalWrite(rowPins[row],HIGH); encender dominadas
}
para (int columna = 0; columna < numCols; columna ++)
{
pinMode(colPins[column],OUTPUT); Ajustar pernos de columna como salidas
para la escritura
digitalWrite(colPins[column],HIGH); Hacer inactivo todas las columnas
}
}
void loop()
{
clave char = getKey();
Delay(debounceTime); Este es un momento de 'debounce teclado'
Si (clave == '1') {}
Eliminar
Keyboard.Press(KEY_BACKSPACE);
Keyboard.Release(KEY_BACKSPACE);
clave = '0';
}
Si (clave == '2') {}
Ficha
Keyboard.Press(KEY_TAB);
Keyboard.Release(KEY_TAB);
clave = '0';
}
Si (clave == '3') {}
Cambio
SFT = '1';
clave = '0';
}
Si (sft == '1') {}
Si (clave! = '0') {}
clave = toupper (clave);
SFT = '0';
}
}
Si (clave! = '0') {/ / si el carácter no es 0 entonces
es una tecla válida
Keyboard.Print(Key);
}
}
vuelve con la tecla pulsada, o 0 si ninguna tecla es presionada
getKey() Char
{
clave char = '0'; 0 indica ninguna tecla presionada
para (int columna = 0; columna < numCols; columna ++)
{
digitalWrite(colPins[column],LOW); Activar la columna actual.
para (int fila = 0; fila < numRows; fila ++) / / escaneo todas las filas para
pulsar una tecla.
{
¿if(digitalread(rowpins[Row]) == LOW) / / es una tecla?
{
Delay(debounceTime); Debounce
while(digitalRead(rowPins[Row]) == LOW); esperar es crucial ser lanzado
clave = teclado [fila] [columna]; Recordar que clave
digitalWrite(rowPins[row],HIGH); restablecer botón empujado a alta
}
}
digitalWrite(colPins[column],HIGH); Desactivar la columna actual.
}
regresar la llave; Devuelve la tecla pulsada o 0 si no
}