Example of a custom class for any RGB LED - not just the on-board LED.

Dependencies:   mbed

main.cpp

Committer:
bjo3rn
Date:
2015-09-23
Revision:
0:0ca7f9aff195

File content as of revision 0:0ca7f9aff195:

#include "mbed.h"

/********************
 * Interactive Device Design Custom Class Demonstration
 * V2 - Improved version without re-creating PwmOut objects at every call
 * bjoern@eecs.berkeley.edu, 9/23/2015
 ********************/


class RGBLed {
public:
    
    // constructor - same name as class - this one takes pin names
    RGBLed (PinName redPN, PinName greenPN, PinName bluePN) {
        //create new PwmOut objects
        redPin = new PwmOut(redPN);
        greenPin = new PwmOut (greenPN);
        bluePin = new PwmOut (bluePN);
    }
     
    // set red, green, blue values of on-board LED
    // r,g,b range from 0.0(off) to 1.0(full on)
    void setColor(float r, float g, float b){    
        redPin->write(1.0-r); //invert: PWM 0=on, 1.0=off        
        greenPin->write(1.0-g);
        bluePin->write(1.0-b);
    }
private:
    RGBLed() {} // cannot use this from the outside because it is private 

    PwmOut* redPin;   // we don't know which pins these will be connected to yet,
    PwmOut* bluePin;  // so only create pointers and allocate the objects later
    PwmOut* greenPin; // inside the constructor
};

    
RGBLed myLed(LED_RED,LED_GREEN,LED_BLUE); //declare a variable of our new class type and pass in pin names

int main() {
    while(1) {
        myLed.setColor(0.0, 0.0, 1.0); //call the member function setColor() - this is blue
        wait(0.2);
        myLed.setColor(1.0, 1.0, 1.0); //this is white
        wait(0.2);
    }
}