diff --git a/examples/keybrd_shift_register/keybrd_shift_register.ino b/examples/keybrd_shift_register/keybrd_shift_register.ino index 62e7ea3..2fb3d70 100644 --- a/examples/keybrd_shift_register/keybrd_shift_register.ino +++ b/examples/keybrd_shift_register/keybrd_shift_register.ino @@ -37,6 +37,10 @@ const bool RowScanner_PinsArray::STROBE_OFF = HIGH; const uint8_t RowScanner_SPIShiftRegisters::SHIFT_LOAD = 10; +//active state of right matrix +const bool RowScanner_SPIShiftRegisters::STROBE_ON = LOW; +const bool RowScanner_SPIShiftRegisters::STROBE_OFF = HIGH; + Debug debug; // ================= LEFT PINS ================= @@ -144,7 +148,7 @@ Key* ptrsKeys_R0[] = { &s_0, &s_z, &s_z, &s_z, &s_1, &s_z, &s_z, &s_z, &s_4, &s_z, &s_z, &s_z, &s_5, &s_z, &s_z, &s_z, &s_6, &s_z, &s_z, &s_z, &s_3, &s_4, &s_5, &s_6 }; const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); -Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); +Row_ShiftRegisters row_R0(0, ptrsKeys_R0, KEY_R0_COUNT); //prints a b c d u v w x Key* ptrsKeys_R1[] = { &s_a, &s_z, &s_z, &s_z, &s_b, &s_z, &s_z, &s_z, @@ -152,7 +156,7 @@ Key* ptrsKeys_R1[] = { &s_a, &s_z, &s_z, &s_z, &s_b, &s_z, &s_z, &s_z, &s_e, &s_z, &s_z, &s_z, &s_f, &s_z, &s_z, &s_z, &s_g, &s_z, &s_z, &s_z, &s_u, &s_v, &s_w, &s_x }; const uint8_t KEY_R1_COUNT = sizeof(ptrsKeys_R1)/sizeof(*ptrsKeys_R1); -Row_ShiftRegisters row_R1(9, ptrsKeys_R1, KEY_R1_COUNT); +Row_ShiftRegisters row_R1(1, ptrsKeys_R1, KEY_R1_COUNT); // ################### MAIN #################### void setup() diff --git a/src/RowScanner_PinsArray.h b/src/RowScanner_PinsArray.h index f8fd78b..b84ce64 100644 --- a/src/RowScanner_PinsArray.h +++ b/src/RowScanner_PinsArray.h @@ -12,11 +12,11 @@ Constructor is in RowScanner_PinsArray.cpp class RowScanner_PinsArray { private: - static const bool STROBE_ON; //logic level of strobe on, HIGH or LOW - static const bool STROBE_OFF; //logic level of strobe off, HIGH or LOW - const uint8_t STROBE_PIN; //Arduino pin number connected to this row - const uint8_t* const READ_PINS; //array of read pin numbers - const uint8_t READ_PIN_COUNT; //number of read pins + static const bool STROBE_ON; //logic level of strobe on, HIGH or LOW + static const bool STROBE_OFF; //logic level of strobe off, complement of STROBE_ON + const uint8_t STROBE_PIN; //Arduino pin number connected to this row + const uint8_t* const READ_PINS; //array of read pin numbers + const uint8_t READ_PIN_COUNT; //number of read pins public: RowScanner_PinsArray(const uint8_t STROBE_PIN, const uint8_t READ_PINS[], const uint8_t READ_PIN_COUNT); //todo rename READ_PIN_COUNT to KEY_COUNT ?? diff --git a/src/RowScanner_SPIShiftRegisters.cpp b/src/RowScanner_SPIShiftRegisters.cpp index 994ebd1..ca01f9c 100644 --- a/src/RowScanner_SPIShiftRegisters.cpp +++ b/src/RowScanner_SPIShiftRegisters.cpp @@ -23,7 +23,7 @@ read_pins_t RowScanner_SPIShiftRegisters::scan(uint8_t& keyCount) read_pins_t rowState = 0; //strobe row on - digitalWrite(STROBE_PIN, HIGH); + digitalWrite(STROBE_PIN, STROBE_ON); delayMicroseconds(3); //time to stablize voltage //read all the column pins @@ -32,7 +32,7 @@ read_pins_t RowScanner_SPIShiftRegisters::scan(uint8_t& keyCount) SPI.transfer(&rowState, BYTE_COUNT); //strobe row off - digitalWrite(STROBE_PIN, LOW); + digitalWrite(STROBE_PIN, STROBE_OFF); keyCount = KEY_COUNT; diff --git a/src/RowScanner_SPIShiftRegisters.h b/src/RowScanner_SPIShiftRegisters.h index 6b106eb..4cd8613 100644 --- a/src/RowScanner_SPIShiftRegisters.h +++ b/src/RowScanner_SPIShiftRegisters.h @@ -8,20 +8,29 @@ #include /* RowScanner_SPIShiftRegisters reads shift registers. -shift registers 74HC165 Parallel-In-Serial-Out (PISO) +shift registers 74HC165 is Parallel-In-Serial-Out (PISO) +Upto 4 shift registers can be in a daisy chained. -in sketch: +In sketch: const uint8_t RowScanner_SPIShiftRegisters::SHIFT_LOAD = 10; call begin() from setup() -Upto 4 shift registers can be in a daisy chained. +For active low: + const bool RowScanner_SPIShiftRegisters::STROBE_ON = LOW; + const bool RowScanner_SPIShiftRegisters::STROBE_OFF = HIGH; + //shift register parallel input pins have 10k pull-down resistors powered + //controller's MISO pin is connected to shift register's complementary serial output (/QH) pin -The shift registers are active high: - 10k pull-down resistors are grounded - connect controller's MISO pin to shift register's QH pin +For active high: + const bool RowScanner_SPIShiftRegisters::STROBE_ON = HIGH; + const bool RowScanner_SPIShiftRegisters::STROBE_OFF = LOW; + //shift register parallel input pins have 10k pull-down resistors grounded + //controller's MISO pin is connected to shift register's serial output (QH) pin -The shift register needs 5 wires. In addition, each row needs to be connected to a strobe pin from controller. + + todo move this to tutorial +The shift register needs 5 wires. The two parts of a split keyboard can be connected by one of: * eSATA cable (has 7 wires, good for 2 rows) * Ethernet cable (has 8 wires, good for 3 rows) @@ -31,6 +40,8 @@ class RowScanner_SPIShiftRegisters { private: static const uint8_t SHIFT_LOAD; //controller's pin number that is connected to shift register's SHIFT_LOAD pin + static const bool STROBE_ON; //logic level of strobe on, active state HIGH or LOW + static const bool STROBE_OFF; //logic level of strobe off, complement of active state const uint8_t STROBE_PIN; //Arduino pin number connected to this row const uint8_t BYTE_COUNT; //number of bytes to read from shift registers uint8_t KEY_COUNT;