From 8ed02d8cb2d0bd71d3aac44ca6b1efec385534dc Mon Sep 17 00:00:00 2001 From: root Date: Sat, 4 Feb 2017 22:15:11 +0100 Subject: [PATCH] initial commit --- chch-power.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 chch-power.py diff --git a/chch-power.py b/chch-power.py new file mode 100644 index 0000000..654aa01 --- /dev/null +++ b/chch-power.py @@ -0,0 +1,70 @@ +import pifacedigitalio +import time + +button_count = 8 +longpress_delay = 0.4 +verylongpress_delay = 2 +shortpress_count_max_delay = 0.5 +inter_press_max_delay = 1 +pin_last_rise_date = [0]*button_count +pin_last_shortpress = [0]*button_count +pin_shortpress_count = [0]*button_count +pifacedigital = pifacedigitalio.PiFaceDigital() + +def switch_pressed(event): + pin_last_rise_date[event.pin_num] = 0 + time.sleep(0.02) + if pifacedigitalio.digital_read(event.pin_num) != 0: + pin_last_rise_date[event.pin_num] = time.time() + +def switch_unpressed(event): + if pin_last_rise_date[event.pin_num] != 0: + press_time = time.time() - pin_last_rise_date[event.pin_num] + if press_time < longpress_delay: + switch_shortpressed(event) + elif longpress_delay <= press_time and press_time < verylongpress_delay: + switch_longpressed(event) + else: + switch_verylongpressed(event) + pin_last_rise_date[event.pin_num] = 0 + +def switch_longpressed(event): + shortpress_delay = pin_last_rise_date[event.pin_num] - pin_last_shortpress[event.pin_num] + if shortpress_delay > inter_press_max_delay: + pin_shortpress_count[event.pin_num] = 0 + elif pin_shortpress_count[event.pin_num] == 1: + event.chip.output_pins[event.pin_num].toggle() + elif pin_shortpress_count[event.pin_num] == 2: + for i in range(button_count): + event.chip.output_pins[i].turn_on() + +def switch_verylongpressed(event): + shortpress_delay = pin_last_rise_date[event.pin_num] - pin_last_shortpress[event.pin_num] + if shortpress_delay > inter_press_max_delay: + pin_shortpress_count[event.pin_num] = 0 + for i in range(button_count): + event.chip.output_pins[i].turn_off() + elif pin_shortpress_count[event.pin_num] == 1: + for i in range(button_count): + event.chip.output_pins[i].turn_on() + +def switch_shortpressed(event): + now = time.time() + if pin_shortpress_count[event.pin_num] == 0: + pin_last_shortpress[event.pin_num] = now + shortpress_delay = now - pin_last_shortpress[event.pin_num] + print(shortpress_delay) + if shortpress_delay > shortpress_count_max_delay: + pin_shortpress_count[event.pin_num] = 1 + else: + pin_shortpress_count[event.pin_num] += 1 + pin_last_shortpress[event.pin_num] = now + print(["count:", pin_shortpress_count[event.pin_num]]) + +if __name__ == "__main__": + pifacedigitalio.init() + listener = pifacedigitalio.InputEventListener(chip=pifacedigital) + for i in range(button_count): + listener.register(i, pifacedigitalio.IODIR_ON, switch_pressed) + listener.register(i, pifacedigitalio.IODIR_OFF, switch_unpressed) + listener.activate()