remove portState from ReadPort
Этот коммит содержится в:
родитель
f76ec3002d
Коммит
a7d1fc0b85
@ -7,7 +7,7 @@
|
||||
#include "IOEPort.h"
|
||||
|
||||
/* A LED_PCA9655E object is an PCA9655E pin that is connected to an LED indicator light.
|
||||
Input/Ouput Direction configuration is set to ouput in row_Port_PCA9655E.begin() and col_Port_PCA9655E.begin().
|
||||
Input/Ouput Direction configuration are set to ouput in StrobePort_PCA9655E.begin() and ReadPort_PCA9655E.begin().
|
||||
*/
|
||||
class LED_PCA9655E: public LED
|
||||
{
|
||||
|
@ -10,12 +10,11 @@ Port classes are the keybrd library's interface to microcontoller ports or I/O e
|
||||
class ReadPort
|
||||
{
|
||||
protected:
|
||||
const uint8_t readPins; //bitwise pin configuration, 1 means read column
|
||||
uint8_t portState; //bitwise pin values, which is set in read()
|
||||
const uint8_t READ_PINS; //bitwise pin configuration, 1 means read column
|
||||
public:
|
||||
ReadPort(const uint8_t readPins): readPins(readPins), portState(0) {}
|
||||
ReadPort(const uint8_t READ_PINS): READ_PINS(READ_PINS) {}
|
||||
|
||||
//read port and store it's pins values in portState
|
||||
//read port and return readState
|
||||
virtual uint8_t read()=0;
|
||||
};
|
||||
#endif
|
||||
|
@ -3,15 +3,15 @@
|
||||
/*
|
||||
configures column port's configuration, input, and pins.
|
||||
*/
|
||||
ReadPort_PCA9655E::ReadPort_PCA9655E (IOEPort& port, const uint8_t readPins)
|
||||
: ReadPort(readPins), port(port), configurationByteCommand(port.num + 6), inputByteCommand(port.num)
|
||||
ReadPort_PCA9655E::ReadPort_PCA9655E (IOEPort& port, const uint8_t READ_PINS)
|
||||
: ReadPort(READ_PINS), port(port), configurationByteCommand(port.num + 6), inputByteCommand(port.num)
|
||||
{}
|
||||
|
||||
void ReadPort_PCA9655E::begin()
|
||||
{
|
||||
Wire.beginTransmission(port.ADDR);
|
||||
Wire.write(configurationByteCommand);
|
||||
Wire.write(readPins); //0=configure as output (for LED), 1=configure as input (for read)
|
||||
Wire.write(READ_PINS); //0=configure as output (for LED), 1=configure as input (for read)
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ PCA9655E does not have internal pull-up resistors (PCA9535E does).
|
||||
|
||||
Instantiation
|
||||
------------
|
||||
readPins parameter is port's bitwise pin configuration
|
||||
READ_PINS parameter is port's bitwise pin configuration
|
||||
1=configure as input (for pins connected to column)
|
||||
0=configure as output (for LED or not connected to a column)
|
||||
|
||||
@ -22,7 +22,7 @@ Example instantiation for column port 1, with pins 2 and 3 connected to columns:
|
||||
IOEPort port1(1, 0);
|
||||
ReadPort_PCA9655E colPort1(port1, 2<<0 | 1<<3 );
|
||||
|
||||
readPins are read from pin 0 on up.
|
||||
READ_PINS are read from pin 0 on up.
|
||||
|
||||
Diode orientation
|
||||
----------------
|
||||
@ -36,7 +36,7 @@ class ReadPort_PCA9655E : public ReadPort
|
||||
const uint8_t inputByteCommand;
|
||||
public:
|
||||
//The constructor initialization list is in .cpp
|
||||
ReadPort_PCA9655E(IOEPort& port, const uint8_t readPins);
|
||||
ReadPort_PCA9655E(IOEPort& port, const uint8_t READ_PINS);
|
||||
void begin();
|
||||
|
||||
//read port and store result in portState
|
||||
|
@ -3,11 +3,11 @@
|
||||
void Row_ShiftRegisters::process()
|
||||
{
|
||||
//these variables are all bitwise, one bit per key
|
||||
read_pins_t rowState; //1 means pressed, 0 means released
|
||||
read_pins_t readState; //1 means pressed, 0 means released
|
||||
read_pins_t debouncedChanged; //1 means debounced changed
|
||||
|
||||
rowState = scanner.scan();
|
||||
debouncedChanged = debouncer.debounce(rowState, debounced);
|
||||
readState = scanner.scan();
|
||||
debouncedChanged = debouncer.debounce(readState, debounced);
|
||||
pressRelease(READ_PIN_COUNT, debouncedChanged);
|
||||
}
|
||||
|
||||
|
@ -6,10 +6,10 @@ process() scans the row and calls any newly pressed or released keys.
|
||||
void Row_uC::process()
|
||||
{
|
||||
//these variables are all bitwise, one bit per key
|
||||
read_pins_t rowState; //1 means pressed, 0 means released
|
||||
read_pins_t readState; //1 means pressed, 0 means released
|
||||
read_pins_t debouncedChanged; //1 means debounced changed
|
||||
|
||||
rowState = scanner.scan();
|
||||
debouncedChanged = debouncer.debounce(rowState, debounced);
|
||||
readState = scanner.scan();
|
||||
debouncedChanged = debouncer.debounce(readState, debounced);
|
||||
pressRelease(READ_PIN_COUNT, debouncedChanged);
|
||||
}
|
||||
|
@ -16,11 +16,11 @@ void Scanner_ShiftRegs74HC165::begin()
|
||||
}
|
||||
|
||||
/*
|
||||
Sets readPinCount and returns rowState.
|
||||
returns readState.
|
||||
*/
|
||||
read_pins_t Scanner_ShiftRegs74HC165::scan()
|
||||
{
|
||||
read_pins_t rowState = 0;
|
||||
read_pins_t readState = 0;
|
||||
|
||||
//strobe row on
|
||||
digitalWrite(STROBE_PIN, STROBE_ON);
|
||||
@ -29,16 +29,14 @@ read_pins_t Scanner_ShiftRegs74HC165::scan()
|
||||
//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(&readState, BYTE_COUNT);
|
||||
|
||||
//strobe row off
|
||||
digitalWrite(STROBE_PIN, STROBE_OFF);
|
||||
|
||||
// readPinCount = READ_PIN_COUNT;
|
||||
|
||||
//for testing on breadboard, clear unpowered pins
|
||||
rowState &= 0b11110001000100010001000100010001; //todo
|
||||
readState &= 0b11110001000100010001000100010001; //todo
|
||||
|
||||
return rowState;
|
||||
return readState;
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ Scanner_uC::Scanner_uC(const uint8_t STROBE_PIN,
|
||||
}
|
||||
|
||||
/* scan() Strobes the row and reads the columns.
|
||||
Sets READ_PIN_COUNT and returns rowState.
|
||||
Sets READ_PIN_COUNT and returns readState.
|
||||
|
||||
https://www.arduino.cc/en/Tutorial/DigitalPins
|
||||
https://www.arduino.cc/en/Reference/PinMode
|
||||
@ -38,7 +38,7 @@ https://www.arduino.cc/en/Reference/Constants > Digital Pins modes: INPUT, INPUT
|
||||
*/
|
||||
read_pins_t Scanner_uC::scan()
|
||||
{
|
||||
read_pins_t rowState = 0; //bitwise, one col per bit, 1 means key is pressed
|
||||
read_pins_t readState = 0; //bitwise, one col per bit, 1 means key is pressed
|
||||
read_pins_t readMask = 1; //bitwise, one col per bit, active col bit is 1
|
||||
|
||||
//strobe row on
|
||||
@ -50,7 +50,7 @@ read_pins_t Scanner_uC::scan()
|
||||
{
|
||||
if ( digitalRead(READ_PINS[i]) == STROBE_ON )
|
||||
{
|
||||
rowState |= readMask;
|
||||
readState |= readMask;
|
||||
}
|
||||
readMask <<= 1;
|
||||
}
|
||||
@ -59,5 +59,5 @@ read_pins_t Scanner_uC::scan()
|
||||
digitalWrite(STROBE_PIN, STROBE_OFF);
|
||||
|
||||
// readPinCount = READ_PIN_COUNT;
|
||||
return rowState;
|
||||
return readState;
|
||||
}
|
||||
|
@ -16,17 +16,18 @@ void StrobePort_PCA9655E::begin()
|
||||
|
||||
/*
|
||||
pin is bitwise, where pin being strobed is 1.
|
||||
level is HIGH or LOW.
|
||||
value is HIGH or LOW.
|
||||
Does not reset the other pins because LEDs could be using some of the pins.
|
||||
*/
|
||||
void StrobePort_PCA9655E::write(const uint8_t pin, const bool level)
|
||||
void StrobePort_PCA9655E::write(const uint8_t pin, const bool value)
|
||||
{
|
||||
if (level == LOW)
|
||||
if (value == LOW) //if active low
|
||||
{
|
||||
port.outputVal &= ~pin; //set pin output to low, do not reset the other pins because LEDs
|
||||
port.outputVal &= ~pin; //set pin output to low
|
||||
}
|
||||
else
|
||||
else //if active high
|
||||
{
|
||||
port.outputVal |= pin; //set pin output to high
|
||||
port.outputVal |= pin; //set pin output to high
|
||||
}
|
||||
|
||||
Wire.beginTransmission(port.ADDR);
|
||||
|
Ссылка в новой задаче
Block a user