Advertisement
Vincent38190

LED_RGB arduino class

Nov 6th, 2016
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.53 KB | None | 0 0
  1. #ifndef LED_RVB_DEF
  2. #define LED_RVB_DEF
  3.  
  4. namespace Color
  5. {
  6.     class RGB
  7.     {
  8.     public:
  9.         RGB() : m_red{ 0 }, m_green{ 0 }, m_blue{ 0 }
  10.         {}
  11.         RGB(uint32_t const &hex)
  12.         {
  13.             byte red = (hex & 0b111111110000000000000000) >> 16;
  14.             byte green = (hex & 0b000000001111111100000000) >> 8;
  15.             byte blue = (hex & 0b000000000000000011111111);
  16.             m_blue = (byte)blue;
  17.             m_green = (byte)green;
  18.             m_red = (byte)red;
  19.         }
  20.         RGB(byte const &red, byte const &green, byte const &blue) : m_red{ red }, m_green{ green }, m_blue{ blue }
  21.         {}
  22.         RGB(RGB const &color) : m_red{ color.red() }, m_green{ color.green() }, m_blue{ color.blue() }
  23.         {}
  24.         byte red() const { return m_red; }
  25.         byte green() const { return m_green; }
  26.         byte blue() const { return m_blue; }
  27.         void setRed(byte const &red) { if (red < 256) m_red = red; }
  28.         void setGreen(byte const &green) { if (green < 256) m_green = green; }
  29.         void setBlue(byte const &blue) { if (blue < 256) m_blue = blue; }
  30.  
  31.         void setColor(RGB const &color) {
  32.             m_red = color.red();
  33.             m_green = color.green();
  34.             m_blue = color.blue();
  35.         }
  36.         RGB& operator=(const RGB &color)
  37.         {
  38.             setColor(color);
  39.         }
  40.         RGB& operator+=(const RGB &color)
  41.         {
  42.             m_red = (m_red + color.green()) % 256;
  43.             m_green = (m_green + color.green()) % 256;
  44.             m_blue = (m_blue + color.blue()) % 256;
  45.         }
  46.         RGB& operator-=(const RGB &color)
  47.         {
  48.             m_red -= color.red();
  49.             m_green -= color.green();
  50.             m_blue -= color.blue();
  51.         }
  52.         RGB& operator-()
  53.         {
  54.             m_red = -m_red;
  55.             m_green = -m_green;
  56.             m_blue = -m_blue;
  57.         }
  58.         bool operator==(const RGB &color)
  59.         {
  60.             return m_red == color.red() && m_green == color.green() && m_blue == color.blue();
  61.         }
  62.         bool operator>(const RGB &color)
  63.         {
  64.             return (m_red > color.red() && m_green > color.green()) || (m_red > color.red() && m_blue > color.blue()) || (m_blue > color.blue() && m_green > color.green());
  65.         }
  66.         bool operator!=(const RGB &color)
  67.         {
  68.             return !operator==(color);
  69.         }
  70.         bool operator<(const RGB &color)
  71.         {
  72.             return !operator>(color);
  73.         }
  74.         bool operator>=(const RGB &color)
  75.         {
  76.             return operator>(color) || operator==(color);
  77.         }
  78.         bool operator<=(const RGB &color)
  79.         {
  80.             return operator<(color) || operator==(color);
  81.         }
  82.         RGB& operator++()
  83.         {
  84.             m_red++;
  85.             m_green++;
  86.             m_blue++;
  87.         }
  88.         //OPERATOR
  89.     private:
  90.         byte m_red;
  91.         byte m_green;
  92.         byte m_blue;
  93.     };
  94.  
  95.     const RGB Red{ 0xFF0000 };
  96.     const RGB Maroon{ 0x800000 };
  97.     const RGB Orange{ 0xFF8000 };
  98.     const RGB Yellow{ 0xFFFF00 };
  99.     const RGB Lime{ 0x00FF00 };
  100.     const RGB Green{ 0x008000 };
  101.     const RGB SpringGreen{ 0x00FF7F };
  102.     const RGB DarkCyan{ 0x008B8B };
  103.     const RGB Cyan{ 0x00FFFF };
  104.     const RGB navy{ 0x0080FF };
  105.     const RGB Blue{ 0x0000FF };
  106.     const RGB Purple{ 0x800080 };
  107.     const RGB Magenta{ 0xFF00FF };
  108.     const RGB pink{ 0xFF0000 };
  109.     const RGB gray{ 0x808080 };
  110.     const RGB black{ 0x000000 };
  111.     const RGB white{ 0xFFFFFF };
  112.     const RGB Teal{ 0x008080 };
  113. };
  114.  
  115. class LED_RVB
  116. {
  117. public:
  118.     LED_RVB(int pin_R, int pin_V, int pin_B) : m_pinR{ pin_R }, m_pinV{ pin_V }, m_pinB{ pin_B }
  119.     {}
  120.     LED_RVB(int pin_R, int pin_V, int pin_B, Color::RGB const &color) : m_pinR{ pin_R }, m_pinV{ pin_V }, m_pinB{ pin_B }, m_color{ color }
  121.     {}
  122.     void setColor(Color::RGB const &color)
  123.     {
  124.         m_color = color;
  125.     }
  126.     void setBlue(byte const &Blue)
  127.     {
  128.         m_color.setBlue(Blue);
  129.     }
  130.     void setRed(byte const &Red)
  131.     {
  132.         m_color.setRed(Red);
  133.     }
  134.     void setGreen(byte const &Green)
  135.     {
  136.         m_color.setGreen(Green);
  137.     }
  138.     void setColor(byte const &Red, byte const &Green, byte const &Blue)
  139.     {
  140.         m_color = Color::RGB(Red, Green, Blue);
  141.     }
  142.     void setColor(uint32_t const &hex)
  143.     {
  144.         m_color = Color::RGB(hex);
  145.     }
  146.     void update()
  147.     {
  148.         analogWrite(m_pinR, m_color.red());
  149.         analogWrite(m_pinV, m_color.green());
  150.         analogWrite(m_pinB, m_color.blue());
  151.     }
  152.     template<typename Function>
  153.     void fade(Color::RGB const &start, Color::RGB const &end, Function func, unsigned long delay = 10)
  154.     {
  155.         unsigned long currentTime{ millis() };
  156.         Color::RGB current(start);
  157.         while (current != end)
  158.         {
  159.             if (current.blue() < end.blue())
  160.                 current.setBlue(current.blue() + 1);
  161.             if (current.green() < end.green())
  162.                 current.setGreen(current.green() + 1);
  163.             if (current.red() < end.red())
  164.                 current.setRed(current.red() + 1);
  165.             while (currentTime < currentTime + delay)
  166.             {
  167.                 func();
  168.             }
  169.             update();
  170.             currentTime = millis();
  171.         }
  172.     }
  173.     Color::RGB getColor() const { return m_color; }
  174. private:
  175.     int m_pinR;
  176.     int m_pinV;
  177.     int m_pinB;
  178.     Color::RGB m_color;
  179.     bool m_isWrite;
  180.  
  181.  
  182. };
  183.  
  184.  
  185.  
  186. #endif //LED_RVB_DEF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement