From 5d3a4bfc38c487091b90a4556141a33079e9a949 Mon Sep 17 00:00:00 2001 From: Gregg Date: Sat, 1 Jan 2022 08:14:32 -0600 Subject: [PATCH] Added simple Pixel example to Other Examples --- Other Examples/Pixel/Pixel.ino | 97 ++++++++++++++++++++++++++++++++++ src/extras/Pixel.cpp | 2 +- 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 Other Examples/Pixel/Pixel.ino diff --git a/Other Examples/Pixel/Pixel.ino b/Other Examples/Pixel/Pixel.ino new file mode 100644 index 0000000..bdc9a1e --- /dev/null +++ b/Other Examples/Pixel/Pixel.ino @@ -0,0 +1,97 @@ +/********************************************************************************* + * MIT License + * + * Copyright (c) 2022 Gregg E. Berman + * + * https://github.com/HomeSpan/HomeSpan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + ********************************************************************************/ + + // HomeSpan Addressable RGB LED Example + +// Demonstrates use of HomeSpan Pixel Class that provides for control of single-wire +// addressable RGB LEDs, such as the SK68xx or WS28xx models found in many devices, +// including the Espressif ESP32, ESP32-S2, and ESP32-C3 development boards. + +#include "HomeSpan.h" +#include "extras/Pixel.h" // include the HomeSpan Pixel class + +/////////////////////////////// + +struct Pixel_Light : Service::LightBulb { // Addressable RGB Pixel + + Characteristic::On power{0,true}; + Characteristic::Hue H{0,true}; + Characteristic::Saturation S{0,true}; + Characteristic::Brightness V{100,true}; + Pixel *pixel; + + Pixel_Light(int pin) : Service::LightBulb(){ + + V.setRange(5,100,1); // sets the range of the Brightness to be from a min of 5%, to a max of 100%, in steps of 1% + pixel=new Pixel(pin); // creates pixel LED on specified pin using default timing parameters suitable for most SK68xx LEDs + update(); // manually call update() to set pixel with restored initial values + } + + boolean update() override { + + int p=power.getNewVal(); + + float h=H.getNewVal(); // range = [0,360] + float s=S.getNewVal(); // range = [0,100] + float v=V.getNewVal(); // range = [0,100] + + pixel->setHSV(h*p, s*p/100.0, v*p/100.0); // must scale down S and V from [0,100] to [0.0,1.0] + + return(true); + } +}; + +/////////////////////////////// + +void setup() { + + Serial.begin(115200); + + homeSpan.begin(Category::Lighting,"RGB Pixel"); + + new SpanAccessory(); + new Service::AccessoryInformation(); + new Characteristic::Name("RGB Pixel"); + new Characteristic::Manufacturer("HomeSpan"); + new Characteristic::SerialNumber("123-ABC"); + new Characteristic::Model("SK68 LED"); + new Characteristic::FirmwareRevision("1.0"); + new Characteristic::Identify(); + + new Service::HAPProtocolInformation(); + new Characteristic::Version("1.1.0"); + + new Pixel_Light(8); // create Pixel LED attached to pin 8 + + +} + +/////////////////////////////// + +void loop() { + homeSpan.poll(); +} diff --git a/src/extras/Pixel.cpp b/src/extras/Pixel.cpp index 1d4c634..8feb825 100644 --- a/src/extras/Pixel.cpp +++ b/src/extras/Pixel.cpp @@ -12,7 +12,7 @@ Pixel::Pixel(int pin, float high0, float low0, float high1, float low1, float lo LR=lowReset*80; rf=new RFControl(pin,false); // set clock to 1/80 usec - setRGB(0,255,0); + setRGB(0,0,0); } ///////////////////