keybrd library is an open source library for creating custom-keyboard firmware.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

keybrd_PCA9655E.ino 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* keybrd_PCA9655E.ino
  2. keyboard layout is same as top-left keys of DH matrices:
  3. Controller I/O expander
  4. | Left | **0** | **1** | | Right | **2** | **3** |
  5. |:-----:|-------|-------| |:-----:|-------|-------|
  6. | **1** | q | w | | **1** | u | i |
  7. | **0** | [ | b | | **0** | h | y |
  8. PCA9655E pin assignments are compatible with this sketch and keybrd_DH.ino
  9. DESTINATION PIN PIN_NUMBER PIN DESTINATION
  10. x INT 1 24 VDD Teensy LC 3.3V
  11. SCL AD1 2 23 SDA Teensy LC 18
  12. GND AD2 3 22 SCL Teensy LC 19
  13. GND IO0_0 4 21 AD0 SCL
  14. GND IO0_1 5 20 IO1_6 x
  15. col2 IO0_2 6 19 IO1_5 x
  16. col3 IO0_3 7 18 IO1_4 x
  17. GND IO0_4 8 17 IO1_4 x
  18. GND IO0_5 9 16 IO1_3 x
  19. x IO0_6 10 15 IO1_2 x
  20. x IO0_7 11 14 IO1_1 row1
  21. GND VSS 12 13 IO1_0 row2
  22. */
  23. // ################## GLOBAL ###################
  24. // ================= INCLUDES ==================
  25. #include <ScanDelay.h>
  26. #include <Code_Sc.h>
  27. #include <Row.h>
  28. //left matrix
  29. #include <Scanner_uC.h>
  30. //right matrix
  31. #include <Port_PCA9655E.h>
  32. #include <Scanner_IOE.h>
  33. // ============ SPEED CONFIGURATION ============
  34. ScanDelay scanDelay(9000);
  35. // ================ LEFT SCANNER ===============
  36. uint8_t readPins[] = {0, 1};
  37. uint8_t readPinCount = sizeof(readPins)/sizeof(*readPins);
  38. Scanner_uC scanner_L(HIGH, readPins, readPinCount);
  39. // =============== RIGHT SCANNER ===============
  40. const uint8_t IOE_ADDR = 0x18; //AD2=GND AD1=SCL AD0=SCL
  41. Port_PCA9655E port0(IOE_ADDR, 0, 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 ); //for read
  42. Port_PCA9655E port1(IOE_ADDR, 1, 0); //for strobe
  43. Scanner_IOE scanner_R(HIGH, port1, port0);
  44. // =================== CODES ===================
  45. Code_Sc s_B(KEY_B);
  46. Code_Sc s_I(KEY_I);
  47. Code_Sc s_H(KEY_H);
  48. Code_Sc s_Q(KEY_Q);
  49. Code_Sc s_W(KEY_W);
  50. Code_Sc s_U(KEY_U);
  51. Code_Sc s_Y(KEY_Y);
  52. Code_Sc s_0(KEY_0);
  53. Code_Sc s_1(KEY_1);
  54. Code_Sc s_leftBracket(KEY_LEFT_BRACE);
  55. // =================== ROWS ====================
  56. // ---------------- LEFT ROWS ------------------
  57. Key* ptrsKeys_L0[] = { &s_Q, &s_W };
  58. uint8_t KEY_COUNT_L0 = sizeof(ptrsKeys_L0)/sizeof(*ptrsKeys_L0);
  59. Row row_L0(scanner_L, 21, ptrsKeys_L0, KEY_COUNT_L0);
  60. Key* ptrsKeys_L1[] = { &s_leftBracket, &s_B };
  61. uint8_t KEY_COUNT_L1 = sizeof(ptrsKeys_L1)/sizeof(*ptrsKeys_L1);
  62. Row row_L1(scanner_L, 20, ptrsKeys_L1, KEY_COUNT_L1);
  63. // ---------------- RIGHT ROWS -----------------
  64. Key* ptrsKeys_R0[] = { &s_0, &s_1, &s_U, &s_I };
  65. uint8_t KEY_COUNT_R0 = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0);
  66. Row row_R0(scanner_R, 1<<0, ptrsKeys_R0, KEY_COUNT_R0);
  67. Key* ptrsKeys_R1[] = { &s_0, &s_1, &s_H, &s_Y };
  68. uint8_t KEY_COUNT_R1 = sizeof(ptrsKeys_R1)/sizeof(*ptrsKeys_R1);
  69. Row row_R1(scanner_R, 1<<1, ptrsKeys_R1, KEY_COUNT_R1);
  70. /*
  71. */
  72. // ################### MAIN ####################
  73. void setup()
  74. {
  75. delay(6000);
  76. Keyboard.print("keybrd_PCA9655E.ino ");
  77. //Keyboard.begin(); not needed ?? it's in DH mainSketch.cpp and keybrd_4c_split_keyboard_with_IOE.ino
  78. scanner_R.begin();
  79. }
  80. void loop()
  81. {
  82. //left matrix (commented because keys are not connected)
  83. //row_L0.process();
  84. //row_L1.process();
  85. //right matrix
  86. row_R0.process();
  87. row_R1.process();
  88. scanDelay.delay();
  89. //debug.printScansPerSecond();
  90. //debug.printMicrosecondsPerScan();
  91. }