diff --git a/all-functions/left-right-pca9554.ino b/all-functions/left-right-pca9554.ino new file mode 100644 index 0000000..b33140f --- /dev/null +++ b/all-functions/left-right-pca9554.ino @@ -0,0 +1,80 @@ +#include // Load the PCA9554 Library + +PCA9554 ioCon1(0x24); // Create an object at this address + +byte LED_STATES_LEFT_RIGHT[7] = { + 0b00000001, // power green LED + 0b00000010, // power red LED + 0b00000100, // fan green LED + 0b00001000, // fan red LED + 0b00010000, // temp green LED + 0b00100000, // temp red LED + 0b01000000 // lock button LED +}; + +void setupPCADevice() { + ioCon1.portMode(ALLOUTPUT); +} + +void resetSideBanks(byte* bank) { + *bank = 0; +} + +void updateIOLED(byte* bank) { + for (int i = 0; i < 8; ++i) { + ioCon1.digitalWrite(i, bitRead(*bank, i) == 1 ? 0 : 1); + } +} + +void writeIOLEDPoweredOff(byte* bank) { + byte mask = 0b01011110; + bitWrite(mask, bank[0], 0); + bank = mask; +} + +void setPowerGreen(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[0]; +} + +void setPowerRed(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[1]; +} + +void setPowerOff(byte* bank) { + bitWrite(*bank, 0, 0); // green LED off + bitWrite(*bank, 1, 0); // red LED off +} + +void setFanGreen(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[2]; +} + +void setFanRed(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[3]; +} + +void setFanOff(byte* bank) { + bitWrite(*bank, 2, 0); // green LED off + bitWrite(*bank, 3, 0); // red LED off +} + +void setTempGreen(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[4]; +} + +void setTempRed(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[5]; +} + +void setTempOff(byte* bank) { + bitWrite(*bank, 4, 0); // green LED off + bitWrite(*bank, 5, 0); // red LED off +} + +void setLockButton(byte* bank) { + *bank |= LED_STATES_LEFT_RIGHT[6]; +} + +void setLockButtonOff(byte* bank) { + bitWrite(*bank, 6, 0); // lock button LED off +}