Jeigu pažiūretume į Arduino.h karkaso vidurius pamatytume, jog kiekviena kartą kvieciant funkciją digitalRead – kviečiamos 3 funkcijos. Tai galima optimizuot jas iškėlus i klasės konstruktorių. Pavizdys žemiau:
class GPIO {
private:
uint8_t timer;
uint8_t bit;
uint8_t port;
uint8_t pin;
uint8_t reg;
public:
GPIO(uint8_t _pin, uint8_t dir) {
pin = _pin;
pinMode(pin, dir);
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
}
bool read() {
if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}
};
Klasė naudojama šitaip:
// globalus kintamasis pin13 rodantis į pin 13 mode INPUT_PULLUP
GPIO pin13(13, INPUT_PULLUP);
ir galiausiai void loop:
Serial.println(pin13.read());