000
17.04.2024, 17:47 Uhr
DL
Default Group and Edit
|
Und weil es so schön war, hier noch ein Vorschlag für die Serielle Tastatur von A5120/K8924 mit dem "LEGO-System für Programmgestaltung" Manchmal steht irgendwo so eine Kiste ohne Tastatur sinnlos herum... Als Schaltung kann die vom MC80 übernommen werden -> https://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=21851 ,es müssen nur Anschlüsse B2<->B4 am Stecker zum BC getauscht werden. Auch hier gilt wieder, etwas Vorsicht walten lassen, die 12V kommen direkt vom Netzteil, bei Kurzschluss dampft da im Rechnerfuß ein Leiterzug auf der Anschlussplatine weg und die baut sich echt schlecht aus...
Es sind noch nicht alle (Sonder-)Tasten verteilt, die Belegung/Codes findet man im Serviceplan zur Tastatur. Die *.ino dafür:
Quellcode: | //----------------------------------------------------------------------------------------------------------------- //Emulation Tastatur K7637 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,LEDSTAT; //von KeyMap library nicht erzeugte bzw. umdefininierte Key Codes ,{Taste,Code} uint16_t Map[][2] = { {PS2_KEY_F1,0xc1},{PS2_KEY_F2,0xc2},{PS2_KEY_F3,0xc3},{PS2_KEY_F4,0xc4},{PS2_KEY_F5,0xc5},{PS2_KEY_F6,0xc6},//F1-6 {PS2_KEY_F7,0xc7},{PS2_KEY_F8,0xc8},{PS2_KEY_F9,0xc9},{PS2_KEY_F10,0xca},{PS2_KEY_F11,0xcb},{PS2_KEY_F12,0xcc},//F7-12 {PS2_KEY_HOME,0x9c},{PS2_KEY_ENTER,0xFF},{PS2_SHIFT+PS2_KEY_ENTER,0xFE},//Home,ET1,ET2 {PS2_KEY_L_ARROW,0x96},{PS2_KEY_R_ARROW,0x97},{PS2_KEY_UP_ARROW,0x94},{PS2_KEY_DN_ARROW,0x95},//Cursor {PS2_KEY_DIV,0x2d},{PS2_SHIFT+PS2_KEY_DIV,0x5f},{0x06,0xaf},//"-","_",Pause für Reset {PS2_CTRL+PS2_KEY_X,0x18},{PS2_CTRL+PS2_KEY_C,0x03}//...CTRL Codes direkt oder über ENTER2 (shift+enter) }; //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_8N1); }
void loop( ) { if(Serial.available() >0) { y=Serial.read(); if(y==0x20)//Fehler optisch+akustisch { LEDSTAT=keyboard.getLock(); LEDSTAT ^= (1<<0);//Scroll LED als Anzeige keyboard.setLock(LEDSTAT ); tone(TONEPIN, 1000, 1000); } if(y==0x44)tone(TONEPIN, 1000, 1000); //nur akustisches Signal Serial.write(0x80);//Typ, die Antwort auf alles :-) } if( keyboard.available() ) //Taste gedrückt? { c = keyboard.read( );//einlesen if( c > 0 && c!=0xfa) // 0 wäre Fehler, 0xfa Acknowledge { d=keymap.remapKey(c); //remapping auf "DE"Layout //die im remap fehlenden Tasten (s.0. codes) einfügen, bzw. redefinieren rdat = c & ( PS2_CTRL + 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) { Serial.write( d & 0xff); //Tastencode ausgeben } } } }
|
Dieser Beitrag wurde am 11.07.2024 um 11:40 Uhr von DL editiert. |