2016-09-22 02:29:40 +00:00
|
|
|
/* tutorial_4b_split_keyboard_with_shift_registers.ino
|
2016-09-01 02:29:59 +00:00
|
|
|
Tested on Teensy LC and two 74HC165 shift registers.
|
|
|
|
|
2016-09-25 04:27:06 +00:00
|
|
|
Controller Two shift registers daisy chained
|
2016-09-07 04:51:36 +00:00
|
|
|
| Left |**0**| | Right |**0**|**1**|**2**|**3**|**4**|**5**|**6**|
|
|
|
|
|:-----:|-----| |:-----:|-----|-----|-----|-----|-----|-----|-----|
|
|
|
|
| **0** | x | | **0** | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|
|
| **1** | y | | **1** | a | b | c | d | e | f | g |
|
2016-09-01 02:29:59 +00:00
|
|
|
*/
|
|
|
|
// ################## GLOBAL ###################
|
|
|
|
// ================= INCLUDES ==================
|
|
|
|
#include <ScanDelay.h>
|
|
|
|
#include <Code_Sc.h>
|
|
|
|
|
|
|
|
//Left matrix
|
2016-09-07 04:51:36 +00:00
|
|
|
#include <Scanner_uC.h>
|
|
|
|
#include <Row.h>
|
2016-09-01 02:29:59 +00:00
|
|
|
|
|
|
|
//Right matrix
|
2016-09-07 08:59:01 +00:00
|
|
|
#include <Scanner_ShiftRegsPISOSingleRow.h>
|
2016-09-01 02:29:59 +00:00
|
|
|
|
|
|
|
// =============== CONFIGURATION ===============
|
|
|
|
ScanDelay scanDelay(9000);
|
|
|
|
|
|
|
|
// =================== 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_e(KEY_E);
|
|
|
|
Code_Sc s_f(KEY_F);
|
|
|
|
Code_Sc s_g(KEY_G);
|
|
|
|
|
|
|
|
Code_Sc s_x(KEY_X);
|
|
|
|
Code_Sc s_y(KEY_Y);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
2016-09-22 02:29:40 +00:00
|
|
|
// ================= SCANNERS ==================
|
|
|
|
// --------------- LEFT SCANNER ----------------
|
2016-09-07 04:51:36 +00:00
|
|
|
uint8_t readPins_L[] = {14};
|
|
|
|
uint8_t readPinCount_L = sizeof(readPins_L)/sizeof(*readPins_L);
|
2016-09-01 02:29:59 +00:00
|
|
|
|
2016-09-07 04:51:36 +00:00
|
|
|
Scanner_uC scanner_L(LOW, readPins_L, readPinCount_L); //active LOW
|
2016-09-01 02:29:59 +00:00
|
|
|
|
2016-09-22 02:29:40 +00:00
|
|
|
/* --------------- RIGHT SCANNER ---------------
|
|
|
|
use slaveSelect pin SS (Arduino pin 10) for fastest scan
|
|
|
|
*/
|
|
|
|
Scanner_ShiftRegsPISOSingleRow scanner_R(HIGH, SS, 2); //active HIGH
|
|
|
|
|
|
|
|
// =================== ROWS ====================
|
|
|
|
// ----------------- LEFT ROWS -----------------
|
2016-09-01 02:29:59 +00:00
|
|
|
Key* ptrsKeys_L0[] = { &s_x };
|
2016-09-07 04:51:36 +00:00
|
|
|
uint8_t KEY_COUNT_L0 = sizeof(ptrsKeys_L0)/sizeof(*ptrsKeys_L0);
|
|
|
|
Row row_L0(scanner_L, 0, ptrsKeys_L0, KEY_COUNT_L0);
|
2016-09-01 02:29:59 +00:00
|
|
|
|
|
|
|
Key* ptrsKeys_L1[] = { &s_y };
|
2016-09-07 04:51:36 +00:00
|
|
|
uint8_t KEY_COUNT_L1 = sizeof(ptrsKeys_L1)/sizeof(*ptrsKeys_L1);
|
|
|
|
Row row_L1(scanner_L, 1, ptrsKeys_L1, KEY_COUNT_L1);
|
2016-09-01 02:29:59 +00:00
|
|
|
|
2016-09-22 02:29:40 +00:00
|
|
|
// ----------------- RIGHT ROWS ----------------
|
2016-09-07 04:51:36 +00:00
|
|
|
Key* ptrsKeys_R0[] = { &s_6, &s_5, &s_4, &s_3, //shift register on right
|
2016-09-01 02:29:59 +00:00
|
|
|
&s_c, &s_d, &s_e, &s_f,
|
2016-09-07 04:51:36 +00:00
|
|
|
&s_2, &s_1, &s_0, &s_g, //shift register on left
|
2016-09-01 02:29:59 +00:00
|
|
|
&s_a, &s_b }; //unused input pins are grounded
|
2016-09-07 04:51:36 +00:00
|
|
|
Row row_R0(scanner_R, 0, ptrsKeys_R0, sizeof(ptrsKeys_R0)/sizeof(*ptrsKeys_R0));
|
2016-09-01 02:29:59 +00:00
|
|
|
|
|
|
|
// ################### MAIN ####################
|
|
|
|
void setup()
|
|
|
|
{
|
|
|
|
Keyboard.begin();
|
2016-09-07 04:51:36 +00:00
|
|
|
scanner_R.begin();
|
2016-09-01 02:29:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void loop()
|
|
|
|
{
|
|
|
|
//left matrix
|
|
|
|
row_L0.process();
|
|
|
|
row_L1.process();
|
|
|
|
|
|
|
|
//right matrix
|
|
|
|
row_R0.process();
|
|
|
|
|
|
|
|
scanDelay.delay();
|
|
|
|
}
|