| 
									
										
										
										
											2018-07-07 11:26:58 +02:00
										 |  |  | #include <Arduino.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct Button { | 
					
						
							|  |  |  |     const uint8_t PIN; | 
					
						
							|  |  |  |     uint32_t numberKeyPresses; | 
					
						
							|  |  |  |     bool pressed; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Button button1 = {23, 0, false}; | 
					
						
							|  |  |  | Button button2 = {18, 0, false}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-05 14:23:58 +03:00
										 |  |  | void ARDUINO_ISR_ATTR isr(void* arg) { | 
					
						
							| 
									
										
										
										
											2018-07-07 11:26:58 +02:00
										 |  |  |     Button* s = static_cast<Button*>(arg); | 
					
						
							|  |  |  |     s->numberKeyPresses += 1; | 
					
						
							|  |  |  |     s->pressed = true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-05 14:23:58 +03:00
										 |  |  | void ARDUINO_ISR_ATTR isr() { | 
					
						
							| 
									
										
										
										
											2018-07-07 11:26:58 +02:00
										 |  |  |     button2.numberKeyPresses += 1; | 
					
						
							|  |  |  |     button2.pressed = true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void setup() { | 
					
						
							|  |  |  |     Serial.begin(115200); | 
					
						
							|  |  |  |     pinMode(button1.PIN, INPUT_PULLUP); | 
					
						
							|  |  |  |     attachInterruptArg(button1.PIN, isr, &button1, FALLING); | 
					
						
							|  |  |  |     pinMode(button2.PIN, INPUT_PULLUP); | 
					
						
							|  |  |  |     attachInterrupt(button2.PIN, isr, FALLING); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop() { | 
					
						
							|  |  |  |     if (button1.pressed) { | 
					
						
							|  |  |  |         Serial.printf("Button 1 has been pressed %u times\n", button1.numberKeyPresses); | 
					
						
							|  |  |  |         button1.pressed = false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (button2.pressed) { | 
					
						
							|  |  |  |         Serial.printf("Button 2 has been pressed %u times\n", button2.numberKeyPresses); | 
					
						
							|  |  |  |         button2.pressed = false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     static uint32_t lastMillis = 0; | 
					
						
							|  |  |  |     if (millis() - lastMillis > 10000) { | 
					
						
							|  |  |  |       lastMillis = millis(); | 
					
						
							|  |  |  |       detachInterrupt(button1.PIN); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |