#include // Inputs const int DEBOUNCE_TIME_MS = 50; const int virtual_interrupt_pins[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int virtual_interupt_state[16]; unsigned long virtual_interupt_timer[16]; // Outputs const int pwm_pins[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int pwm_states[16]; int pwm_values[16]; // Forward declaration void virtual_interrupt_loop(); void virtual_interrupt_callback(int pin, int state); void setup() { ESPMega_begin(); } void loop() { ESPMega_loop(); } void virtual_interrupt_callback(int pin, int state) { } void virtual_interrupt_loop() { for (int i = 0; i < 16; i++) { int current_pin_value = ESPMega_digitalRead(virtual_interrupt_pins[i]); if (virtual_interupt_state[i] != current_pin_value) { if (millis() - virtual_interupt_timer[i] > DEBOUNCE_TIME_MS) { virtual_interupt_state[i] = current_pin_value; virtual_interrupt_callback(i, current_pin_value); } } else { virtual_interupt_timer[i] = millis(); } yield(); } }