|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include "Scanner_IOE.h"
-
- /* init() is called once for each row from Row constructor.
- */
- void Scanner_IOE::init(const uint8_t strobePin)
- {
- //empty
- }
-
- /* begin() should be called once from sketch setup().
- Initiates communication protocal and configs ports.
- */
- void Scanner_IOE::begin()
- {
- refPortWrite.beginProtocol();
- refPortWrite.begin(activeState);
- refPortRead.begin(activeState);
- }
-
- /* scan() is called on every iteration of sketch loop().
- strobePin is a bit pattern, 1 means that row pin is active.
- scan() strobes the row's strobePin and retuns state of port's input pins.
- */
- read_pins_t Scanner_IOE::scan(const uint8_t strobePin)
- {
- uint8_t readState; //bits, 1 means key is pressed, 0 means released
-
- //strobe on
- if (activeState == LOW) //if active low
- {
- refPortWrite.writeLow(strobePin);
- }
- else //if active high
- {
- refPortWrite.writeHigh(strobePin);
- }
- delayMicroseconds(3); //time to stabilize voltage
-
- //read the port pins
- readState = refPortRead.read();
-
- //strobe off
- if (activeState == LOW) //if active low
- {
- refPortWrite.writeHigh(strobePin);
- readState = ~readState;
- }
- else //if active high
- {
- refPortWrite.writeLow(strobePin);
- }
-
- return readState;
- }
|