Reconsidered input pin and NC pin for SPI. Modified several functions interface and its contents.
Dependents: WS2812_out_of_specification_demo
Diff: WS2812.h
- Revision:
- 6:583738208b96
- Parent:
- 5:a07522fe36d4
--- a/WS2812.h Mon Aug 18 13:25:57 2014 +0000 +++ b/WS2812.h Fri Mar 20 06:46:11 2020 +0000 @@ -1,19 +1,61 @@ /* Copyright (c) 2012 cstyles, MIT License * - * 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: + * 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 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. + * 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. + */ + +/* + Modified by Kenji Arai / JH1PJL + March 20th, 2020 + + Original & Refrence + https://os.mbed.com/users/chris/code/ChrisRGB-Ring/ + https://os.mbed.com/users/chris/code/WS2812/ + https://os.mbed.com/users/chris/code/PixelArray/ + + https://os.mbed.com/users/bridadan/code/WS2812_Example/ + https://os.mbed.com/users/bridadan/code/WS2812/ + https://os.mbed.com/users/chris/code/PixelArray/ + + */ + +/* + !!!!! This library does NOT follow specification value of the timing !!!! + https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf + http://akizukidenshi.com/download/ds/adafruit/WS2812B.pdf + + WS2812 -> Interpretation of control timing (Not Grantee but works) + Specification + T0H 200 to 500ns + T1H 550 to 850ns + T0L 650 to 950ns + T1L 450 to 750ns + Reset 50us + Interpretation + T0H same as above + T1H same as above + T0L less than 10us + T1L Less than 10us + Reset over 50uS + + Please refer following web page + https://wp.josh.com/2014/05/13/ + ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/ */ #ifndef WS2812_H @@ -21,11 +63,29 @@ #include "mbed.h" -#define WS1 0x38 -#define WS0 0x30 -#define SPICLK 5000000 -#define SPIBPF 6 - +#if \ + defined(TARGET_NUCLEO_F042K6)\ + || defined(TARGET_NUCLEO_F334R8)\ + || defined(TARGET_NUCLEO_F401RE)\ + || defined(TARGET_NUCLEO_F411RE)\ + || defined(TARGET_NUCLEO_F446RE)\ + || defined(TARGET_NUCLEO_L053R8)\ + || defined(TARGET_NUCLEO_L073RZ)\ + || defined(TARGET_NUCLEO_L152RE)\ + || defined(TARGET_NUCLEO_L476RG) +# define WS1 0x0f +# define WS0 0x0c +# define SPICLK 8000000 +# define SPIBPF 4 +#elif \ + defined(TARGET_RZ_A1H)\ + || defined(TARGET_GR_LYCHEE)\ + || defined(TARGET_GR_MANGO) +# define WS1 0x0f +# define WS0 0x0c +# define SPICLK 5000000 +# define SPIBPF 8 +#endif //!Library for the WS2812 RGB LED with integrated controller /*! @@ -34,38 +94,35 @@ class WS2812 { public: + enum BrightnessControl {OFF, GLOBAL, PER_PIXEL}; + //!Creates an instance of the class. /*! - Connect WS2812 address addr using SPI MOSI pins + Connect WS2812 using SPI MOSI pin(Only use) and MISO&SCLK(NC) */ - WS2812(PinName d, int size); + WS2812(PinName mosi, PinName miso, PinName sclk, int size); /*! Destroys instance. */ ~WS2812(); - //!Reads the current temperature. - /*! - Reads the temperature register of the LM75B and converts it to a useable value. - */ - void write (int buf[]); - void write_offsets (int buf[],int r_offset=0, int g_offset=0, int b_offset=0); - void setAll(int colour); + void write(int buf[]); + void write_offsets(int buf[], int r_offset = 0, + int g_offset = 0, int b_offset = 0); + void setAll(int color); - void useII(int d); - void setII(unsigned char II); - - + void set_brightness_mode(BrightnessControl mode); + void set_brightness(unsigned char br); private: + SPI __spi; + + void __write (int color); int __size; - unsigned char __II; - int __use_II; - SPI __spi; - void __write (int color); - + unsigned char __br; + BrightnessControl __mode; };