add strobe to RowScanner_SPIShiftRegisters::scan()
This commit is contained in:
parent
fd7da5aebb
commit
1eb09df387
@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
void RowScanner_SPIShiftRegisters::begin()
|
void RowScanner_SPIShiftRegisters::begin()
|
||||||
{
|
{
|
||||||
pinMode (SS, OUTPUT);
|
//configure row
|
||||||
digitalWrite (SS, HIGH);
|
pinMode(STROBE_PIN, OUTPUT);
|
||||||
|
|
||||||
|
//todo there is only one slave, is select needed?
|
||||||
|
pinMode (SHIFT_LOAD, OUTPUT);
|
||||||
|
digitalWrite (SHIFT_LOAD, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -11,12 +15,20 @@ Sets rowEnd and returns rowState.
|
|||||||
*/
|
*/
|
||||||
read_pins_t RowScanner_SPIShiftRegisters::scan(read_pins_mask_t& rowEnd)
|
read_pins_t RowScanner_SPIShiftRegisters::scan(read_pins_mask_t& rowEnd)
|
||||||
{
|
{
|
||||||
//todo rowEnd, rowState, return int size depend on BYTE_COUNT, like in send(), set in config_keybrd?
|
|
||||||
read_pins_t rowState = 0;
|
read_pins_t rowState = 0;
|
||||||
|
|
||||||
digitalWrite(SS, LOW); //load parallel inputs to the register
|
//strobe row on
|
||||||
digitalWrite(SS, HIGH); //shift the data toward a serial output
|
digitalWrite(STROBE_PIN, LOW);
|
||||||
|
delayMicroseconds(3); //time to stablize voltage
|
||||||
|
|
||||||
|
//read all the column pins
|
||||||
|
digitalWrite(SHIFT_LOAD, LOW); //load parallel inputs to the register
|
||||||
|
digitalWrite(SHIFT_LOAD, HIGH); //shift the data toward a serial output
|
||||||
SPI.transfer(&rowState, BYTE_COUNT);
|
SPI.transfer(&rowState, BYTE_COUNT);
|
||||||
|
|
||||||
|
//strobe row off
|
||||||
|
digitalWrite(STROBE_PIN, HIGH);
|
||||||
|
|
||||||
rowEnd = 1 << KEY_COUNT;
|
rowEnd = 1 << KEY_COUNT;
|
||||||
return rowState;
|
return rowState;
|
||||||
}
|
}
|
||||||
|
@ -14,12 +14,16 @@ The maximum keys per row is 31, because Arduino's largest type is 32 bits and ro
|
|||||||
class RowScanner_SPIShiftRegisters : public RowScannerInterface
|
class RowScanner_SPIShiftRegisters : public RowScannerInterface
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
const uint8_t SS; //pin on master that selects slave
|
//todo static const bool ACTIVE_HIGH; //logic level of strobe pin: 0=activeLow, 1=activeHigh
|
||||||
|
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 BYTE_COUNT; //number of bytes to read from shift registers
|
const uint8_t BYTE_COUNT; //number of bytes to read from shift registers
|
||||||
const uint8_t KEY_COUNT; //number of keys in row
|
const uint8_t KEY_COUNT; //number of keys in row
|
||||||
public:
|
public:
|
||||||
RowScanner_SPIShiftRegisters(const uint8_t SS, uint8_t BYTE_COUNT, uint8_t KEY_COUNT)
|
RowScanner_SPIShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD,
|
||||||
: SS(SS), BYTE_COUNT(BYTE_COUNT), KEY_COUNT(KEY_COUNT) {}
|
uint8_t BYTE_COUNT, uint8_t KEY_COUNT)
|
||||||
|
: STROBE_PIN(STROBE_PIN), SHIFT_LOAD(SHIFT_LOAD),
|
||||||
|
BYTE_COUNT(BYTE_COUNT), KEY_COUNT(KEY_COUNT) {}
|
||||||
virtual read_pins_t scan(read_pins_mask_t& rowEnd);
|
virtual read_pins_t scan(read_pins_mask_t& rowEnd);
|
||||||
void begin();
|
void begin();
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <RowBase.h>
|
#include <RowBase.h>
|
||||||
#include <RowScanner_SPIShiftRegisters.h>
|
#include <RowScanner_SPIShiftRegisters.h>
|
||||||
#include <Debouncer_4Samples.h>
|
#include <Debouncer_4Samples.h>
|
||||||
|
//todo #include <Debouncer_Not.h>
|
||||||
|
|
||||||
/* Row_DH_IOE is a row connected to an Input/Output Expander.
|
/* Row_DH_IOE is a row connected to an Input/Output Expander.
|
||||||
|
|
||||||
@ -28,9 +29,11 @@ class Row_ShiftRegisters : public RowBase
|
|||||||
private:
|
private:
|
||||||
RowScanner_SPIShiftRegisters scanner;
|
RowScanner_SPIShiftRegisters scanner;
|
||||||
Debouncer_4Samples debouncer;
|
Debouncer_4Samples debouncer;
|
||||||
|
//Debouncer_Not debouncer; //todo test
|
||||||
public:
|
public:
|
||||||
Row_ShiftRegisters(const uint8_t SS, uint8_t BYTE_COUNT, Key *const ptrsKeys[], uint8_t KEY_COUNT)
|
Row_ShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD, uint8_t BYTE_COUNT,
|
||||||
: RowBase(ptrsKeys), scanner(SS, BYTE_COUNT, KEY_COUNT) { }
|
Key *const ptrsKeys[], uint8_t KEY_COUNT)
|
||||||
|
: RowBase(ptrsKeys), scanner(STROBE_PIN, SHIFT_LOAD, BYTE_COUNT, KEY_COUNT) { }
|
||||||
void begin();
|
void begin();
|
||||||
read_pins_t scan(read_pins_mask_t& rowEnd);
|
read_pins_t scan(read_pins_mask_t& rowEnd);
|
||||||
read_pins_t debounce(const read_pins_t rowState, read_pins_t& debounced);
|
read_pins_t debounce(const read_pins_t rowState, read_pins_t& debounced);
|
||||||
|
Reference in New Issue
Block a user