mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-30 21:51:40 +01:00 
			
		
		
		
	
		
			
	
	
		
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
|   | #include <Arduino.h>
 | ||
|  | 
 | ||
|  | struct Button { | ||
|  |     const uint8_t PIN; | ||
|  |     uint32_t numberKeyPresses; | ||
|  |     bool pressed; | ||
|  | }; | ||
|  | 
 | ||
|  | Button button1 = {23, 0, false}; | ||
|  | Button button2 = {18, 0, false}; | ||
|  | 
 | ||
|  | void IRAM_ATTR isr(void* arg) { | ||
|  |     Button* s = static_cast<Button*>(arg); | ||
|  |     s->numberKeyPresses += 1; | ||
|  |     s->pressed = true; | ||
|  | } | ||
|  | 
 | ||
|  | void IRAM_ATTR isr() { | ||
|  |     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); | ||
|  |     } | ||
|  | } |