22
33class Button :
44
5- def __init__ (self , pin ):
5+ def __init__ (self , pin_id ):
66 from machine import Pin
7- self .pin = Pin (pin , Pin .IN )
8-
9- def get_presses (self , delay = 1 ):
10- last_time , last_state , presses = time (), 0 , 0
11- while time () < last_time + delay :
12- sleep_ms (50 )
13- if last_state == 0 and self .pin .value () == 1 :
14- last_state = 1
15- if last_state == 1 and self .pin .value () == 0 :
16- last_state , presses = 0 , presses + 1
17- return presses
7+ self .pin = Pin (pin_id , Pin .IN )
8+ self .irq = self .pin .irq (trigger = Pin .IRQ_RISING , handler = self .__irq_sc )
9+ self .presses = 0
10+
11+ def __irq_sc (self , p ):
12+ # print(self, p)
13+ self .presses += 1
14+
15+ def close (self ):
16+ self .irq .trigger (0 )
17+
18+ def reset (self ):
19+ self .presses = 0
20+
21+ def get_presses (self ):
22+ return self .presses
1823
1924 def is_pressed (self ):
2025 return self .pin .value () == 0
2126
22- def was_pressed (self , delay = 1 ):
23- last_time , last_state = time (), self .pin .value ()
24- while time () < last_time + delay :
25- sleep_ms (50 )
26- if last_state != self .pin .value ():
27- return True
28- return False
27+ def was_pressed (self ):
28+ return self .presses != 0
2929
3030def unit_test ():
3131 print ('The unit test code is as follows' )
@@ -36,11 +36,15 @@ def unit_test():
3636 print(\' button_a is_pressed \' , button_a.is_pressed())\n \
3737 print(\' button_a get_presses \' , button_a.get_presses())\n \
3838 ' )
39- button_a = Button (35 )
40- while True :
41- print ('button_a was_pressed ' , button_a .was_pressed ())
42- print ('button_a is_pressed ' , button_a .is_pressed ())
43- print ('button_a get_presses ' , button_a .get_presses ())
39+ try :
40+ button_a = Button (35 )
41+ while True :
42+ sleep_ms (100 )
43+ print ('button_a was_pressed ' , button_a .was_pressed ())
44+ print ('button_a is_pressed ' , button_a .is_pressed ())
45+ print ('button_a get_presses ' , button_a .get_presses ())
46+ finally :
47+ button_a .close ()
4448
4549if __name__ == '__main__' :
4650 unit_test ()
0 commit comments