From 6651a50ef2895abb6864179bd67850538bc8877e Mon Sep 17 00:00:00 2001 From: wolfv6 Date: Sat, 2 Jul 2016 03:58:41 -0600 Subject: [PATCH] change RowScanner_SPIShiftRegisters::SHIFT_LOAD to static --- .../keybrd_shift_reg_works1.no | 136 ------------------ ...hift_reg.ino => keybrd_shift_register.ino} | 54 +++---- src/RowScanner_SPIShiftRegisters.cpp | 7 +- src/RowScanner_SPIShiftRegisters.h | 8 +- src/Row_ShiftRegisters.h | 5 +- 5 files changed, 36 insertions(+), 174 deletions(-) delete mode 100644 examples/keybrd_shift_register/keybrd_shift_reg_works1.no rename examples/keybrd_shift_register/{keybrd_shift_reg.ino => keybrd_shift_register.ino} (75%) diff --git a/examples/keybrd_shift_register/keybrd_shift_reg_works1.no b/examples/keybrd_shift_register/keybrd_shift_reg_works1.no deleted file mode 100644 index 0dc3c55..0000000 --- a/examples/keybrd_shift_register/keybrd_shift_reg_works1.no +++ /dev/null @@ -1,136 +0,0 @@ -/* this works on Teensy LC 1*bb, active low and active high - -| Layout | **0** | **1** | -|:------:|-------|-------| -| **0** | a | b | -| **1** | c | d | -*/ -// ################## GLOBAL ################### -// ================= INCLUDES ================== -#include - -//IOE Ports -#include "IOExpanderPort.h" -#include -#include - -//Codes -#include - -//Matrix -#include -#include -#include - -// =============== CONFIGURATION =============== -const unsigned int RowBase::DELAY_MICROSECONDS = 500; - -//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::activeHigh = 0; - -Debug debug; - -// ================ LEFT PORTS ================= -uint8_t readPins[] = {14, 15}; -uint8_t READ_PIN_COUNT = sizeof(readPins)/sizeof(*readPins); - -// =================== CODES =================== -Code_Sc s_a(KEY_A); -Code_Sc s_b(KEY_B); -Code_Sc s_c(KEY_C); -Code_Sc s_d(KEY_D); - -Code_Sc s_0(KEY_0); -Code_Sc s_1(KEY_1); -Code_Sc s_2(KEY_2); -Code_Sc s_3(KEY_3); -Code_Sc s_4(KEY_4); -Code_Sc s_5(KEY_5); -Code_Sc s_6(KEY_6); -Code_Sc s_7(KEY_7); -Code_Sc s_8(KEY_8); -Code_Sc s_z(KEY_Z); - -// ================= LEFT ROWS ================= -Key* ptrsKeys_L0[] = { &s_a, &s_b }; -Row_uC row_L0(0, readPins, READ_PIN_COUNT, ptrsKeys_L0); - -Key* ptrsKeys_L1[] = { &s_c, &s_d }; -Row_uC row_L1(1, readPins, READ_PIN_COUNT, ptrsKeys_L1); - -// ================= RIGHT ROWS ================ -// typedef should be large in /home/wolfv/Documents/Arduino/keybrd_proj/keybrd/src/config_keybrd.h - -/* -//prints 0 4 -Key* ptrsKeys_R[] = { &s_0, &s_1, &s_2, &s_3, - &s_4, &s_5, &s_6, &s_7 }; //the most that 8-bit send() can handle -const uint8_t KEY_COUNT = sizeof(ptrsKeys_R)/sizeof(*ptrsKeys_R); -Row_ShiftRegisters row_R(9, 1, ptrsKeys_R, KEY_COUNT); // (SS, BYTE_COUNT,,) -*/ -/* -//prints 0 4 8 -Key* ptrsKeys_R[] = { &s_0, &s_z, &s_z, &s_z, - &s_4, &s_z, &s_z, &s_z, - &s_8, &s_z, &s_z, &s_z }; //the s_z are place holders and should not print -const uint8_t KEY_COUNT = sizeof(ptrsKeys_R)/sizeof(*ptrsKeys_R); -Row_ShiftRegisters row_R(9, 2, ptrsKeys_R, KEY_COUNT); -*/ - -//prints 0 4 8 c -Key* ptrsKeys_R[] = { &s_0, &s_z, &s_z, &s_z, - &s_4, &s_z, &s_z, &s_z, - &s_8, &s_z, &s_z, &s_z, - &s_c, &s_z, &s_z, &s_z }; //the s_z are place holders and should not print -const uint8_t KEY_COUNT = sizeof(ptrsKeys_R)/sizeof(*ptrsKeys_R); -Row_ShiftRegisters row_R(9, 2, ptrsKeys_R, KEY_COUNT); - -const uint8_t LED_PIN = 16; - -void wait() -{ - static uint8_t count = 0; - - //print count - Keyboard.print(count); - Keyboard.print(F(" ")); - count++; - - //blink LED - digitalWrite(LED_PIN, HIGH); - delay(900); - digitalWrite(LED_PIN, LOW); - delay(100); -} -// ################### MAIN #################### -void setup() -{ - pinMode (LED_PIN, OUTPUT); - Keyboard.begin(); - wait(); //0 - SPI.begin(); - wait(); //1 - row_R.begin(); - wait(); //2 - wait(); //3 - wait(); //4 - wait(); //5 sometimes OS takes 6 seconds to recongnize keyboard, LED blinks from the begining - Keyboard.print(F("keybrd_shift_reg.ino ")); - debug.print_free_RAM(); -} - -void loop() -{ - row_L0.process(); - row_L1.process(); - - row_R.process(); - - //row_R0.process(); - //row_R1.process(); - -//delay(100); -//Keyboard.println(""); -} diff --git a/examples/keybrd_shift_register/keybrd_shift_reg.ino b/examples/keybrd_shift_register/keybrd_shift_register.ino similarity index 75% rename from examples/keybrd_shift_register/keybrd_shift_reg.ino rename to examples/keybrd_shift_register/keybrd_shift_register.ino index b30318d..438e760 100644 --- a/examples/keybrd_shift_register/keybrd_shift_reg.ino +++ b/examples/keybrd_shift_register/keybrd_shift_register.ino @@ -1,20 +1,19 @@ /* keybrd_shift_reg.ino -this works on Teensy LC 1*bb, active low and active high +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 -| Layout | **0** | **1** | -|:------:|-------|-------| -| **0** | a | b | -| **1** | c | d | +Layout +| Left |**0**|**1**| | Right |**0**|**1**|**2**|**3**|**4**|**5**|**6**|**7**|**8**| +|:-----:|-----|-----| |:-----:|-----|-----|-----|-----|-----|-----|-----|-----|-----| +| **0** | a | b | | **0** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| **1** | c | d | | **1** | a | b | c | d | e | f | g | h | i | */ // ################## GLOBAL ################### // ================= INCLUDES ================== #include -//IOE Ports -#include "IOExpanderPort.h" -#include -#include - //Codes #include @@ -25,6 +24,7 @@ this works on Teensy LC 1*bb, active low and active high // =============== CONFIGURATION =============== const unsigned int RowBase::DELAY_MICROSECONDS = 500; //500 +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 @@ -68,27 +68,31 @@ Row_uC row_L1(1, readPins, READ_PIN_COUNT, ptrsKeys_L1); // ================= RIGHT ROWS ================ //typedef should be large in /home/wolfv/Documents/Arduino/keybrd_proj/keybrd/src/config_keybrd.h -//Row_ShiftRegisters(STROBE_PIN, SHIFT_LOAD, ptrsKeys[], KEY_COUNT) +//Row_ShiftRegisters(STROBE_PIN, ptrsKeys[], KEY_COUNT) //the s_z are place holders and should not print -/* -//BYTE_COUNT 1, prints 0 1 -Key* ptrsKeys_R0[] = { &s_0, &s_a, &s_b, &s_c, &s_1, &s_d, &s_e, &s_f }; + +//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); -Row_ShiftRegisters row_R0(8, 10, ptrsKeys_R0, KEY_R0_COUNT); -*/ +Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); + +//prints a b +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, &s_2, &s_z, &s_z, &s_z }; const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); -Row_ShiftRegisters row_R0(8, 10, ptrsKeys_R0, KEY_R0_COUNT); +Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); */ /* //prints 0 1 2 3 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 }; const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); -Row_ShiftRegisters row_R0(8, 10, ptrsKeys_R0, KEY_R0_COUNT); +Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); */ /* //prints 0 1 2 3 4 5 @@ -96,24 +100,26 @@ 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 }; const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); -Row_ShiftRegisters row_R0(8, 10, ptrsKeys_R0, KEY_R0_COUNT); +Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); */ +/* //prints 0 1 2 3 4 5 6 7 8 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, &s_6, &s_z, &s_z, &s_z, &s_7, &s_z, &s_8 }; //31-key limit because endRow const uint8_t KEY_R0_COUNT = sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0); -Row_ShiftRegisters row_R0(8, 10, ptrsKeys_R0, KEY_R0_COUNT); +Row_ShiftRegisters row_R0(8, ptrsKeys_R0, KEY_R0_COUNT); -//unresponsive +//prints a b c d e f g h i Key* ptrsKeys_R1[] = { &s_a, &s_z, &s_z, &s_z, &s_b, &s_z, &s_z, &s_z, &s_c, &s_z, &s_z, &s_z, &s_d, &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_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, 10, ptrsKeys_R1, KEY_R1_COUNT); +Row_ShiftRegisters row_R1(9, ptrsKeys_R1, KEY_R1_COUNT); +*/ const uint8_t LED_PIN = 16; //indicates wait @@ -139,10 +145,10 @@ void setup() pinMode (LED_PIN, OUTPUT); Keyboard.begin(); SPI.begin(); - - wait(); row_R0.begin(); row_R1.begin(); + + wait(); Keyboard.print(F("keybrd_shift_reg.ino ")); debug.print_free_RAM(); } diff --git a/src/RowScanner_SPIShiftRegisters.cpp b/src/RowScanner_SPIShiftRegisters.cpp index 94a1e66..4b2c57c 100644 --- a/src/RowScanner_SPIShiftRegisters.cpp +++ b/src/RowScanner_SPIShiftRegisters.cpp @@ -32,13 +32,8 @@ read_pins_t RowScanner_SPIShiftRegisters::scan(read_pins_mask_t& rowEnd) rowEnd = 1 << KEY_COUNT; //clear unpowered pins (for testing bb) todo - if (BYTE_COUNT == 1) rowState &= 0b00010001; - if (BYTE_COUNT == 2) rowState &= 0b0001000100010001; - if (BYTE_COUNT == 3) rowState &= 0b000100010001000100010001; - if (BYTE_COUNT == 4) rowState &= 0b01010001000100010001000100010001; //also 31st key + rowState &= 0b01010001000100010001000100010001; //also 31st key -//Keyboard.print(" ");//todo -//Keyboard.print(rowState); //why does rowState change to 1 for both rows? (row pin 8 is unplugged) return rowState; } diff --git a/src/RowScanner_SPIShiftRegisters.h b/src/RowScanner_SPIShiftRegisters.h index 7489f19..cd555f9 100644 --- a/src/RowScanner_SPIShiftRegisters.h +++ b/src/RowScanner_SPIShiftRegisters.h @@ -31,15 +31,13 @@ class RowScanner_SPIShiftRegisters : public RowScannerInterface { private: //todo static const bool ACTIVE_HIGH; //logic level of strobe pin: 0=activeLow, 1=activeHigh + static const uint8_t SHIFT_LOAD; //controller's pin number that is connected to shift register's SHIFT_LOAD pin const uint8_t STROBE_PIN; //Arduino pin number connected to this row - const uint8_t SHIFT_LOAD; //controller's pin number that is connected to shift register's SHIFT_LOAD pin const uint8_t KEY_COUNT; //number of keys in row const uint8_t BYTE_COUNT; //number of bytes to read from shift registers public: - RowScanner_SPIShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD, - uint8_t KEY_COUNT) - : STROBE_PIN(STROBE_PIN), SHIFT_LOAD(SHIFT_LOAD), - KEY_COUNT(KEY_COUNT), BYTE_COUNT(ceil (float(KEY_COUNT)/8)) {} + RowScanner_SPIShiftRegisters(const uint8_t STROBE_PIN, uint8_t KEY_COUNT) + : STROBE_PIN(STROBE_PIN), KEY_COUNT(KEY_COUNT), BYTE_COUNT(ceil (float(KEY_COUNT)/8)) {} virtual read_pins_t scan(read_pins_mask_t& rowEnd); void begin(); }; diff --git a/src/Row_ShiftRegisters.h b/src/Row_ShiftRegisters.h index 890a996..5166845 100644 --- a/src/Row_ShiftRegisters.h +++ b/src/Row_ShiftRegisters.h @@ -31,9 +31,8 @@ class Row_ShiftRegisters : public RowBase Debouncer_4Samples debouncer; //Debouncer_Not debouncer; //todo test public: - Row_ShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD, - Key *const ptrsKeys[], uint8_t KEY_COUNT) - : RowBase(ptrsKeys), scanner(STROBE_PIN, SHIFT_LOAD, KEY_COUNT) { } + Row_ShiftRegisters(const uint8_t STROBE_PIN, Key *const ptrsKeys[], uint8_t KEY_COUNT) + : RowBase(ptrsKeys), scanner(STROBE_PIN, KEY_COUNT) { } void begin(); read_pins_t scan(read_pins_mask_t& rowEnd); read_pins_t debounce(const read_pins_t rowState, read_pins_t& debounced);