Przeglądaj źródła

add strobe to RowScanner_SPIShiftRegisters::scan()

tags/v0.5.0
wolfv6 7 lat temu
rodzic
commit
1eb09df387

+ 17
- 5
src/RowScanner_SPIShiftRegisters.cpp Wyświetl plik

@@ -2,8 +2,12 @@

void RowScanner_SPIShiftRegisters::begin()
{
pinMode (SS, OUTPUT);
digitalWrite (SS, HIGH);
//configure row
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)
{
//todo rowEnd, rowState, return int size depend on BYTE_COUNT, like in send(), set in config_keybrd?
read_pins_t rowState = 0;

digitalWrite(SS, LOW); //load parallel inputs to the register
digitalWrite(SS, HIGH); //shift the data toward a serial output
//strobe row on
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);

//strobe row off
digitalWrite(STROBE_PIN, HIGH);

rowEnd = 1 << KEY_COUNT;
return rowState;
}

+ 7
- 3
src/RowScanner_SPIShiftRegisters.h Wyświetl plik

@@ -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
{
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 KEY_COUNT; //number of keys in row
public:
RowScanner_SPIShiftRegisters(const uint8_t SS, uint8_t BYTE_COUNT, uint8_t KEY_COUNT)
: SS(SS), BYTE_COUNT(BYTE_COUNT), KEY_COUNT(KEY_COUNT) {}
RowScanner_SPIShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD,
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);
void begin();
};

+ 5
- 2
src/Row_ShiftRegisters.h Wyświetl plik

@@ -4,6 +4,7 @@
#include <RowBase.h>
#include <RowScanner_SPIShiftRegisters.h>
#include <Debouncer_4Samples.h>
//todo #include <Debouncer_Not.h>

/* Row_DH_IOE is a row connected to an Input/Output Expander.

@@ -28,9 +29,11 @@ class Row_ShiftRegisters : public RowBase
private:
RowScanner_SPIShiftRegisters scanner;
Debouncer_4Samples debouncer;
//Debouncer_Not debouncer; //todo test
public:
Row_ShiftRegisters(const uint8_t SS, uint8_t BYTE_COUNT, Key *const ptrsKeys[], uint8_t KEY_COUNT)
: RowBase(ptrsKeys), scanner(SS, BYTE_COUNT, KEY_COUNT) { }
Row_ShiftRegisters(const uint8_t STROBE_PIN, const uint8_t SHIFT_LOAD, uint8_t BYTE_COUNT,
Key *const ptrsKeys[], uint8_t KEY_COUNT)
: RowBase(ptrsKeys), scanner(STROBE_PIN, SHIFT_LOAD, BYTE_COUNT, 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);