Non ci sono prodotti a carrello.
Patel Sohil Sanjaybhai, un nostro lettore indiano, si propone anche lui per prendere parte al nostro “TiDiGino Contest” e per dimostrare la sua abilità con Arduino, ci propone un semplice progetto: realizzare una macchina da scrivere utilizzando una vecchia stampate Centronics ad aghi con connettore DB25 ed una tastiera di recupero PS2.
Come funziona:
L’idea è collegare la tastiera alla stampante con un’interfaccia semplice ed economica: per questo motivo abbiamo usato Arduino le cui porte di I/O sono collegate sia al connettore della tastiera come indicato nel disegno in alto, sia al connettore della stampante Centronics. Entrambe le pin-out (tastiera, nelle versioni AT e PS/2, e Centronics) sono riportate qui sotto. Arduino legge i dati provenienti dalla tastiera e li trasforma nei caratteri necessari a pilotare la stampante tramite il codice riportato in basso.
Codice:
#include <PS2Keyboard.h> #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 keyboard; int caracter = 0; byte key=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); delay(1000); } void transmit(int x) { if (x >= 128) { x = x - 128; digitalWrite(d7,HIGH); } else { digitalWrite(d7,LOW); } if (x >= 64) { x = x - 64; digitalWrite(d6,HIGH); } else { digitalWrite(d6,LOW); } if (x >= 32) { x = x - 32; digitalWrite(d5,HIGH); } else { digitalWrite(d5,LOW); } if (x >= 16) { x = x - 16; digitalWrite(d4,HIGH); } else { digitalWrite(d4,LOW); } if (x >= 8 ) { x = x - 8; digitalWrite(d3,HIGH); } else { digitalWrite(d3,LOW); } if (x >= 4) { x = x - 4; digitalWrite(d2,HIGH); } else { digitalWrite(d2,LOW); } if (x >= 2) { x = x - 2; digitalWrite(d1,HIGH); } else { digitalWrite(d1,LOW); } if (x >= 1) { digitalWrite(d0,HIGH); } else { digitalWrite(d0,LOW); } digitalWrite(strobe,LOW); delayMicroseconds(2); digitalWrite(strobe,HIGH); } void loop() { if(keyboard.available()) { byte c = keyboard.read(); Serial.println(c); // byte c=Serial.read(); ascii(c); if(c == 13) { Serial.println(key); transmit(10); } else { Serial.println(key,HEX); transmit(key); } // Serial.println(c,HEX); } } void ascii(byte x) { switch(x) { case 0x1c: { key=0x41; break; } case 0x32: { key=0x42; break; } case 0x21: { key=0x43; break; } case 0x23: { key=0x44; break; } case 0x24: { key=0x45; break; } case 0x2B: { key=0x46; break; } case 0x34: { key=0x47; break; } case 0x33: { key=0x48; break; } case 0x43: { key=0x49; break; } case 0x3B: { key=0x4A; break; } case 0x42: { key=0x4B; break; } case 0x4B: { key=0x4C; break; } case 0x3A: { key=0x4D; break; } case 0x31: { key=0x4E; break; } case 0x44: { key=0x4F; break; } case 0x4D: { key=0x50; break; } case 0x15: { key=0x51; break; } case 0x2D: { key=0x52; break; } case 0x1B: { key=0x53; break; } case 0x2C: { key=0x54; break; } case 0x3C: { key=0x55; break; } case 0x2A: { key=0x56; break; } case 0x1D: { key=0x57; break; } case 0x22: { key=0x58; break; } case 0x35: { key=0x59; break; } case 0x1A: { key=0x5A; break; } case 0x0D: { key=0x09; break; } case 0x29: { key=0x20; break; } default: { } } }
Scarica qui il software completo con le librerie.