Tworzenie maszyny do pisania ze starą klawiaturą i drukarką kropkową

Tworzenie maszyny do pisania ze starą klawiaturą i drukarką kropkową

Spisu treści:

Anonim

Ten projekt pokazuje, jak odzyskać starą klawiaturę i drukarkę igłową, aby stworzyć maszynę do pisania.

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ć // biblioteka do korzystania z PS2Keyboard z Arduino

#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