|
|
@@ -1,8 +1,11 @@ |
|
|
|
/* keybrd_shift_reg.ino |
|
|
|
tested on Teensy LC and daisy chained 74HC165 shift registers |
|
|
|
add this line to RowScanner_SPIShiftRegisters::scan(): |
|
|
|
//clear unpowered pins (for testing bb) |
|
|
|
rowState &= 0b01010001000100010001000100010001; //also 31st key |
|
|
|
|
|
|
|
the keyboard hardware for this sketch has 4 shift registers, |
|
|
|
with every 4th input pins connected to a pull-down resistor and matrix column. |
|
|
|
unused input pins are not grounded, so add this line to RowScanner_SPIShiftRegisters::scan(): |
|
|
|
//clear unpowered pins (for testing on breadboard) |
|
|
|
rowState &= 0b01010001000100010001000100010001; |
|
|
|
|
|
|
|
Layout |
|
|
|
| Left |**0**|**1**| | Right |**0**|**1**|**2**|**3**|**4**|**5**|**6**|**7**|**8**| |
|
|
@@ -23,14 +26,10 @@ Layout |
|
|
|
#include <Row_ShiftRegisters.h> |
|
|
|
|
|
|
|
// =============== CONFIGURATION =============== |
|
|
|
const unsigned int RowBase::DELAY_MICROSECONDS = 500; //500 |
|
|
|
const unsigned int RowBase::DELAY_MICROSECONDS = 0; //500 |
|
|
|
const bool RowScanner_PinsArray::ACTIVE_HIGH = 0; //left matrix is active low |
|
|
|
const uint8_t RowScanner_SPIShiftRegisters::SHIFT_LOAD = 10; |
|
|
|
|
|
|
|
//activeLow has diode cathode (band) on row |
|
|
|
//activeHigh has diode cathode (band) on col, and pull down resistors on cols |
|
|
|
//0=active low, 1= active high |
|
|
|
const bool RowScanner_PinsArray::ACTIVE_HIGH = 0; |
|
|
|
|
|
|
|
Debug debug; |
|
|
|
|
|
|
|
// ================= LEFT PINS ================= |
|
|
@@ -71,6 +70,7 @@ Row_uC row_L1(1, readPins, READ_PIN_COUNT, ptrsKeys_L1); |
|
|
|
//Row_ShiftRegisters(STROBE_PIN, ptrsKeys[], KEY_COUNT) |
|
|
|
//the s_z are place holders and should not print |
|
|
|
|
|
|
|
/* |
|
|
|
//prints 0 1 |
|
|
|
Key* ptrsKeys_R0[] = { &s_0, &s_z, &s_z, &s_z, &s_1, &s_z, &s_z, &s_z }; |
|
|
|
const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); |
|
|
@@ -80,6 +80,7 @@ Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); |
|
|
|
Key* ptrsKeys_R1[] = { &s_a, &s_z, &s_z, &s_z, &s_b, &s_z, &s_z, &s_z }; |
|
|
|
const uint8_t KEY_R1_COUNT = sizeof(ptrsKeys_R1)/sizeof(*ptrsKeys_R1); |
|
|
|
Row_ShiftRegisters row_R1(9, ptrsKeys_R1, KEY_R1_COUNT); |
|
|
|
*/ |
|
|
|
/* |
|
|
|
//prints 0 1 2 |
|
|
|
Key* ptrsKeys_R0[] = { &s_0, &s_z, &s_z, &s_z, &s_1, &s_z, &s_z, &s_z, |
|
|
@@ -103,8 +104,7 @@ const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); |
|
|
|
Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); |
|
|
|
*/ |
|
|
|
|
|
|
|
/* |
|
|
|
//prints 0 1 2 3 4 5 6 7 8 |
|
|
|
//prints 0 1 2 3 4 5 6 7 8, microseconds_per_scan=87 |
|
|
|
Key* ptrsKeys_R0[] = { &s_0, &s_z, &s_z, &s_z, &s_1, &s_z, &s_z, &s_z, |
|
|
|
&s_2, &s_z, &s_z, &s_z, &s_3, &s_z, &s_z, &s_z, |
|
|
|
&s_4, &s_z, &s_z, &s_z, &s_5, &s_z, &s_z, &s_z, |
|
|
@@ -119,14 +119,13 @@ Key* ptrsKeys_R1[] = { &s_a, &s_z, &s_z, &s_z, &s_b, &s_z, &s_z, &s_z, |
|
|
|
&s_g, &s_z, &s_z, &s_z, &s_h, &s_z, &s_i }; //31-key limit because endRow |
|
|
|
const uint8_t KEY_R1_COUNT = sizeof(ptrsKeys_R1)/sizeof(*ptrsKeys_R1); |
|
|
|
Row_ShiftRegisters row_R1(9, ptrsKeys_R1, KEY_R1_COUNT); |
|
|
|
*/ |
|
|
|
|
|
|
|
const uint8_t LED_PIN = 16; //indicates wait |
|
|
|
|
|
|
|
//sometimes OS takes 6 seconds to recongnize keyboard, LED blinks from the begining |
|
|
|
void wait() |
|
|
|
{ |
|
|
|
for (uint8_t count = 0; count < 7; count++) |
|
|
|
for (uint8_t count = 0; count < 6; count++) |
|
|
|
{ |
|
|
|
//print count |
|
|
|
Keyboard.print(count); |
|
|
@@ -164,5 +163,5 @@ void loop() |
|
|
|
|
|
|
|
//delay(100); |
|
|
|
//Keyboard.println(""); |
|
|
|
//debug.print_microseconds_per_scan(); |
|
|
|
debug.print_microseconds_per_scan(); |
|
|
|
} |