/SmartPin

Experimenting with the idea of an object-oriented pin class that uses operator overloading to intuitively abbreviate the usage of digitalRead(...), digitalWrite(...), analogRead(...) and analogWrite(...)

Primary LanguageC++MIT LicenseMIT

Arduino CI Arduino-lint code size: GitHub release License: MIT Stars Forks

Arduino SmartPin Library

Example

/*
 * SmartPin.ino
 * 
 * Experimenting with the idea of an object-oriented pin class
 * that uses operator overloading to intuitively abbreviate the 
 * usage of digitalRead(...), digitalWrite(...), analogRead(...)
 * and analogWrite(...)
 * 
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 * example 1
 * 
 *    SmartPin button(2, INPUT_PULLUP);
 *    SmartPin led(3, OUTPUT);
 * 
 *    void loop() {
 *        led = !button;
 *        ...
 *    }
 * 
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 * 
 * example 2
 * 
 *    SmartPin potentiometer(A0, INPUT, analogWrite, analogRead);
 *    SmartPin led(3, OUTPUT, analogWrite);
 * 
 *    void loop() {
 *        led = potentiometer / 4;
 *        ...
 *    }
 * 
 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 * 
 */
#include <SmartPin.h>

enum MagicNumbers {
    // project-specific pin usage; Change as needed
    BUTTON_PIN =  2,        // a digital input pin wth a push button
    POT_PIN    = A0,        // an analog input pin with a potentiometer
    LED1_PIN   =  3,        // a digital output pin to follow the button
    LED2_PIN   =  5,        // a pwm output pin to follow the potentiometer value

};  // enum MagicNumbers

// a push button that drives an LED
SmartPin  button_pin(BUTTON_PIN, INPUT_PULLUP);
SmartPin  led1_pin(LED1_PIN, OUTPUT);

// a potentiometer that drives the PWM brightness of an LED
SmartPin  pot_pin(POT_PIN, INPUT, analogWrite, analogRead);
SmartPin  led2_pin(LED2_PIN, OUTPUT, analogWrite);

void setup()
{
    // example LED fade in/out using simple integer assignment
    for (int i=0; i < 4; i++) {
        for (int pwm=0; pwm < 256; pwm += 4) {
            led2_pin = pwm;
            delay(4);
        }
        for (int pwm=255; pwm >= 0; pwm -= 4) {
            led2_pin = pwm;
            delay(4);
        }
    }
}

void loop()
{
    // using the pins is ridiculously easy 😎:
    led1_pin = !button_pin;   // we invert the HIGH/LOW value since the button is active-low
    led2_pin = pot_pin / 4;   // set the led brightness relative to the potentiometer value
}