Archived
1
0

replace Port_*::write() with setHigh() and setLow(), and move strobe logic from Port_*::write() to Scanner_IOE::scan()

This commit is contained in:
wolfv6 2016-11-14 00:29:29 -07:00
parent 46988319a1
commit e92716e263
13 changed files with 93 additions and 61 deletions

View File

@ -1,4 +1,4 @@
/* keybrd_PCA9655E.ino /* PCA9655E_5_keybrd.ino
keyboard layout is same as top-left keys of DH matrices: keyboard layout is same as top-left keys of DH matrices:
Controller I/O expander Controller I/O expander
@ -90,9 +90,9 @@ Row row_R1(scanner_R, 1<<1, ptrsKeys_R1, KEY_COUNT_R1);
void setup() void setup()
{ {
delay(6000); delay(6000);
Keyboard.print("keybrd_PCA9655E.ino "); Keyboard.print("PCA9655E_5_keybrd.ino ");
//Keyboard.begin(); not needed ?? it's in DH mainSketch.cpp and keybrd_4c_split_keyboard_with_IOE.ino //Keyboard.begin();todo not needed ?? it's in DH mainSketch.cpp and keybrd_4c_split_keyboard_with_IOE.ino
scanner_R.begin(); scanner_R.begin();
} }

View File

@ -2,10 +2,10 @@
void LED_Port::on() void LED_Port::on()
{ {
refPort.write(pin, HIGH); refPort.setHigh(pin);
} }
void LED_Port::off() void LED_Port::off()
{ {
refPort.write(pin, LOW); refPort.setLow(pin);
} }

View File

@ -17,7 +17,8 @@ class PortInterface : public PortWriteInterface
public: public:
virtual void beginProtocol()=0; //SPI bus or I2C bus virtual void beginProtocol()=0; //SPI bus or I2C bus
virtual void begin(const uint8_t strobeOn)=0; //configure GPIO pins virtual void begin(const uint8_t strobeOn)=0; //configure GPIO pins
virtual void write(const uint8_t pin, const bool pinLogicLevel)=0; virtual void setLow(const uint8_t pin)=0;
virtual void setHigh(const uint8_t pin)=0;
virtual uint8_t read()=0; virtual uint8_t read()=0;
}; };
#endif #endif

View File

@ -14,6 +14,7 @@ write() interface emulates Arduino's digitalWrite().
class PortWriteInterface class PortWriteInterface
{ {
public: public:
virtual void write(const uint8_t pin, const bool pinLogicLevel)=0; virtual void setLow(const uint8_t pin)=0;
virtual void setHigh(const uint8_t pin)=0;
}; };
#endif #endif

View File

@ -39,21 +39,25 @@ void Port_MCP23018::begin(const uint8_t strobeOn)
Wire.endTransmission(); Wire.endTransmission();
} }
/* write() sets pin output to logicLevel. /* setLow() sets pin output LOW.
pin is bit pattern, where pin being strobed is 1. pin is bit pattern, where pin being set is 1.
logicLevel is HIGH or LOW.
write() does not overwrite the other pins.
*/ */
void Port_MCP23018::write(const uint8_t pin, const bool logicLevel) void Port_MCP23018::setLow(const uint8_t pin)
{ {
if (logicLevel == LOW) outputVal &= ~pin; //set pin output to low
{
outputVal &= ~pin; //set pin output to low Wire.beginTransmission(deviceAddr);
} Wire.write(portNum + 0x12); //GPIO
else Wire.write(outputVal);
{ Wire.endTransmission();
outputVal |= pin; //set pin output to high }
}
/* setHigh() sets pin output HIGH.
pin is bit pattern, where pin being set is 1.
*/
void Port_MCP23018::setHigh(const uint8_t pin)
{
outputVal |= pin; //set pin output to high
Wire.beginTransmission(deviceAddr); Wire.beginTransmission(deviceAddr);
Wire.write(portNum + 0x12); //GPIO Wire.write(portNum + 0x12); //GPIO

View File

@ -42,7 +42,8 @@ class Port_MCP23018 : public PortInterface
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {}
void beginProtocol(); void beginProtocol();
void begin(const uint8_t strobeOn); void begin(const uint8_t strobeOn);
virtual void write(const uint8_t pin, const bool logicLevel); virtual void setLow(const uint8_t pin);
virtual void setHigh(const uint8_t pin);
virtual uint8_t read(); virtual uint8_t read();
}; };
#endif #endif

View File

@ -52,22 +52,21 @@ void Port_MCP23S17::begin(const uint8_t strobeOn)
transfer(deviceAddr << 1, portNum + 0x0C, pullUp); //configure GPPU transfer(deviceAddr << 1, portNum + 0x0C, pullUp); //configure GPPU
} }
/* write() sets pin output to logicLevel (useful for strobePin, one LED pin, or multiple pins). /* setLow() sets pin output LOW.
pin is bit pattern, where pin being set is 1. pin is bit pattern, where pin being set is 1.
logicLevel is HIGH or LOW.
write() does not overwrite the other pins.
*/ */
void Port_MCP23S17::write(const uint8_t pin, const bool logicLevel) void Port_MCP23S17::setLow(const uint8_t pin)
{ {
if (logicLevel == LOW) outputVal &= ~pin; //set pin output to low
{ transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal
outputVal &= ~pin; //set pin output to low }
}
else
{
outputVal |= pin; //set pin output to high
}
/* setHigh() sets pin output HIGH.
pin is bit pattern, where pin being set is 1.
*/
void Port_MCP23S17::setHigh(const uint8_t pin)
{
outputVal |= pin; //set pin output to high
transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal
} }

View File

@ -46,7 +46,8 @@ class Port_MCP23S17 : public PortInterface
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {}
void beginProtocol(); void beginProtocol();
void begin(const uint8_t strobeOn); void begin(const uint8_t strobeOn);
virtual void write(const uint8_t pin, const bool logicLevel); virtual void setLow(const uint8_t pin);
virtual void setHigh(const uint8_t pin);
virtual uint8_t read(); virtual uint8_t read();
}; };
#endif #endif

View File

@ -25,21 +25,25 @@ void Port_PCA9655E::begin(const uint8_t strobeOn)
Wire.endTransmission(); Wire.endTransmission();
} }
/* write() sets pin output to logicLevel. /* setLow() sets pin output LOW.
pin is bit pattern, where pin being strobed is 1. pin is bit pattern, where pin being set is 1.
logicLevel is HIGH or LOW.
write() does not overwrite the other pins.
*/ */
void Port_PCA9655E::write(const uint8_t pin, const bool logicLevel) void Port_PCA9655E::setLow(const uint8_t pin)
{ {
if (logicLevel == LOW) outputVal &= ~pin; //set pin output to low
{
outputVal &= ~pin; //set pin output to low Wire.beginTransmission(deviceAddr);
} Wire.write(portNum + 2); //output Byte command
else Wire.write(outputVal);
{ Wire.endTransmission();
outputVal |= pin; //set pin output to high }
}
/* setHigh() sets pin output HIGH.
pin is bit pattern, where pin being set is 1.
*/
void Port_PCA9655E::setHigh(const uint8_t pin)
{
outputVal |= pin; //set pin output to high
Wire.beginTransmission(deviceAddr); Wire.beginTransmission(deviceAddr);
Wire.write(portNum + 2); //output Byte command Wire.write(portNum + 2); //output Byte command

View File

@ -46,7 +46,8 @@ class Port_PCA9655E : public PortInterface
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {}
void beginProtocol(); void beginProtocol();
void begin(const uint8_t strobeOn); void begin(const uint8_t strobeOn);
virtual void write(const uint8_t pin, const bool logicLevel); virtual void setLow(const uint8_t pin);
virtual void setHigh(const uint8_t pin);
virtual uint8_t read(); virtual uint8_t read();
}; };
#endif #endif

View File

@ -14,16 +14,24 @@ void Port_ShiftRegs::begin()
SPI.begin(); SPI.begin();
} }
void Port_ShiftRegs::write(const uint8_t pin, const bool logicLevel) /* setLow() sets pin output LOW.
pin is bit pattern, where pin being set is 1.
*/
void Port_ShiftRegs::setLow(const uint8_t pin)
{ {
if (logicLevel == LOW) outputVal &= ~pin; //set pin output to low
{
outputVal &= ~pin; //set pin output to low digitalWrite(slaveSelect, LOW);
} SPI.transfer(outputVal);
else digitalWrite (slaveSelect, HIGH);
{ }
outputVal |= pin; //set pin output to high
} /* setHigh() sets pin output HIGH.
pin is bit pattern, where pin being set is 1.
*/
void Port_ShiftRegs::setHigh(const uint8_t pin)
{
outputVal |= pin; //set pin output to high
digitalWrite(slaveSelect, LOW); digitalWrite(slaveSelect, LOW);
SPI.transfer(outputVal); SPI.transfer(outputVal);

View File

@ -16,6 +16,7 @@ class Port_ShiftRegs : public PortWriteInterface
public: public:
Port_ShiftRegs(const uint8_t slaveSelect); Port_ShiftRegs(const uint8_t slaveSelect);
void begin(); void begin();
void write(const uint8_t pin, const bool logicLevel); void setLow(const uint8_t pin);
void setHigh(const uint8_t pin);
}; };
#endif #endif

View File

@ -26,18 +26,29 @@ read_pins_t Scanner_IOE::scan(const uint8_t strobePin)
uint8_t readState; //bits, 1 means key is pressed, 0 means released uint8_t readState; //bits, 1 means key is pressed, 0 means released
//strobe on //strobe on
refPortWrite.write(strobePin, activeState); if (activeState == LOW) //if active low
{
refPortWrite.setLow(strobePin);
}
else //if active high
{
refPortWrite.setHigh(strobePin);
}
delayMicroseconds(3); //time to stabilize voltage delayMicroseconds(3); //time to stabilize voltage
//read the port pins //read the port pins
readState = refPortRead.read(); readState = refPortRead.read();
//strobe off //strobe off
refPortWrite.write(strobePin, !activeState);
if (activeState == LOW) //if active low if (activeState == LOW) //if active low
{ {
refPortWrite.setHigh(strobePin);
readState = ~readState; readState = ~readState;
} }
else //if active high
{
refPortWrite.setLow(strobePin);
}
return readState; return readState;
} }