PROGRAM AlarmSample VAR i2c_fd : DINT := -1; count : DINT := 0; inputs : ARRAY[0..7] OF BOOL; outputs : ARRAY[0..7] OF BOOL; alarm_activated : BOOL := TRUE; activation_trigger : R_TRIG; END_VAR IF i2c_fd < 1 THEN i2c_fd := I2C_open(bus_id := 1); ELSIF i2c_fd >= 0 THEN inputs := I2C_PCF8574_read(fd := i2c_fd, address := 16#38); activation_trigger(CLK := inputs[7]); IF activation_trigger.Q THEN alarm_activated := NOT alarm_activated; outputs[0] := FALSE; END_IF; IF alarm_activated THEN FOR count := 0 TO 6 BY 1 DO IF NOT inputs[count] THEN outputs[0] := TRUE; EXIT; END_IF; END_FOR; END_IF; I2C_PCF8574_write(fd := i2c_fd, address := 16#20, pin_values := outputs); END_IF; END_PROGRAM