Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define USB_LED_NUM_LOCK 0
- #define USB_LED_CAPS_LOCK 1
- #define USB_LED_SCROLL_LOCK 2
- #define USB_LED_COMPOSE 3
- #define USB_LED_KANA 4
- unsigned int KEY_LEFTCURLYBRACE = (unsigned int)('{');
- unsigned int KEY_RIGHTCURLYBRACE = (unsigned int)('}');
- unsigned int KEY_SMALLERTHAN = (unsigned int)('<');
- unsigned int KEY_BIGGERTHAN = (unsigned int)('>');
- unsigned int KEY_WQUOTE = (unsigned int)('`');
- unsigned int KEY_COLON = (unsigned int)(':');
- unsigned int KEY_QUESTIONMAKR = (unsigned int)('?');
- unsigned int KEY_TILDE_M = (unsigned int)('~');
- unsigned int KEY_DOUBLEQUOTE = (unsigned int)('"');
- unsigned int KEY_BAR = (unsigned int)('|');
- unsigned int KEY_PASS = (unsigned int)('H');
- int passIndex = 0;
- int Pressed[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false};
- unsigned int Keys[] = {0, MODIFIERKEY_GUI,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,MODIFIERKEY_RIGHT_ALT,MODIFIERKEY_RIGHT_CTRL,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
- 0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,MODIFIERKEY_RIGHT_SHIFT,KEY_UP,0,
- 0,KEY_A,KEY_CAPS_LOCK,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L,KEY_ENTER,0,
- 0,KEY_Q,KEY_TAB,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P,KEY_BACKSPACE,
- KEY_ESC,KEY_2,KEY_1,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_0,KEY_MINUS,KEY_EQUAL};
- unsigned int KeysFn[] = {0, MODIFIERKEY_GUI,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,MODIFIERKEY_RIGHT_ALT,MODIFIERKEY_RIGHT_CTRL,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
- 0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_F9,KEY_F10,KEY_F11,KEY_F12,KEY_END,KEY_PAGE_DOWN,KEY_BAR,MODIFIERKEY_RIGHT_SHIFT,KEY_UP,0,
- 0,KEY_F5,KEY_CAPS_LOCK,KEY_F6,KEY_F7,KEY_F8,KEY_INSERT,KEY_HOME,KEY_PAGE_UP,KEY_SLASH,KEY_BACKSLASH,KEY_ENTER,0,
- 0,KEY_F1,KEY_TAB,KEY_F2,KEY_F3,KEY_F4,KEY_MENU,KEY_PRINTSCREEN,KEY_PAUSE,KEY_TILDE_M,KEY_DOUBLEQUOTE,KEY_QUOTE,KEY_DELETE,
- KEY_SEMICOLON,KEY_LEFT_BRACE,KEY_WQUOTE,KEY_RIGHT_BRACE,KEY_LEFTCURLYBRACE,KEY_RIGHTCURLYBRACE,KEY_SMALLERTHAN,KEY_BIGGERTHAN,KEY_SEMICOLON,KEY_COLON,KEY_QUESTIONMAKR,KEY_COMMA,KEY_PERIOD};
- unsigned int KeysPr[] = {0, KEY_MINUS,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,KEY_HOME,KEY_END,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
- 0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_EQUAL,KEY_UP,0,
- 0,KEY_A,KEY_CAPS_LOCK,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L,KEY_ENTER,0,
- 0,KEY_Q,KEY_TAB,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P,KEY_BACKSPACE,
- KEY_SEMICOLON,KEY_2,KEY_1,KEY_3,KEY_QUOTE,KEY_DOUBLEQUOTE,KEY_SMALLERTHAN,KEY_BIGGERTHAN,KEY_8,KEY_9,KEY_0,KEY_COMMA,KEY_PERIOD};
- bool isRowInput = false;
- const int RowCount = 5;
- const int ColCount = 13;
- const bool useBounce = true;
- const int debounce = 100;
- int PRi = 2;
- int PRj = 12;
- int FNi = 1;
- int FNj = 12;
- unsigned long LastHit[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0};
- bool isPressedDownOld[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false};
- bool isPressedDown[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false,
- false,false,false,false,false,false,false,false,false,false,false,false,false};
- const short Rows[] = {0, 1, 2, 3, 4};
- const short Cols[] = {5,6,7,8,9,10,12 ,13 ,14 ,15 ,16 ,17, 18};
- bool CapsLockOn = false;
- const int CapsLED = 11;
- bool FnOn = false;
- const int FnLED = 19;
- bool PrOn = false;
- const int PrLED = 20;
- void setup()
- {
- Serial.begin(115200);
- Serial.println("Startin up...");
- pinMode(CapsLED, OUTPUT);
- pinMode(FnLED, OUTPUT);
- pinMode(PrLED, OUTPUT);
- digitalWrite(CapsLED, LOW);
- digitalWrite(FnLED, LOW);
- digitalWrite(PrLED, LOW);
- for (int i = 0; i < RowCount; i++)
- {
- if(isRowInput)
- {
- pinMode(Rows[i], INPUT);
- digitalWrite(Rows[i], HIGH);
- }
- else
- {
- pinMode(Rows[i], OUTPUT);
- digitalWrite(Rows[i], LOW);
- }
- }
- for (int i = 0; i < ColCount; i++)
- {
- if(isRowInput)
- {
- pinMode(Cols[i], OUTPUT);
- digitalWrite(Cols[i], LOW);
- }
- else
- {
- pinMode(Cols[i], INPUT);
- digitalWrite(Cols[i], HIGH);
- }
- }
- Keyboard.begin();
- }
- int Map(int row, int col)
- {
- int index = ((13 * row) + col);
- return index;
- }
- bool CheckButton(int Row, int Col, bool bounce = false)
- {
- if(bounce)
- {
- if(isRowInput)
- {
- for(int i = 0; i < ColCount; i++)
- {
- digitalWrite(Cols[i], HIGH);
- }
- digitalWrite(Cols[Col], LOW);
- isPressedDown[Map(Row,Col)] = digitalRead(Rows[Row]) == LOW;
- if(!isPressedDown[Map(Row,Col)])
- {
- if(isPressedDownOld[Map(Row,Col)])
- {
- LastHit[Map(Row,Col)] = millis();
- }
- }
- isPressedDownOld[Map(Row,Col)] = isPressedDown[Map(Row,Col)];
- return isPressedDown[Map(Row,Col)] && millis() - LastHit[Map(Row,Col)] >= debounce;
- }
- else
- {
- for(int i = 0; i < RowCount; i++)
- {
- digitalWrite(Rows[i], HIGH);
- }
- digitalWrite(Rows[Row], LOW);
- isPressedDown[Map(Row,Col)] = digitalRead(Cols[Col]) == LOW;
- if(!isPressedDown[Map(Row,Col)])
- {
- if(isPressedDownOld[Map(Row,Col)])
- {
- LastHit[Map(Row,Col)] = millis();
- }
- }
- isPressedDownOld[Map(Row,Col)] = isPressedDown[Map(Row,Col)];
- return isPressedDown[Map(Row,Col)] && millis() - LastHit[Map(Row,Col)] >= debounce;
- }
- }
- else
- {
- if(isRowInput)
- {
- for(int i = 0; i < ColCount; i++)
- {
- digitalWrite(Cols[i], HIGH);
- }
- digitalWrite(Cols[Col], LOW);
- return digitalRead(Rows[Row]) == LOW;
- }
- else
- {
- for(int i = 0; i < RowCount; i++)
- {
- digitalWrite(Rows[i], HIGH);
- }
- digitalWrite(Rows[Row], LOW);
- return digitalRead(Cols[Col]) == LOW;
- }
- }
- }
- #include <usb_private.h>
- // This will cause some issues with traditional teensy code
- // go to hardware/teensy/avr/cores/usb_serial_hid/
- // look at usb_api.h and usb_private.h
- // before extern uint8_t joystick_report_data[12];
- // add
- // #ifndef JOYSTICK_LINKAGE
- // #define JOYSTICK_LINKAGE
- // after extern uint8_t joystick_report_data[12];
- // add
- // #endif
- void Run()
- {
- CapsLockOn = keyboard_leds & (1<<USB_LED_CAPS_LOCK);
- for(int i = 0; i < RowCount; i++)
- {
- for(int j = 0; j < ColCount; j++)
- {
- if(CheckButton(i,j,useBounce) && !Pressed[Map(i,j)])
- {
- Serial.print("[");
- Serial.print(i);
- Serial.print(",");
- Serial.print(j);
- Serial.print("] - \"");
- Serial.print(Keys[Map(i,j)]);
- Serial.print("\"");
- Serial.println(" is Pressed!");
- if(FnOn)
- {
- Keyboard.press(KeysFn[Map(i,j)]);
- }
- else
- {
- if(PrOn)
- {
- Keyboard.press(KeysPr[Map(i,j)]);
- }
- else
- {
- Keyboard.press(Keys[Map(i,j)]);
- }
- }
- Pressed[Map(i,j)] = true;
- if(i == FNi && j == FNj)
- FnOn = !FnOn;
- if(i == PRi && j == PRj)
- PrOn = !PrOn;
- }
- if(!CheckButton(FNi,FNj,useBounce) && Pressed[Map(FNi,FNj)])
- {
- FnOn = false;
- }
- if(!CheckButton(i,j,useBounce) && Pressed[Map(i,j)])
- {
- Keyboard.release(KeysPr[Map(i,j)]);
- Keyboard.release(KeysFn[Map(i,j)]);
- Keyboard.release( Keys[Map(i,j)]);
- Pressed[Map(i,j)] = false;
- }
- }
- }
- }
- void SetLED()
- {
- if(CapsLockOn)
- {
- digitalWrite(CapsLED, HIGH);
- }
- else
- {
- digitalWrite(CapsLED, LOW);
- }
- if(FnOn)
- {
- digitalWrite(FnLED, HIGH);
- }
- else
- {
- digitalWrite(FnLED, LOW);
- }
- if(PrOn)
- {
- digitalWrite(PrLED, HIGH);
- }
- else
- {
- digitalWrite(PrLED, LOW);
- }
- }
- //
- void loop()
- {
- Run();
- SetLED();
- delay(20);
- }
Add Comment
Please, Sign In to add comment