From facba4c02a03dc1391d05a00723615d023c64492 Mon Sep 17 00:00:00 2001 From: Gregg Date: Fri, 31 Dec 2021 14:51:42 -0600 Subject: [PATCH] Added Pixel.h and Pixel.cpp and implemented SK68XX Addressable LED Class Also add getPin() to RFControl (which is used by SK68XX Class) as well as boolean operator overrides for both RFControl and PwmPin/ServoPin so that instances can be checked for validity. --- src/extras/Pixel.cpp | 36 +++++++++++++++++++++++++++++++ src/extras/Pixel.h | 24 +++++++++++++++++++++ src/extras/PwmPin.h | 6 ++++++ src/extras/RFControl.cpp | 3 --- src/extras/RFControl.h | 10 +++++++++ src/extras/extras.ino | 46 ++++++++++++++++------------------------ 6 files changed, 94 insertions(+), 31 deletions(-) create mode 100644 src/extras/Pixel.cpp create mode 100644 src/extras/Pixel.h diff --git a/src/extras/Pixel.cpp b/src/extras/Pixel.cpp new file mode 100644 index 0000000..7c40a3d --- /dev/null +++ b/src/extras/Pixel.cpp @@ -0,0 +1,36 @@ + +#include "Pixel.h" + +/////////////////// + +sk68xx::sk68xx(int pin){ + rf=new RFControl(pin,false); + setRGB(0,0,0); +} + +/////////////////// + +void sk68xx::setRGB(uint8_t r, uint8_t g, uint8_t b){ + + if(!*rf) + return; + + rf->clear(); + loadColor(g); + loadColor(r); + loadColor(b); + rf->phase(6400,0); // add 80 usec end-marker delay + rf->start(); +} + +/////////////////// + +void sk68xx::loadColor(uint8_t c){ + + for(int i=7;i>=0;i--){ + if((c>>i)&1) + rf->add(51,45); + else + rf->add(26,70); + } +} diff --git a/src/extras/Pixel.h b/src/extras/Pixel.h new file mode 100644 index 0000000..b8ec4a3 --- /dev/null +++ b/src/extras/Pixel.h @@ -0,0 +1,24 @@ + +//////////////////////////////////// +// Addressable LED Pixel // +//////////////////////////////////// + +#pragma once + +#include "RFControl.h" + +class sk68xx { + private: + int pin=-1; + RFControl *rf; + void loadColor(uint8_t c); + + public: + sk68xx(int pin); // creates addressable SK68XX RGB LED on pin + void setRGB(uint8_t r, uint8_t g, uint8_t b); // sets color to rgb values (0-255) + int getPin(){return(rf->getPin());} // returns pin number + + operator bool(){ // override boolean operator to return true/false if creation succeeded/failed + return(*rf); + } +}; diff --git a/src/extras/PwmPin.h b/src/extras/PwmPin.h index 2057e07..50eebb8 100644 --- a/src/extras/PwmPin.h +++ b/src/extras/PwmPin.h @@ -14,6 +14,8 @@ // ///////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma once + #include #include @@ -34,6 +36,10 @@ class LedC { public: int getPin(){return(channel?channel->gpio_num:-1);} // returns the pin number + + operator bool(){ // override boolean operator to return true/false if creation succeeded/failed + return(channel); + } }; diff --git a/src/extras/RFControl.cpp b/src/extras/RFControl.cpp index ce2ce88..b87bb0b 100644 --- a/src/extras/RFControl.cpp +++ b/src/extras/RFControl.cpp @@ -1,7 +1,4 @@ -#include -#include - #include "RFControl.h" /////////////////// diff --git a/src/extras/RFControl.h b/src/extras/RFControl.h index c099935..8c17212 100644 --- a/src/extras/RFControl.h +++ b/src/extras/RFControl.h @@ -3,6 +3,10 @@ // RF Control Module // //////////////////////////////////// +#pragma once + +#include +#include #include "driver/rmt.h" #include @@ -27,6 +31,12 @@ class RFControl { void phase(uint32_t nTicks, uint8_t phase); // adds either a HIGH phase or LOW phase lasting numTicks ticks void enableCarrier(uint32_t freq, float duty=0.5); // enables carrier wave if freq>0, else disables carrier wave; duty is a fraction from 0-1 void disableCarrier(){enableCarrier(0);} // disables carrier wave + + int getPin(){return(config?config->gpio_num:-1);} // returns the pin number + + operator bool(){ // override boolean operator to return true/false if creation succeeded/failed + return(config); + } }; // Helper macro for creating your own storage of uint32_t data array elements - used with first variation of start() above diff --git a/src/extras/extras.ino b/src/extras/extras.ino index 6fcf935..7b1f674 100644 --- a/src/extras/extras.ino +++ b/src/extras/extras.ino @@ -1,14 +1,6 @@ -/* HomeSpan Remote Control Example */ +/* HomeSpan Pixel Example */ -#include "RFControl.h" // include RF Control Library - -#define PRONTO_N 0.241246 - -uint16_t pronto[]={0000,0x006D,0x0000,0x0022,0x00AC,0x00AC,0x0015,0x0040,0x0015,0x0040,0x0015,0x0040,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0040,0x0015,0x0040,0x0015,0x0040,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0040,0x0015,0x0015,0x0015,0x0015,0x0015,0x0040,0x0015,0x0040,0x0015,0x0015,0x0015,0x0015,0x0015,0x0040,0x0015,0x0015,0x0015,0x0040,0x0015,0x0040,0x0015,0x0015,0x0015,0x0015,0x0015,0x0040,0x0015,0x0040,0x0015,0x0015,0x0015,0x0689}; -//uint16_t pronto[]={0000,0x006D,0x0000,0x0022,0x00AC,0x00AC,0x0017,0x003E,0x0017,0x003E,0x0017,0x003E,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x003E,0x0017,0x003E,0x0017,0x003E,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x0013,0x0017,0x003E,0x0017,0x003E,0x0017,0x0013,0x0017,0x0013,0x0017,0x003E,0x0017,0x003E,0x0018,0x003E,0x0017,0x003E,0x0017,0x0013,0x0017,0x0013,0x0017,0x003E,0x0017,0x003E,0x0017,0x0013,0x0017,0x0746}; -//uint16_t pronto[]={0000,0x0067,0x0000,0x000d,0x0060,0x0018,0x0018,0x0018,0x0030,0x0018,0x0030,0x0018,0x0030,0x0018,0x0018,0x0018,0x0030,0x0018,0x0018,0x0018,0x0030,0x0018,0x0018,0x0018,0x0018,0x0018,0x0018,0x0018,0x0018,0x03f6}; - -uint32_t data[100]; +#include "Pixel.h" void setup() { @@ -16,29 +8,27 @@ void setup() { Serial.flush(); delay(1000); // wait for interface to flush - Serial.println("\n\nHomeSpan RF Transmitter Example\n\n"); + Serial.println("\n\nHomeSpan Pixel Example\n\n"); - RFControl rf(17); - rf.enableCarrier(38000,0.5); + sk68xx px(8); + sk68xx test7(7); + sk68xx test6(6); - uint32_t code = 0xE0E019E6; // OFF -// uint32_t code = 0xE0E09966; // ON + Serial.printf("PX on Pin=%d check: %s\n",px.getPin(),px?"OKAY":"BAD"); + Serial.printf("Test 7 on Pin=%d check: %s\n",test7.getPin(),test7?"OKAY":"BAD"); + Serial.printf("Test 6 on Pin=%d check: %s\n",test6.getPin(),test6?"OKAY":"BAD"); - int unit=563; - - rf.add(4500,4500); - - for(int i=31;i>=0;i--){ - rf.add(unit,unit*((code&(1<=0;i--){ + px.setRGB(i,0,0); + delay(2); + } } - rf.add(unit,45000); - - rf.start(2); - Serial.println("Done!"); } // end of setup()