2016-11-02 21:28:58 +00:00
# include "Scanner_ShiftRegsRead.h"
2016-09-25 04:27:06 +00:00
/* constructor
2016-11-06 09:41:56 +00:00
Parameter activeState is not used .
2016-09-25 04:27:06 +00:00
*/
2016-11-06 09:41:56 +00:00
Scanner_ShiftRegsRead : : Scanner_ShiftRegsRead ( const bool activeState ,
2016-09-25 04:27:06 +00:00
const uint8_t slaveSelect , const uint8_t byte_count )
: slaveSelect ( slaveSelect ) , byte_count ( byte_count )
{
pinMode ( slaveSelect , OUTPUT ) ;
}
/* init() is called once for each row from Row constructor.
*/
2016-11-02 21:28:58 +00:00
void Scanner_ShiftRegsRead : : init ( const uint8_t strobePin )
2016-09-25 04:27:06 +00:00
{
//empty function
}
/* begin() should be called once from sketch setup().
Initializes shift register ' s shift / load pin .
*/
2016-11-02 21:28:58 +00:00
void Scanner_ShiftRegsRead : : begin ( )
2016-09-25 04:27:06 +00:00
{
SPI . begin ( ) ;
digitalWrite ( slaveSelect , HIGH ) ;
}
/* scan() returns state of the shift register's input pins.
2016-10-30 08:30:13 +00:00
Parameter strobePin is not used .
2016-09-25 04:27:06 +00:00
No strobe pin is needed , the shift register is wired so the strobe is effectivley always " on " .
Bit patterns are 1 bit per key .
*/
2016-11-02 21:28:58 +00:00
read_pins_t Scanner_ShiftRegsRead : : scan ( const uint8_t strobePin )
2016-09-25 04:27:06 +00:00
{
read_pins_t readState = 0 ; //bits, 1 means key is pressed, 0 means released
//read all the column pins
digitalWrite ( slaveSelect , HIGH ) ; //shift the data toward a serial output
SPI . transfer ( & readState , byte_count ) ;
2016-11-02 21:15:16 +00:00
digitalWrite ( slaveSelect , LOW ) ; //load parallel inputs to the register
2016-09-25 04:27:06 +00:00
return readState ;
}