├── README.md └── LHM_Morph_012_master.ino /README.md: -------------------------------------------------------------------------------- 1 | # LHM-Morph 2 | Simple esp32 bluetooth keyboard with diodes. 3 | 4 | The firmware was made for this keyboard: https://youtu.be/j5VzlZ-F2JQ 5 | 6 | Here are the 3D files: https://www.thingiverse.com/thing:5682866 7 | -------------------------------------------------------------------------------- /LHM_Morph_012_master.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This firmware was developed by @LifeHackerMax for LHM_Morph_32 Keyboard. 3 | */ 4 | 5 | #include 6 | #include 7 | 8 | BleKeyboard bleKeyboard("LHM Morph Keydoard", "LifeHackerMax", 100); 9 | 10 | int LAYER (0); 11 | 12 | const unsigned long 13 | FIRST_PRESS_DELAY(300), 14 | REPEAT_FIRST(40), // ms required before repeating on long press 15 | REPEAT_INCR(80); // repeat interval for long press 16 | 17 | 18 | const byte ROWS = 4; //four rows 19 | const byte COLS = 8; //eight columns 20 | const byte RPT = 33; 21 | char keys[ROWS][COLS] = { 22 | {'7','f','e','g','6','j','d','v'}, 23 | {'i','h','a','c','5','b','1','3'}, 24 | {'u','r','t','n','9','p','0','y'}, 25 | {'w','o','8','m','4','2','s','l'} 26 | }; 27 | byte rowPins[ROWS] = {32, 33, 14, 4}; //connect to the row pinouts of the kpd 28 | byte colPins[COLS] = {5, 18, 19, 21, 27, 26, 22, 23}; //connect to the column pinouts of the kpd 29 | long rptx[RPT] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}; 30 | Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 31 | 32 | unsigned long 33 | but1Time, but2Time, but3Time, but4Time, but5Time, but6Time, but7Time, but8Time, but9Time, but10Time, 34 | but11Time, but12Time, but13Time, but14Time, but15Time, but16Time, but17Time, but18Time, but19Time, but20Time, 35 | but21Time, but22Time, but23Time, but24Time, but25Time, but26Time, but27Time, but28Time, but29Time, but30Time, 36 | but31Time, but32Time; 37 | 38 | int 39 | but1 = 0, but2 = 0, but3 = 0, but4 = 0, but5 = 0, but6 = 0, but7 = 0, but8 = 0, but9 = 0, but10 = 0, 40 | but11 = 0, but12 = 0, but13 = 0, but14 = 0, but15 = 0, but16 = 0, but17 = 0, but18 = 0, but19 = 0, but20 = 0, 41 | but21 = 0, but22 = 0, but23 = 0, but24 = 0, but25 = 0, but26 = 0, but27 = 0, but28 = 0, but29 = 0, but30 = 0, 42 | but31 = 0, but32 = 0; 43 | 44 | static const unsigned long REFRESH_INTERVAL = 9000; // ms 45 | static unsigned long lastRefreshTime = 0; 46 | 47 | static const unsigned long SLEEP_REFRESH_INTERVAL = 900000; // ms 48 | static unsigned long lastSleepRefreshTime = 0; 49 | 50 | void callback(){ 51 | } 52 | 53 | void setup() { 54 | Serial.begin(115200); 55 | 56 | kpd.setHoldTime(REPEAT_FIRST); 57 | kpd.setDebounceTime(6); 58 | 59 | Serial.println("Starting BLE work!"); 60 | bleKeyboard.begin(); 61 | 62 | touchAttachInterrupt(T7, callback, CHANGE); 63 | esp_sleep_enable_touchpad_wakeup(); 64 | } 65 | 66 | void loop() { 67 | 68 | static int lastLayer(0); 69 | static int state(0); 70 | static int interLayer(0); 71 | 72 | int batValue = analogRead(35); 73 | batValue = map(batValue, 1850, 2450, 0, 100); 74 | 75 | 76 | 77 | if(millis() - lastRefreshTime >= REFRESH_INTERVAL) 78 | { 79 | lastRefreshTime += REFRESH_INTERVAL; 80 | bleKeyboard.setBatteryLevel(batValue); 81 | } 82 | 83 | if(millis() - lastSleepRefreshTime >= SLEEP_REFRESH_INTERVAL) 84 | { 85 | lastSleepRefreshTime += SLEEP_REFRESH_INTERVAL; 86 | 87 | esp_deep_sleep_start(); 88 | } 89 | 90 | if (but1 == 0) rptx[1]= REPEAT_FIRST; 91 | if (but2 == 0) rptx[2]= REPEAT_FIRST; 92 | if (but3 == 0) rptx[3]= REPEAT_FIRST; 93 | if (but4 == 0) rptx[4]= REPEAT_FIRST; 94 | if (but5 == 0) rptx[5]= REPEAT_FIRST; 95 | if (but6 == 0) rptx[6]= REPEAT_FIRST; 96 | if (but7 == 0) rptx[7]= REPEAT_FIRST; 97 | if (but8 == 0) rptx[8]= REPEAT_FIRST; 98 | if (but9 == 0) rptx[9]= REPEAT_FIRST; 99 | if (but10 == 0) rptx[10]= REPEAT_FIRST; 100 | if (but11 == 0) rptx[11]= REPEAT_FIRST; 101 | if (but12 == 0) rptx[12]= REPEAT_FIRST; 102 | if (but13 == 0) rptx[13]= REPEAT_FIRST; 103 | if (but14 == 0) rptx[14]= REPEAT_FIRST; 104 | if (but15 == 0) rptx[15]= REPEAT_FIRST; 105 | if (but16 == 0) rptx[16]= REPEAT_FIRST; 106 | if (but17 == 0) rptx[17]= REPEAT_FIRST; 107 | if (but18 == 0) rptx[18]= REPEAT_FIRST; 108 | if (but19 == 0) rptx[19]= REPEAT_FIRST; 109 | if (but20 == 0) rptx[20]= REPEAT_FIRST; 110 | if (but21 == 0) rptx[21]= REPEAT_FIRST; 111 | if (but22 == 0) rptx[22]= REPEAT_FIRST; 112 | if (but23 == 0) rptx[23]= REPEAT_FIRST; 113 | if (but24 == 0) rptx[24]= REPEAT_FIRST; 114 | if (but25 == 0) rptx[25]= REPEAT_FIRST; 115 | if (but26 == 0) rptx[26]= REPEAT_FIRST; 116 | if (but27 == 0) rptx[27]= REPEAT_FIRST; 117 | if (but28 == 0) rptx[28]= REPEAT_FIRST; 118 | if (but29 == 0) { 119 | if (but30 == 0) { 120 | if (lastLayer != interLayer){ 121 | lastLayer = interLayer; 122 | } 123 | } 124 | LAYER = lastLayer; 125 | rptx[29]= REPEAT_FIRST; 126 | } 127 | 128 | if (but30 == 0) { 129 | if (but29 == 0) { 130 | if (lastLayer != interLayer){ 131 | lastLayer = interLayer; 132 | } 133 | } 134 | LAYER = lastLayer; 135 | rptx[30]= REPEAT_FIRST; 136 | } 137 | 138 | if (but31 == 0) rptx[31]= REPEAT_FIRST; 139 | if (but32 == 0) rptx[32]= REPEAT_FIRST; 140 | 141 | if (kpd.getKeys()) 142 | { 143 | for (int i=0; i rptx[1])) { 412 | if (rptx[1] != REPEAT_FIRST) { 413 | rptx[1] += REPEAT_INCR; 414 | } 415 | else{ 416 | rptx[1] += FIRST_PRESS_DELAY; 417 | } 418 | bleKeyboard.write(KEY_ESC); 419 | } 420 | 421 | // button2 ---------------------------------------------------------------- 422 | 423 | if ((but2 == 1) && (millis()- but2Time > rptx[2])) { 424 | if (rptx[2] != REPEAT_FIRST) { 425 | rptx[2] += REPEAT_INCR; 426 | } 427 | else{ 428 | rptx[2] += FIRST_PRESS_DELAY; 429 | } 430 | if(but7 == 0) { 431 | if (LAYER == 0) bleKeyboard.print("a"); 432 | if (LAYER == 1) bleKeyboard.print("1"); 433 | if (LAYER == 2) bleKeyboard.write(KEY_TAB); 434 | if (LAYER == 3) bleKeyboard.write(KEY_F1); 435 | } 436 | if(but7 == 1) { 437 | if (LAYER == 0) bleKeyboard.print("b"); 438 | if (LAYER == 1) bleKeyboard.print("!"); 439 | } 440 | } 441 | 442 | // Button 3 ---------------------------------------------------------------- 443 | 444 | if ((but3 == 1) && (millis()- but3Time > rptx[3])) { 445 | if (rptx[3] != REPEAT_FIRST) { 446 | rptx[3] += REPEAT_INCR; 447 | } 448 | else{ 449 | rptx[3] += FIRST_PRESS_DELAY; 450 | } 451 | if(but8 == 0) { 452 | if (LAYER == 0) bleKeyboard.print("d"); 453 | if (LAYER == 1) bleKeyboard.print("2"); 454 | if (LAYER == 2) bleKeyboard.write(KEY_MEDIA_LOCAL_MACHINE_BROWSER); 455 | if (LAYER == 3) bleKeyboard.write(KEY_F2); 456 | } 457 | if(but8 == 1) { 458 | if (LAYER == 0) bleKeyboard.print("j"); 459 | if (LAYER == 1) bleKeyboard.print("@"); 460 | if (LAYER == 2) bleKeyboard.print("<"); 461 | // if (LAYER == 3) bleKeyboard.write(KEY_F2); 462 | } 463 | } 464 | 465 | // Button 4 ---------------------------------------------------------------- 466 | 467 | if ((but4 == 1) && (millis()- but4Time > rptx[4])) { 468 | if (rptx[4] != REPEAT_FIRST) { 469 | rptx[4] += REPEAT_INCR; 470 | } 471 | else{ 472 | rptx[4] += FIRST_PRESS_DELAY; 473 | } 474 | if(but9 == 0) { 475 | if (LAYER == 0) bleKeyboard.print("e"); 476 | if (LAYER == 1) bleKeyboard.print("3"); 477 | if (LAYER == 2) bleKeyboard.write(KEY_MEDIA_VOLUME_UP); 478 | if (LAYER == 3) bleKeyboard.write(KEY_F3); 479 | } 480 | if(but9 == 1) { 481 | if (LAYER == 0) bleKeyboard.print("f"); 482 | if (LAYER == 1) bleKeyboard.print("#"); 483 | if (LAYER == 2) bleKeyboard.write(KEY_MEDIA_MUTE); 484 | // if (LAYER == 3) bleKeyboard.write(KEY_F3); 485 | } 486 | } 487 | 488 | // Button 5 ---------------------------------------------------------------- 489 | 490 | if ((but5 == 1) && (millis()- but5Time > rptx[5])) { 491 | if (rptx[5] != REPEAT_FIRST) { 492 | rptx[5] += REPEAT_INCR; 493 | } 494 | else{ 495 | rptx[5] += FIRST_PRESS_DELAY; 496 | } 497 | 498 | if((but11 == 0) && (but10 == 0)) { 499 | if (LAYER == 0) bleKeyboard.print("h"); 500 | if (LAYER == 1) bleKeyboard.print("4"); 501 | if (LAYER == 2) bleKeyboard.write(KEY_PAGE_UP); 502 | if (LAYER == 3) bleKeyboard.write(KEY_F4); 503 | } 504 | if((but11 == 1) && (but10 == 0)) { 505 | if (LAYER == 0) bleKeyboard.print("q"); 506 | if (LAYER == 1) bleKeyboard.print("("); 507 | // if (LAYER == 2) bleKeyboard.write(KEY_PAGE_UP); 508 | // if (LAYER == 3) bleKeyboard.write(KEY_F4); 509 | } 510 | if((but11 == 0) && (but10 == 1)) { 511 | if (LAYER == 0) bleKeyboard.print("z"); 512 | if (LAYER == 1) bleKeyboard.print("$"); 513 | if (LAYER == 2) bleKeyboard.write(KEY_PAGE_DOWN); 514 | // if (LAYER == 3) bleKeyboard.write(KEY_F4); 515 | } 516 | } 517 | 518 | // Button 6 ---------------------------------------------------------------- 519 | 520 | if ((but6 == 1) && (millis()- but6Time > rptx[6])) { 521 | if (rptx[6] != REPEAT_FIRST) { 522 | rptx[6] += REPEAT_INCR; 523 | } 524 | else{ 525 | rptx[6] += FIRST_PRESS_DELAY; 526 | } 527 | bleKeyboard.press(KEY_LEFT_CTRL); 528 | } 529 | 530 | if (but6 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 531 | 532 | // Button 7 ---------------------------------------------------------------- 533 | 534 | if ((but7 == 1) && (millis()- but7Time > rptx[7])) { 535 | if (rptx[7] != REPEAT_FIRST) { 536 | rptx[7] += REPEAT_INCR; 537 | } 538 | else{ 539 | rptx[7] += FIRST_PRESS_DELAY; 540 | } 541 | if((but2 == 0)) { 542 | if (LAYER == 0) bleKeyboard.print("c"); 543 | if (LAYER == 1) bleKeyboard.print("/"); 544 | if (LAYER == 2) bleKeyboard.write(KEY_CAPS_LOCK); 545 | if (LAYER == 3) bleKeyboard.print(","); 546 | } 547 | } 548 | 549 | // Button 8 ---------------------------------------------------------------- 550 | 551 | if ((but8 == 1) && (millis()- but8Time > rptx[8])) { 552 | if (rptx[8] != REPEAT_FIRST) { 553 | rptx[8] += REPEAT_INCR; 554 | } 555 | else{ 556 | rptx[8] += FIRST_PRESS_DELAY; 557 | } 558 | if((but3 == 0)) { 559 | if (LAYER == 0) bleKeyboard.print("v"); 560 | if (LAYER == 1) bleKeyboard.print("["); 561 | if (LAYER == 2) bleKeyboard.write(KEY_LEFT_GUI); 562 | if (LAYER == 3) bleKeyboard.print("."); 563 | } 564 | } 565 | 566 | // Button 9 ---------------------------------------------------------------- 567 | 568 | if ((but9 == 1) && (millis()- but9Time > rptx[9])) { 569 | if (rptx[9] != REPEAT_FIRST) { 570 | rptx[9] += REPEAT_INCR; 571 | } 572 | else{ 573 | rptx[9] += FIRST_PRESS_DELAY; 574 | } 575 | if((but4 == 0)) { 576 | if (LAYER == 0) bleKeyboard.print("g"); 577 | if (LAYER == 1) bleKeyboard.print("]"); 578 | if (LAYER == 2) bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN); 579 | if (LAYER == 3) bleKeyboard.print(";"); 580 | } 581 | } 582 | 583 | // Button 10 ---------------------------------------------------------------- 584 | 585 | if ((but10 == 1) && (millis()- but10Time > rptx[10])) { 586 | if (rptx[10] != REPEAT_FIRST) { 587 | rptx[10] += REPEAT_INCR; 588 | } 589 | else{ 590 | rptx[10] += FIRST_PRESS_DELAY; 591 | } 592 | if((but5 == 0) && (but16 == 0)) { 593 | if (LAYER == 0) bleKeyboard.print("i"); 594 | if (LAYER == 1) bleKeyboard.print("\\"); 595 | if (LAYER == 2) bleKeyboard.write(KEY_PAGE_DOWN); 596 | if (LAYER == 3) bleKeyboard.print("'"); 597 | } 598 | 599 | if((but5 == 0) && (but16 == 1)) { 600 | if (LAYER == 0) bleKeyboard.print("x"); 601 | if (LAYER == 1) bleKeyboard.print(")"); 602 | // if (LAYER == 2) bleKeyboard.write(KEY_PAGE_DOWN); 603 | // if (LAYER == 3) bleKeyboard.print("'"); 604 | } 605 | } 606 | // Button 11 ---------------------------------------------------------------- 607 | 608 | if ((but11 == 1) && (millis()- but11Time > rptx[11])) { 609 | if (rptx[11] != REPEAT_FIRST) { 610 | rptx[11] += REPEAT_INCR; 611 | } 612 | else{ 613 | rptx[11] += FIRST_PRESS_DELAY; 614 | } 615 | if((but16 == 0) && (but5 == 0)) { 616 | if (LAYER == 0) bleKeyboard.print("l"); 617 | if (LAYER == 1) bleKeyboard.print("5"); 618 | if (LAYER == 2) bleKeyboard.write(KEY_HOME); 619 | if (LAYER == 3) bleKeyboard.write(KEY_F5); 620 | } 621 | if((but16 == 1) && (but5 == 0)) { 622 | if (LAYER == 0) bleKeyboard.print("k"); 623 | if (LAYER == 1) bleKeyboard.print("%"); 624 | // if (LAYER == 2) bleKeyboard.write(KEY_HOME); 625 | // if (LAYER == 3) bleKeyboard.write(KEY_F5); 626 | } 627 | } 628 | 629 | // Button 12 ---------------------------------------------------------------- 630 | 631 | if ((but12 == 1) && (millis()- but12Time > rptx[12])) { 632 | if (rptx[12] != REPEAT_FIRST) { 633 | rptx[12] += REPEAT_INCR; 634 | } 635 | else{ 636 | rptx[12] += FIRST_PRESS_DELAY; 637 | } 638 | if((but17 == 0)) { 639 | if (LAYER == 0) bleKeyboard.print("n"); 640 | if (LAYER == 1) bleKeyboard.print("6"); 641 | if (LAYER == 2) bleKeyboard.write(KEY_UP_ARROW); 642 | if (LAYER == 3) bleKeyboard.write(KEY_F6); 643 | } 644 | if((but17 == 1)) { 645 | if (LAYER == 0) bleKeyboard.print("m"); 646 | if (LAYER == 1) bleKeyboard.print("^"); 647 | // if (LAYER == 2) bleKeyboard.write(KEY_UP_ARROW); 648 | // if (LAYER == 3) bleKeyboard.write(KEY_F6); 649 | } 650 | 651 | } 652 | 653 | // Button 13 ---------------------------------------------------------------- 654 | 655 | if ((but13 == 1) && (millis()- but13Time > rptx[13])) { 656 | if (rptx[13] != REPEAT_FIRST) { 657 | rptx[13] += REPEAT_INCR; 658 | } 659 | else{ 660 | rptx[13] += FIRST_PRESS_DELAY; 661 | } 662 | if((but18 == 0)) { 663 | if (LAYER == 0) bleKeyboard.print("r"); 664 | if (LAYER == 1) bleKeyboard.print("7"); 665 | if (LAYER == 2) bleKeyboard.write(KEY_END); 666 | if (LAYER == 3) bleKeyboard.write(KEY_F7); 667 | } 668 | if((but18 == 1)) { 669 | if (LAYER == 0) bleKeyboard.print("p"); 670 | if (LAYER == 1) bleKeyboard.print("&"); 671 | // if (LAYER == 2) bleKeyboard.write(KEY_END); 672 | // if (LAYER == 3) bleKeyboard.write(KEY_F7); 673 | } 674 | 675 | } 676 | 677 | // Button 14 ---------------------------------------------------------------- 678 | 679 | if ((but14 == 1) && (millis()- but14Time > rptx[14])) { 680 | if (rptx[14] != REPEAT_FIRST) { 681 | rptx[14] += REPEAT_INCR; 682 | } 683 | else{ 684 | rptx[14] += FIRST_PRESS_DELAY; 685 | } 686 | if((but19 == 0)) { 687 | if (LAYER == 0) bleKeyboard.print("o"); 688 | if (LAYER == 1) bleKeyboard.print("8"); 689 | if (LAYER == 2) bleKeyboard.write(KEY_DELETE); 690 | if (LAYER == 3) bleKeyboard.write(KEY_F8); 691 | } 692 | if((but19 == 1)) { 693 | if (LAYER == 0) bleKeyboard.print("y"); 694 | if (LAYER == 1) bleKeyboard.print("*"); 695 | // if (LAYER == 2) bleKeyboard.write(KEY_DELETE); 696 | // if (LAYER == 3) bleKeyboard.write(KEY_F8); 697 | } 698 | } 699 | 700 | // Button 15 ---------------------------------------------------------------- 701 | 702 | if ((but15 == 1) && (millis()- but15Time > rptx[15])) { 703 | if (rptx[15] != REPEAT_FIRST) { 704 | rptx[15] += REPEAT_INCR; 705 | } 706 | else{ 707 | rptx[15] += FIRST_PRESS_DELAY; 708 | } 709 | bleKeyboard.write(KEY_BACKSPACE); 710 | } 711 | 712 | // Button 16 ---------------------------------------------------------------- 713 | 714 | if ((but16 == 1) && (millis()- but16Time > rptx[16])) { 715 | if (rptx[16] != REPEAT_FIRST) { 716 | rptx[16] += REPEAT_INCR; 717 | } 718 | else{ 719 | rptx[16] += FIRST_PRESS_DELAY; 720 | } 721 | if((but10 == 0) && (but11 == 0)){ 722 | if (LAYER == 0) bleKeyboard.print("s"); 723 | if (LAYER == 1) bleKeyboard.print("="); 724 | if (LAYER == 2) bleKeyboard.write(KEY_LEFT_ARROW); 725 | if (LAYER == 3) bleKeyboard.write(KEY_F12); 726 | } 727 | } 728 | 729 | // Button 17 ---------------------------------------------------------------- 730 | 731 | if ((but17 == 1) && (millis()- but17Time > rptx[17])) { 732 | if (rptx[17] != REPEAT_FIRST) { 733 | rptx[17] += REPEAT_INCR; 734 | } 735 | else{ 736 | rptx[17] += FIRST_PRESS_DELAY; 737 | } 738 | if((but12 == 0)) { 739 | if (LAYER == 0) bleKeyboard.print("t"); 740 | if (LAYER == 1) bleKeyboard.print("-"); 741 | if (LAYER == 2) bleKeyboard.write(KEY_DOWN_ARROW); 742 | if (LAYER == 3) bleKeyboard.write(KEY_F11); 743 | } 744 | } 745 | // Button 18 ---------------------------------------------------------------- 746 | 747 | if ((but18 == 1) && (millis()- but18Time > rptx[18])) { 748 | if (rptx[18] != REPEAT_FIRST) { 749 | rptx[18] += REPEAT_INCR; 750 | } 751 | else{ 752 | rptx[18] += FIRST_PRESS_DELAY; 753 | } 754 | if((but13 == 0)) { 755 | if (LAYER == 0) bleKeyboard.print("u"); 756 | if (LAYER == 1) bleKeyboard.print("0"); 757 | if (LAYER == 2) bleKeyboard.write(KEY_RIGHT_ARROW); 758 | if (LAYER == 3) bleKeyboard.write(KEY_F10); 759 | } 760 | } 761 | 762 | // Button 19 ---------------------------------------------------------------- 763 | 764 | if ((but19 == 1) && (millis()- but19Time > rptx[19])) { 765 | if (rptx[19] != REPEAT_FIRST) { 766 | rptx[19] += REPEAT_INCR; 767 | } 768 | else{ 769 | rptx[19] += FIRST_PRESS_DELAY; 770 | } 771 | if((but14 == 0)) { 772 | if (LAYER == 0) bleKeyboard.print("w"); 773 | if (LAYER == 1) bleKeyboard.print("9"); 774 | if (LAYER == 2) bleKeyboard.write(KEY_INSERT); 775 | if (LAYER == 3) bleKeyboard.write(KEY_F9); 776 | } 777 | } 778 | 779 | // Button 20 ---------------------------------------------------------------- 780 | 781 | if ((but20 == 1) && (millis()- but20Time > rptx[20])) { 782 | if (rptx[20] != REPEAT_FIRST) { 783 | rptx[20] += REPEAT_INCR; 784 | } 785 | else{ 786 | rptx[20] += FIRST_PRESS_DELAY; 787 | } 788 | bleKeyboard.write(KEY_RETURN); 789 | } 790 | 791 | 792 | // Button 21 ---------------------------------------------------------------- 793 | 794 | if ((but21 == 1) && (millis()- but21Time > rptx[21])) { 795 | if (rptx[21] != REPEAT_FIRST) { 796 | rptx[21] += REPEAT_INCR; 797 | } 798 | else{ 799 | rptx[21] += FIRST_PRESS_DELAY; 800 | } 801 | if (LAYER == 0) bleKeyboard.print(","); 802 | if (LAYER == 1) bleKeyboard.print(","); 803 | if (LAYER == 2) bleKeyboard.print(","); 804 | if (LAYER == 3) bleKeyboard.print(","); 805 | } 806 | //if (but21 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 807 | 808 | 809 | // Button 22 ---------------------------------------------------------------- 810 | 811 | if ((but22 == 1) && (millis()- but22Time > rptx[22])) { 812 | if (rptx[22] != REPEAT_FIRST) { 813 | rptx[22] += REPEAT_INCR; 814 | } 815 | else{ 816 | rptx[22] += FIRST_PRESS_DELAY; 817 | } 818 | if (LAYER == 0) bleKeyboard.print("."); 819 | if (LAYER == 1) bleKeyboard.print("."); 820 | if (LAYER == 2) bleKeyboard.print("."); 821 | if (LAYER == 3) bleKeyboard.print("."); 822 | } 823 | //if (but22 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 824 | 825 | 826 | 827 | // Button 23 ---------------------------------------------------------------- 828 | 829 | if ((but23 == 1) && (millis()- but23Time > rptx[23])) { 830 | if (rptx[23] != REPEAT_FIRST) { 831 | rptx[23] += REPEAT_INCR; 832 | } 833 | else{ 834 | rptx[23] += FIRST_PRESS_DELAY; 835 | } 836 | if (LAYER == 0) bleKeyboard.write(KEY_DELETE); //bleKeyboard.print(";"); 837 | if (LAYER == 1) bleKeyboard.print(";"); 838 | if (LAYER == 2) bleKeyboard.print(";"); 839 | if (LAYER == 3) bleKeyboard.print(";"); 840 | } 841 | //if (but23 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 842 | 843 | 844 | 845 | // Button 24 ---------------------------------------------------------------- 846 | 847 | if ((but24 == 1) && (millis()- but24Time > rptx[24])) { 848 | if (rptx[24] != REPEAT_FIRST) { 849 | rptx[24] += REPEAT_INCR; 850 | } 851 | else{ 852 | rptx[24] += FIRST_PRESS_DELAY; 853 | } 854 | if (LAYER == 0) bleKeyboard.print("/"); 855 | if (LAYER == 1) bleKeyboard.print("/"); 856 | if (LAYER == 2) bleKeyboard.print("/"); 857 | if (LAYER == 3) bleKeyboard.print("/"); 858 | } 859 | //if (but24 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 860 | 861 | 862 | 863 | // Button 25 ---------------------------------------------------------------- 864 | 865 | if ((but25 == 1) && (millis()- but25Time > rptx[25])) { 866 | if (rptx[25] != REPEAT_FIRST) { 867 | rptx[25] += REPEAT_INCR; 868 | } 869 | else{ 870 | rptx[25] += FIRST_PRESS_DELAY; 871 | } 872 | if (LAYER == 0) bleKeyboard.print("-"); 873 | if (LAYER == 1) bleKeyboard.print("-"); 874 | if (LAYER == 2) bleKeyboard.print("-"); 875 | if (LAYER == 3) bleKeyboard.print("-"); 876 | } 877 | //if (but25 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 878 | 879 | 880 | 881 | // Button 26 ---------------------------------------------------------------- 882 | 883 | if ((but26 == 1) && (millis()- but26Time > rptx[26])) { 884 | if (rptx[26] != REPEAT_FIRST) { 885 | rptx[26] += REPEAT_INCR; 886 | } 887 | else{ 888 | rptx[26] += FIRST_PRESS_DELAY; 889 | } 890 | if (LAYER == 0) bleKeyboard.print("="); 891 | if (LAYER == 1) bleKeyboard.print("="); 892 | if (LAYER == 2) bleKeyboard.print("="); 893 | if (LAYER == 3) bleKeyboard.print("="); 894 | } 895 | //if (but26 == 3) bleKeyboard.release(KEY_LEFT_CTRL); 896 | 897 | 898 | 899 | // Button 27 ---------------------------------------------------------------- 900 | 901 | if ((but27 == 1) && (millis()- but27Time > rptx[27])) { 902 | if (rptx[27] != REPEAT_FIRST) { 903 | rptx[27] += REPEAT_INCR; 904 | } 905 | else{ 906 | rptx[27] += FIRST_PRESS_DELAY; 907 | } 908 | bleKeyboard.press(KEY_LEFT_SHIFT); 909 | } 910 | if (but27 == 3) bleKeyboard.release(KEY_LEFT_SHIFT); 911 | 912 | 913 | // Button 28 ---------------------------------------------------------------- 914 | 915 | if ((but28 == 1) && (millis()- but28Time > rptx[28])) { 916 | if (rptx[28] != REPEAT_FIRST) { 917 | rptx[28] += REPEAT_INCR; 918 | } 919 | else{ 920 | rptx[28] += FIRST_PRESS_DELAY; 921 | } 922 | bleKeyboard.press(KEY_LEFT_ALT); 923 | } 924 | if (but28 == 3) bleKeyboard.release(KEY_LEFT_ALT); 925 | 926 | 927 | 928 | // Button 29 FN1 KEY ------------------------------------------------------- 929 | 930 | 931 | 932 | // Button 30 FN2 KEY ------------------------------------------------------- 933 | 934 | 935 | 936 | // Button 31 ---------------------------------------------------------------- 937 | 938 | if ((but31 == 1) && (millis()- but31Time > rptx[31])) { 939 | if (rptx[31] != REPEAT_FIRST) { 940 | rptx[31] += REPEAT_INCR; 941 | } 942 | else{ 943 | rptx[31] += FIRST_PRESS_DELAY; 944 | } 945 | bleKeyboard.print(' '); 946 | } 947 | 948 | // Button 32 ---------------------------------------------------------------- 949 | 950 | if ((but32 == 1) && (millis()- but32Time > rptx[32])) { 951 | if (rptx[32] != REPEAT_FIRST) { 952 | rptx[32] += REPEAT_INCR; 953 | } 954 | else{ 955 | rptx[32] += FIRST_PRESS_DELAY; 956 | } 957 | bleKeyboard.press(KEY_RIGHT_SHIFT); 958 | } 959 | if (but32 == 3) bleKeyboard.release(KEY_RIGHT_SHIFT); 960 | 961 | 962 | } 963 | } // End loop 964 | --------------------------------------------------------------------------------