Просмотр исходного кода

add strobe to RowScanner_SPIShiftRegisters::scan()

tags/v0.5.0
wolfv6 8 лет назад
Родитель
Сommit
1eb09df387
3 измененных файлов: 29 добавлений и 10 удалений
  1. 17
    5
      src/RowScanner_SPIShiftRegisters.cpp
  2. 7
    3
      src/RowScanner_SPIShiftRegisters.h
  3. 5
    2
      src/Row_ShiftRegisters.h

+ 17
- 5
src/RowScanner_SPIShiftRegisters.cpp Просмотреть файл



void RowScanner_SPIShiftRegisters::begin() 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);
} }


/* /*
*/ */
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
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); SPI.transfer(&rowState, BYTE_COUNT);

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

rowEnd = 1 << KEY_COUNT; rowEnd = 1 << KEY_COUNT;
return rowState; return rowState;
} }

+ 7
- 3
src/RowScanner_SPIShiftRegisters.h Просмотреть файл

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)
: 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); virtual read_pins_t scan(read_pins_mask_t& rowEnd);
void begin(); void begin();
}; };

+ 5
- 2
src/Row_ShiftRegisters.h Просмотреть файл

#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.


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)
: 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(); 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);