Qué y cómo.
La idea es conectar el teclado a la impresora con un interfaz simple y económico, he usado Arduino porque es una placa de desarrollo rápido para este tipo de proyectos y tiene una gran comunidad detrás. La Junta Lea las señales del teclado (uso de un sistema de reloj de datos) y transforma esta información sobre el carácter a la impresora. Formato paralelo control de la luz estroboscópica.
Hardware.
Es muy básico, un adaptador de teclado con reloj, datos, energía y tierra (Figura-1), un adaptador de impresora con 8 bits de datos, strobe y GND (Figura-2) todo esto
Conectado a Arduino como figura 3.
Software.
El código fuente.
Máquina de escribir con un viejo en el teclado y una impresora de matriz de puntos.
www.xbot.es 2011
Francisco Reinoso "furri"
#include < PS2Keyboard.h > / / Biblioteca para usar una PS2Keyboard con Arduino
#include < string.h >
#include < stdio.h >
#define KBD_CLK_PIN 3
#define KBD_DATA_PIN 2
#define d0 4
#define d1 5
#define d2 6
#define d3 7
#define d4 8
#define d5 9
#define d6 10
#define d7 11
#define estroboscópica 12
#define autofd 13
PS2Keyboard teclado;
int caracter = 0;
void setup() {}
Keyboard.Begin(KBD_DATA_PIN);
pinMode (d0, salida);
pinMode (d1, salida);
pinMode (d2, salida);
pinMode (d3, salida);
pinMode (d4, salida);
pinMode (d5, salida);
pinMode (d6, salida);
pinMode (d7, salida);
pinMode (luz estroboscópica, salida);
pinMode (autofd, salida);
digitalWrite(autofd,HIGH);
digitalWrite(strobe,HIGH);
Serial.Begin(9600);
Delay(1000);
}
#define is_printable(c) (! () c & 0 x 80)) / / no imprimir si el bit superior
void imprime(int letra)
{
descifrar el carácter en 8 bits
Si (letra > = 128) {letra = letra - 128; digitalWrite(d0,HIGH);} else {digitalWrite(d0,LOW);}
Si (letra > = 64) {letra = letra - 64; digitalWrite(d1,HIGH);} else {digitalWrite(d1,LOW);}
Si (letra > = 32) {letra = letra - 32; digitalWrite(d2,HIGH);} else {digitalWrite(d2,LOW);}
Si (letra > = 16) {letra = letra - 16; digitalWrite(d3,HIGH);} else {digitalWrite(d3,LOW);}
Si (letra > = 8) {letra = letra - 8; digitalWrite(d4,HIGH);} else {digitalWrite(d4,LOW);}
Si (letra > = 4) {letra = letra - 4; digitalWrite(d5,HIGH);} else {digitalWrite(d5,LOW);}
Si (letra > = 2) {letra = letra - 2; digitalWrite(d6,HIGH);} else {digitalWrite(d6,LOW);}
Si (letra > = 1) {digitalWrite(d7,HIGH);} else {digitalWrite(d7,LOW);}
enviar el carácter a la impresora
digitalWrite(strobe,LOW);
delayMicroseconds(2);
digitalWrite(strobe,HIGH);
}
void loop() {}
{if(Keyboard.Available())}
c bytes = keyboard.read();
Si (c == 13) {Serial.print(c); imprime(10);}
otra cosa
{
Si (is_printable(c)) {Serial.print(c); imprime(c);} / / no imprimir caracteres especiales
}
}
}