2016-09-04 04:10:11 +00:00
/* keybrd_PCA9655E.ino
2016-09-24 23:02:20 +00:00
Controller I / O expander
2016-09-04 04:10:11 +00:00
| Left | * * 0 * * | * * 1 * * | | Right | * * 0 * * | * * 1 * * |
| : - - - - - : | - - - - - - - | - - - - - - - | | : - - - - - : | - - - - - - - | - - - - - - - |
| * * 1 * * | 1 | 2 | | * * 1 * * | 3 | 4 |
| * * 0 * * | a | b | | * * 0 * * | c | d |
*/
// ################## GLOBAL ###################
// ================= INCLUDES ==================
# include <ScanDelay.h>
# include <Code_Sc.h>
2016-09-06 07:08:26 +00:00
# include <Row.h>
2016-09-04 04:10:11 +00:00
//left matrix
2016-09-06 07:08:26 +00:00
# include <Scanner_uC.h>
2016-09-04 04:10:11 +00:00
//right matrix
2016-09-25 04:27:06 +00:00
# include <Port_PCA9655E.h>
2016-09-06 07:08:26 +00:00
# include <Scanner_IOE.h>
2016-09-04 04:10:11 +00:00
// ============ SPEED CONFIGURATION ============
ScanDelay scanDelay ( 9000 ) ;
2016-09-06 07:08:26 +00:00
// ================ LEFT SCANNER ===============
2016-09-24 23:02:20 +00:00
uint8_t readPins [ ] = { 0 , 1 } ;
uint8_t readPinCount = sizeof ( readPins ) / sizeof ( * readPins ) ;
2016-09-04 04:10:11 +00:00
2016-09-24 23:02:20 +00:00
Scanner_uC scanner_L ( HIGH , readPins , readPinCount ) ;
2016-09-04 04:10:11 +00:00
2016-09-06 07:08:26 +00:00
// =============== RIGHT SCANNER ===============
2016-09-24 23:02:20 +00:00
const uint8_t IOE_ADDR = 0x18 ;
2016-09-04 04:10:11 +00:00
2016-09-25 04:27:06 +00:00
Port_PCA9655E port1 ( IOE_ADDR , 1 , 0 ) ; //for strobe
Port_PCA9655E port0 ( IOE_ADDR , 0 , 1 < < 0 | 1 < < 1 ) ; //for read
2016-09-06 07:08:26 +00:00
2016-09-24 23:02:20 +00:00
Scanner_IOE scanner_R ( HIGH , port1 , port0 ) ;
2016-09-04 04:10:11 +00:00
// =================== 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_1 ( KEY_1 ) ;
Code_Sc s_2 ( KEY_2 ) ;
Code_Sc s_3 ( KEY_3 ) ;
Code_Sc s_4 ( KEY_4 ) ;
// =================== ROWS ====================
// ---------------- LEFT ROWS ------------------
Key * ptrsKeys_L0 [ ] = { & s_1 , & s_2 } ;
uint8_t KEY_COUNT_L0 = sizeof ( ptrsKeys_L0 ) / sizeof ( * ptrsKeys_L0 ) ;
2016-09-06 07:08:26 +00:00
Row row_L0 ( scanner_L , 21 , ptrsKeys_L0 , KEY_COUNT_L0 ) ;
2016-09-04 04:10:11 +00:00
Key * ptrsKeys_L1 [ ] = { & s_a , & s_b } ;
uint8_t KEY_COUNT_L1 = sizeof ( ptrsKeys_L1 ) / sizeof ( * ptrsKeys_L1 ) ;
2016-09-06 07:08:26 +00:00
Row row_L1 ( scanner_L , 20 , ptrsKeys_L1 , KEY_COUNT_L1 ) ;
2016-09-04 04:10:11 +00:00
// ---------------- RIGHT ROWS -----------------
Key * ptrsKeys_R0 [ ] = { & s_3 , & s_4 } ;
uint8_t KEY_COUNT_R0 = sizeof ( ptrsKeys_R0 ) / sizeof ( * ptrsKeys_R0 ) ;
2016-09-06 07:08:26 +00:00
Row row_R0 ( scanner_R , 1 < < 0 , ptrsKeys_R0 , KEY_COUNT_R0 ) ;
2016-09-04 04:10:11 +00:00
Key * ptrsKeys_R1 [ ] = { & s_c , & s_d } ;
uint8_t KEY_COUNT_R1 = sizeof ( ptrsKeys_R1 ) / sizeof ( * ptrsKeys_R1 ) ;
2016-09-06 07:08:26 +00:00
Row row_R1 ( scanner_R , 1 < < 1 , ptrsKeys_R1 , KEY_COUNT_R1 ) ;
2016-09-04 04:10:11 +00:00
// ################### MAIN ####################
void setup ( )
{
Keyboard . begin ( ) ;
2016-09-06 07:08:26 +00:00
scanner_R . begin ( ) ;
2016-09-04 04:10:11 +00:00
}
void loop ( )
{
//left matrix
row_L0 . process ( ) ;
row_L1 . process ( ) ;
//right matrix
row_R0 . process ( ) ;
row_R1 . process ( ) ;
scanDelay . delay ( ) ;
//debug.print_scans_per_second();
//debug.print_microseconds_per_scan();
}