Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Zenith Supersport 286 Keyboard interpreter
- *
- * Converts signals from a Zenith Laptop keyboard"s key matrix to a stndard USB keyboard when using a Teensy LC.
- *
- */
- #include <Keypad.h>
- const byte ROWS = 12; // 12 rows
- const byte COLS = 12; // 12 columns
- const char * keys [ROWS] [COLS] = {
- {0,"KEY_ENTER",0,"KEYPAD_BACKSLASH","KEY_RIGHT_BRACE","KEY_QUOTE","KEYPAD_SLASH",0,0,"KEY_DOWN",0,0},
- {"KEY_RIGHT","KEY_LEFT",0,"KEY_BACKSPACE","KEY_PRINTSCREEN","KEY_LEFT_BRACE","KEY_SEMICOLON","KEY_PERIOD",0,0,"MODIFIERKEY_RIGHT_CTRL","KEY_C"},
- {"KEY_UP",0,0,0,"KEY_P","KEY_PLUS",0,"KEY_L","KEY_COMMA","KEY_X",0,"KEY_Z"},
- {"KEY_INSERT","KEY_MINUS","KEY_O","KEY_K","KEY_M","KEY_N","KEY_B","KEY_V","KEY_S",0,0,0},
- {"KEY_I","KEY_PAUSE","KEY_0","KEY_H","KEY_G","KEY_F","KEY_D","KEY_S","KEY_A","MODIFIERKEY_CTRL",0,0},
- {"KEY_NUM_LOCK","KEY_9","KEY_U","KEY_Y","KEY_T","KEY_R","KEY_E","KEY_W","KEY_Q","KEY_TAB",0,0},
- {"KEY_F10",0,"KEY_7","KEY_8","KEY_6","KEY_5","KEY_4","KEY_3","KEY_2","KEY_1","KEY_TILDE",0},
- {"KEY_F8","KEY_F7","KEY_F6","KEY_F5","KEY_F4","KEY_F3","KEY_F2","KEY_F1","KEY_ESC",0,0,0},
- {"KEY_DEL",0,0,0,0,0,"KEY_F9",0,0,0,0,0},
- {"MODIFIERKEY_RIGHT_SHIFT",0,0,0,0,0,0,0,0,0,0,0},
- {"MODIFIERKEY_LEFT_ALT",0,0,0,0,0,0,0,0,0,0,0},
- {"KEY_CAPS_LOCK",0,"MODIFIERKEY_LEFT_SHIFT","MODIFIERKEY_RIGHT_ALT",0,"KEY_SPACE",0,0,0,0,0,0},
- };
- byte rowPins[ROWS] = {1,2,3,4,5,6,7,8,9,14,15,18}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {10,11,12,13,16,17,19,20,21,22,23,24}; //connect to the column pinouts of the keypad
- Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- unsigned long loopCount;
- unsigned long startTime;
- String msg;
- int x = 0;
- void setup() {
- Serial.begin(9600);
- loopCount = 0;
- startTime = millis();
- msg = "";
- }
- void loop() {
- loopCount++;
- //char key = kpd.getKey();
- if ( (millis()-startTime)>5000 ) {
- Serial.print("Average loops per second = ");
- Serial.println(loopCount/5);
- startTime = millis();
- loopCount = 0;
- }
- // Fills kpd.key[ ] array with up-to 10 active keys.
- // Returns true if there are ANY active keys.
- if (kpd.getKeys())
- {
- for (int i=0; i<LIST_MAX; i++) // Scan the whole key list.
- {
- if ( kpd.key[i].stateChanged ) // Only find keys that have changed state.
- {
- switch (kpd.key[i].kstate) { // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
- case PRESSED:
- msg = " PRESSED.";
- Serial.print("Key ");
- Serial.print(kpd.key[i].kchar);
- Serial.println(msg);
- // release all the keys at the same instant
- Keyboard.set_key1(kpd.key[i].kchar);
- Keyboard.send_now();
- //Keyboard.set_key1(0);
- //Keyboard.send_now();
- if (kpd.key[i].kchar == char(KEY_LEFT_SHIFT)) {
- Serial.print("Shift ");
- Keyboard.set_modifier(MODIFIERKEY_SHIFT);
- Keyboard.send_now();
- x=1;
- }
- break;
- case HOLD:
- msg = " HOLD.";
- //Keyboard.set_modifier(MODIFIERKEY_SHIFT);
- //Keyboard.send_now();
- Keyboard.set_key1(kpd.key[i].kchar);
- Keyboard.send_now();
- break;
- case RELEASED:
- msg = " RELEASED.";
- Serial.println(msg);
- Keyboard.set_key1(0);
- Keyboard.send_now();
- if (kpd.key[i].kchar == char(KEY_LEFT_SHIFT)) {
- Serial.print("Shift Released ");
- Keyboard.set_modifier(0);
- Keyboard.send_now();
- x=0;
- }
- break;
- case IDLE:
- msg = " IDLE.";
- }
- }
- }
- }
- } // End
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement