Arkiverade
1
0
This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
keybrd/src/Scanner_IOE.cpp

55 rader
1.4 KiB
C++

#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;
}