class PinListener
{
private:
    void (*_reference)(int, int);
    int _milliseconds;
    int _signal;
    int _pin;

public:
    void listen()
    {
        int signal = digitalRead(_pin);
        
        if (signal == _signal)
        {
            return;
        }
        
        int local_millis = millis();
        int elapsed_time = local_millis - _milliseconds;
        
        _reference(signal, elapsed_time);
        _milliseconds = local_millis;
        _signal = signal;
    }
    
    PinListener(int pin, void (*reference)(int, int))
    {
        pinMode(pin, INPUT);
        
        _reference = reference;
        _pin = pin;
    }
};

void pin_handler(int signal, int milliseconds)
{
}

PinListener pin_listener(11, pin_handler);

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: