Spisu treści:
Co i jak.
Pomysł polega na podłączeniu klawiatury do drukarki za pomocą prostego i taniego interfejsu, korzystałem z Arduino, ponieważ jest to szybka płyta do tworzenia tego typu projektów i ma dużą społeczność. Płyta odczytuje sygnały klawiatury (użyj systemu danych / zegara) i przekształca te informacje o znaku w drukarkę. Równoległy format sterujący stroboskopem.
Sprzęt komputerowy.
Jest też bardzo prosty, adapter klawiatury z zegarem, danymi, mocą i GND (rysunek-1), adapter drukarki z 8 bitami danych, strobem i GND (rysunek-2) to wszystko
Połączony z Arduino jako rysunek-3.
Oprogramowanie.
Kod źródłowy.
// Maszyna do pisania ze starą klawiaturą AT i drukarką Dot Matrix.
// 2011 www.xbot.es
// Francisco Reinoso „furri”
#zawierać
#zawierać
#zawierać
#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
Klawiatura PS2Keyboard;
int caracter = 0;
void setup () {
keyboard.begin (KBD_DATA_PIN);
pinMode (d0, OUTPUT);
pinMode (d1, OUTPUT);
pinMode (d2, OUTPUT);
pinMode (d3, OUTPUT);
pinMode (d4, OUTPUT);
pinMode (d5, OUTPUT);
pinMode (d6, OUTPUT);
pinMode (d7, OUTPUT);
pinMode (strobe, OUTPUT);
pinMode (autofd, OUTPUT);
digitalWrite (autofd, HIGH);
digitalWrite (strobe, HIGH);
Serial.begin (9600);
opóźnienie (1000);
}
#define is_printable (c) (! (c & 0x80)) // nie drukuj, jeśli ustawiony jest górny bit
nieważne ulepszenie (int letra)
{
// dekoduj znak na 8 bitów
jeśli (letra> = 128) {letra = letra - 128; digitalWrite (d0, HIGH); } else {digitalWrite (d0, LOW); }
jeśli (letra> = 64) {letra = letra - 64; digitalWrite (d1, HIGH); } else {digitalWrite (d1, LOW); }
jeśli (letra> = 32) {letra = letra - 32; digitalWrite (d2, HIGH); } else {digitalWrite (d2, LOW); }
jeśli (letra> = 16) {letra = letra - 16; digitalWrite (d3, HIGH); } else {digitalWrite (d3, LOW); }
jeśli (letra> = 8) {letra = letra - 8; digitalWrite (d4, HIGH); } else {digitalWrite (d4, LOW); }
jeśli (letra> = 4) {letra = letra - 4; digitalWrite (d5, HIGH); } else {digitalWrite (d5, LOW); }
jeśli (letra> = 2) {letra = letra - 2; digitalWrite (d6, HIGH); } else {digitalWrite (d6, LOW); }
if (letra> = 1) {digitalWrite (d7, HIGH); } else {digitalWrite (d7, LOW); }
// wyślij znak do drukarki
digitalWrite (strobe, LOW);
delayMicroseconds (2);
digitalWrite (strobe, HIGH);
}
void loop () {
if (keyboard.available ()) {
bajt c = keyboard.read ();
jeśli (c == 13) {Serial.print (c); imprime (10); }
jeszcze
{
if (is_printable (c)) {Serial.print (c); imprime (c); } // nie drukuj znaków specjalnych
}
}
}
Kieszonkowe dzieci:
Pierwsza nagroda w
Wyzwanie Keyboard vs. Mouse Speed