001
22.03.2024, 15:32 Uhr
DL
|
Hatte heute mal etwas Zeit und so fix mit einem Arduino einen Tastaturadapter PS/2<->MC80.3x zusammengestrickt, da ist eigentlich nicht viel dazu...
Die mc803x_PS2.ino dazu
Quellcode: | //------------------------------------------------------------------------------------------------------- //Emulation Tastatur MC80.3x mit PS/2 Tastatur + Arduino Nano und Paul Carpenter's PS2KeyAdvanced library //------------------------------------------------------------------------------------------------------- #include <PS2KeyAdvanced.h> #include <PS2KeyMap.h> #define DATAPIN 4 //PS/2 DATA #define IRQPIN 3 //PS/2 CLK #define TONEPIN 5 //Beeper uint16_t c,d; uint8_t x,y,idx; //von KeyMap library nicht erzeugte Codes uint8_t codes[] = {PS2_KEY_F1, PS2_KEY_F2, PS2_KEY_F3, PS2_KEY_F4,PS2_KEY_F5, PS2_KEY_F6,PS2_KEY_F7, PS2_KEY_F8, PS2_KEY_L_ARROW, PS2_KEY_R_ARROW, PS2_KEY_UP_ARROW,PS2_KEY_DN_ARROW, PS2_KEY_HOME,PS2_KEY_L_GUI,PS2_KEY_END,PS2_KEY_R_GUI};//OFF/ENTER auf Home/Ende bzw. links/rechts Win gelegt const char *const keys[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x08,0x0c,0x0b,0x0a, 0x13,0x13,0x11,0x11};
PS2KeyAdvanced keyboard; PS2KeyMap keymap;
void setup( ) { keyboard.begin( DATAPIN, IRQPIN ); keyboard.typematic( 11, 1); keyboard.setNoRepeat(1); keyboard.setNoBreak(1); keymap.selectMap( (char *)"DE" ); Serial.begin( 9600,SERIAL_7O1 ); tone(TONEPIN, 1000, 100); //beep }
void loop( ) { if(Serial.available() >0) { y=Serial.read(); if(y==0x07)tone(TONEPIN, 1000, 100); //beep kurz if(y==0x10)tone(TONEPIN, 1000); //beep dauer } if( keyboard.available( ) ) { c = keyboard.read( ); if( c > 0 ) { if(c >=PS2_KEY_KP0 && c <=PS2_KEY_KP_DIV)x=0x1d; //Status für Keypad else if ((c & 0xff) >=PS2_KEY_F1 && (c & 0xff)<=PS2_KEY_F8)x=0x1e; //Status für Funktionstasten else if (c & PS2_CTRL)x=0x1f; //Status für CTRL else x=0x1c; //Status default d=keymap.remapKey(c ); if(d==0) //die aus dem remap fehlenden Tasten (s.0. codes) einfügen { for( idx = 0; idx < sizeof( codes ); idx++ ) if((c & 0xff) == codes[ idx ] ) { d=( keys[ idx ] ); break; } } if((d>0)&&((d & 0xff)<=0x80)) { Serial.write( x); //Statusbyte Serial.write( d & 0xff); //Tastencode } } } }
|
Nicht schön, aber läuft Dieser Beitrag wurde am 24.03.2024 um 16:51 Uhr von Rüdiger editiert. |