000
30.03.2024, 12:06 Uhr
DL
Default Group and Edit
|
Vorschlag für den Betrieb einer PS/2-Tastatur als Ersatz am MC80.3x
von https://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=21627 , da es im Flohmarkt etwas ungünstig war...
Noch ein Hinweis zu den 12V am Port, die scheinen nirgendwo abgesichert zu sein, also etwas Vorsicht walten lassen !
Der Quellcode für Arduino, etwas überarbeitet:
Quellcode: | //----------------------------------------------------------------------------------------------------------------- //Emulation Tastatur MC80.3x mit PS/2 Tastatur + Arduino Nano und Paul Carpenter's PS2KeyMap+PS2KeyAdvanced library //----------------------------------------------------------------------------------------------------------------- #include <PS2KeyAdvanced.h> #include <PS2KeyMap.h> //#include <Arduino.h> //nur für VSC #define DATAPIN 4 //PS/2 DATA #define IRQPIN 3 //PS/2 CLK #define TONEPIN 5 //Beeper(buzzer) //Variablen uint16_t c,d,rdat; uint8_t x,y,idx; //von KeyMap library nicht erzeugte bzw. umdefininierte Key Codes ,{Taste,Code} uint16_t Map[][2] = { {PS2_KEY_F1,0x01},{PS2_KEY_F2,0x02},{PS2_KEY_F3,0x04},{PS2_KEY_F4,0x08},{PS2_KEY_F5,0x10},{PS2_KEY_F6,0x20},//F1-6 {PS2_KEY_F7,0x40},{PS2_KEY_F8,0x80},//F7-8 {PS2_KEY_HOME,0x13},{PS2_KEY_L_GUI,0x13},{PS2_KEY_END,0x11},{PS2_KEY_R_GUI,0x11},//OFF/ENTER auf Home/Ende+links/rechts Win {PS2_KEY_L_ARROW,0x08},{PS2_KEY_R_ARROW,0x0c},{PS2_KEY_UP_ARROW,0x0b},{PS2_KEY_DN_ARROW,0x0a},//Cursor {PS2_KEY_DIV,0x2d},{PS2_SHIFT+PS2_KEY_DIV,0x5f}//"-","_" }; //classes 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() ) //Taste gedrückt? { c = keyboard.read( );//einlesen if( c > 0 ) // 0 wäre Fehler { 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); //remapping auf "DE"Layout //die im remap fehlenden Tasten (s.0. codes) einfügen, bzw. redefinieren rdat = c & ( PS2_ALT + PS2_SHIFT + 0xFF ); //Filtern for( idx = 0; idx < sizeof(Map)/sizeof(Map[0]); idx ++ ) if(rdat == Map[idx][0]) //Taste nachschlagen { rdat = Map[idx][1]; d &= ~0xFF; d |= rdat; //Code bereinigen & zuweisen break; } if((d>0)&&((d & 0xff)<=0x80)) { Serial.write( x); //Statusbyte ausgeben Serial.write( d & 0xff); //Tastencode ausgeben } } } }
|
Danke an AE für die Vorarbeit : https://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=7918 Dieser Beitrag wurde am 20.04.2024 um 09:31 Uhr von DL editiert. |