struct LED : Service::LightBulb { // First we create a derived class from the HomeSpan LightBulb Service int ledPin; // this variable stores the pin number defined for this LED SpanCharacteristic *power; // here we create a generic pointer to a SpanCharacteristic named "power" that we will use below // Next we define the constructor for DEV_LED. Note that it takes one argument, ledPin, // which specifies the pin to which the LED is attached. LED(int ledPin) : Service::LightBulb(){ power=new Characteristic::On(); // this is where we create the On Characterstic we had previously defined in setup(). Save this in the pointer created above, for use below this->ledPin=ledPin; // don't forget to store ledPin... pinMode(ledPin,OUTPUT); // ...and set the mode for ledPin to be an OUTPUT (standard Arduino function) } // end constructor // Finally, we over-ride the default update() method with instructions that actually turn on/off the LED. Note update() returns type boolean boolean update(){ digitalWrite(ledPin,power->getNewVal()); // use a standard Arduino function to turn on/off ledPin based on the return of a call to power->getNewVal() (see below for more info) return(true); // return true to indicate the update was successful (otherwise create code to return false if some reason you could not turn on the LED) } // update };