annotate rgbled/Adafruit_NeoPixel/Adafruit_NeoPixel.h @ 2424:4b8f8fabeb2f

vscode settings
author drewp@bigasterisk.com
date Thu, 23 May 2024 16:40:28 -0700
parents ef4ae15f2661
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1231
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
1 /*--------------------------------------------------------------------
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2 This file is part of the Adafruit NeoPixel library.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 NeoPixel is free software: you can redistribute it and/or modify
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5 it under the terms of the GNU Lesser General Public License as
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6 published by the Free Software Foundation, either version 3 of
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
7 the License, or (at your option) any later version.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9 NeoPixel is distributed in the hope that it will be useful,
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 GNU Lesser General Public License for more details.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
13
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
14 You should have received a copy of the GNU Lesser General Public
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
15 License along with NeoPixel. If not, see
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
16 <http://www.gnu.org/licenses/>.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
17 --------------------------------------------------------------------*/
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
18
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
19 #ifndef ADAFRUIT_NEOPIXEL_H
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
20 #define ADAFRUIT_NEOPIXEL_H
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 #if (ARDUINO >= 100)
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
23 #include <Arduino.h>
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
24 #else
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
25 #include <WProgram.h>
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26 #include <pins_arduino.h>
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
27 #endif
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
28
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
29 // 'type' flags for LED pixels (third parameter to constructor):
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
30 #define NEO_RGB 0x00 // Wired for RGB data order
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
31 #define NEO_GRB 0x01 // Wired for GRB data order
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
32 #define NEO_BRG 0x04
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
33
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
34 #define NEO_COLMASK 0x01
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
35 #define NEO_KHZ800 0x02 // 800 KHz datastream
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
36 #define NEO_SPDMASK 0x02
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
37 // Trinket flash space is tight, v1 NeoPixels aren't handled by default.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
38 // Remove the ifndef/endif to add support -- but code will be bigger.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
39 // Conversely, can comment out the #defines to save space on other MCUs.
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
40 #ifndef __AVR_ATtiny85__
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
41 #define NEO_KHZ400 0x00 // 400 KHz datastream
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
42 #endif
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
43
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
44 class Adafruit_NeoPixel {
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
45
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
46 public:
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
47
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
48 // Constructor: number of LEDs, pin number, LED type
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
49 Adafruit_NeoPixel(uint16_t n, uint8_t p=6, uint8_t t=NEO_GRB + NEO_KHZ800);
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
50 ~Adafruit_NeoPixel();
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
51
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
52 void
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53 begin(void),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
54 show(void),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55 setPin(uint8_t p),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
56 setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
57 setPixelColor(uint16_t n, uint32_t c),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
58 setBrightness(uint8_t),
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 clear();
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
60 uint8_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61 *getPixels(void) const,
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
62 getBrightness(void) const;
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63 uint16_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
64 numPixels(void) const;
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
65 static uint32_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66 Color(uint8_t r, uint8_t g, uint8_t b);
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
67 uint32_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
68 getPixelColor(uint16_t n) const;
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
69 inline bool
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
70 canShow(void) { return (micros() - endTime) >= 50L; }
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
71
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
72 private:
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
73
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
74 const uint16_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
75 numLEDs, // Number of RGB LEDs in strip
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
76 numBytes; // Size of 'pixels' buffer below
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
77 uint8_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
78 pin, // Output pin number
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
79 brightness,
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
80 *pixels, // Holds LED color values (3 bytes each)
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
81 rOffset, // Index of red byte within each 3-byte pixel
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
82 gOffset, // Index of green byte
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
83 bOffset; // Index of blue byte
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
84 const uint8_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
85 type; // Pixel flags (400 vs 800 KHz, RGB vs GRB color)
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
86 uint32_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
87 endTime; // Latch timing reference
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
88 #ifdef __AVR__
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
89 const volatile uint8_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
90 *port; // Output PORT register
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
91 uint8_t
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
92 pinMask; // Output PORT bitmask
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
93 #endif
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
94
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
95 };
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
96
ef4ae15f2661 copy in rgb led program for arduino
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
97 #endif // ADAFRUIT_NEOPIXEL_H