Att göra en skrivmaskin med ett gammalt tangentbord och en matrisskrivare
Vad och hur.
Tanken är att ansluta tangentbordet till skrivaren med en grundläggande och billiga gränssnitt, jag har använt Arduino eftersom är en snabb utveckling styrelse för denna typ av projekt och har en stor community bakom. Styrelsen läser tangentbord signalerna (Använd ett data/klocka system) och förvandla denna info om tecknet till skrivaren. Parallella format kontrollera strobe.
Hårdvara.
Är mycket grundläggande, en keyboard adapter med klocka, data, makt och GND (bild-1), en skrivaradapter med 8 databitar, strobe och GND (figur 2) allt detta
Ansluten till Arduino som figur-3.
Programvara.
Källkoden.
Skrivmaskin med ett gamla på tangentbordet och en matrisskrivare.
2011 www.xbot.es
Francisco Reinoso "furri"
#include < PS2Keyboard.h > / / bibliotek att använda en PS2Keyboard med 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 strobe 12
#define autofd 13
PS2Keyboard tangentbord;
int caracter = 0;
void setup() {
Keyboard.BEGIN(KBD_DATA_PIN);
pinMode (d0, produktionen);
pinMode (d1, produktionen);
pinMode (d2, produktionen);
pinMode (d3, produktionen);
pinMode (d4, produktionen);
pinMode (d5, produktionen);
pinMode (d6, produktionen);
pinMode (d7, produktionen);
pinMode (strobe, produktionen);
pinMode (autofd, produktionen);
digitalWrite(autofd,HIGH);
digitalWrite(strobe,HIGH);
Serial.BEGIN(9600);
Delay(1000);
}
#define is_printable(c) (! () c & 0x80)) / / Skriv inte ut om översta biten anges
void imprime(int letra)
{
avkoda karaktär till 8 bitar
om (letra > = 128) {letra = letra - 128; digitalWrite(d0,HIGH);} annat {digitalWrite(d0,LOW);}
om (letra > = 64) {letra = letra - 64; digitalWrite(d1,HIGH);} annat {digitalWrite(d1,LOW);}
om (letra > = 32) {letra = letra - 32; digitalWrite(d2,HIGH);} annat {digitalWrite(d2,LOW);}
om (letra > = 16) {letra = letra - 16; digitalWrite(d3,HIGH);} annat {digitalWrite(d3,LOW);}
om (letra > = 8) {letra = letra - 8; digitalWrite(d4,HIGH);} annat {digitalWrite(d4,LOW);}
om (letra > = 4) {letra = letra - 4; digitalWrite(d5,HIGH);} annat {digitalWrite(d5,LOW);}
om (letra > = 2) {letra = letra - 2; digitalWrite(d6,HIGH);} annat {digitalWrite(d6,LOW);}
om (letra > = 1) {digitalWrite(d7,HIGH);} annat {digitalWrite(d7,LOW);}
Skicka tecknet till skrivaren
digitalWrite(strobe,LOW);
delayMicroseconds(2);
digitalWrite(strobe,HIGH);
}
void loop() {
IF(keyboard.available()) {
byte c = keyboard.read();
om (c == 13) {Serial.print(c); imprime(10);}
annat
{
om (is_printable(c)) {Serial.print(c); imprime(c);} / / Skriv inte ut specialtecken
}
}
}