package SBC; import lombok.Getter; @SuppressWarnings("unused") public class PCF8574 extends I2C_Device{ private byte data = 0x00; private final @Getter String[] pinNames = new String[8]; /** * Create new PCF8574 * @param bus_number I2C Bus Number * @param address PCF8574 Address */ public PCF8574(int bus_number, int address){ super(bus_number, address); for(int i=0; i<8; i++){ pinNames[i] = i+""; } } /** * Set new Pin Name * @param pin pin number, 0-7 * @param name new name */ public void setPinName(int pin, String name){ if (pin<0 || pin>7) return; pinNames[pin] = name; } /** * Get Pin Name * @param pin pin number, 0-7 * @return pin name, or null if not available */ public String getPinName(int pin){ if (pin<0 || pin>7) return null; return pinNames[pin]; } /** * Set All Pins High * @return true if successful */ public boolean AllOn(){ if (super.isOpened()){ if (super.WriteBytes(new byte[]{(byte)0xFF})>0){ data = (byte)0xFF; return true; } } return false; } /** * Set all Pins Low * @return true if successful */ public boolean AllOff(){ if (super.isOpened()){ if (super.WriteBytes(new byte[]{(byte)0x00})>0){ data = (byte)0x00; return true; } } return false; } /** * Set Pin by Pin Name * @param pinName pin name * @return true if successful */ public boolean SetPin(String pinName){ for(int i=0; i<8; i++){ if (pinNames[i].equals(pinName)){ return SetPin(i); } } return false; } /** * Set Pin High * @param pin pin number 0-7 * @return true if successful */ public boolean SetPin(int pin){ if (pin<0 || pin>7) return false; if (super.isOpened()){ byte temp = (byte) (data | (1<0; } return false; } /** * Clear Pin by Pin Name * @param pinName pin name * @return true if successful */ public boolean ClearPin(String pinName){ for(int i=0; i<8; i++){ if (pinNames[i].equals(pinName)){ return ClearPin(i); } } return false; } /** * Set Pin Low * @param pin pin number 0-7 * @return true if successful */ public boolean ClearPin(int pin){ if (pin<0 || pin>7) return false; if (super.isOpened()){ byte temp = (byte) (data & ~(1<0; } return false; } /** * Read Pin by Pin Name * @param pinName pin name * @return 1 if high, 0 if low, -1 if error */ public int ReadPin(String pinName){ for(int i=0; i<8; i++){ if (pinNames[i].equals(pinName)){ return ReadPin(i); } } return -1; } /** * Read Pin * @param pin pin to read, 0 - 7 * @return 1 if high, 0 if low, -1 if error */ public int ReadPin(int pin){ if (pin<0 || pin>7) return -1; if (super.isOpened()){ byte[] buffer = super.ReadBytes(1); byte masker = (byte) (1< 0 ? 1 : 0; } return -1; } }