This is FlexLEDTapeLibrary
Fork of ws2801 by
Revision 8:28d3f6703e22, committed 2012-12-28
- Comitter:
- hototogisu
- Date:
- Fri Dec 28 10:27:10 2012 +0000
- Parent:
- 7:0611499dd15d
- Commit message:
- This is FlexLEDTapeLibrary
Changed in this revision
--- a/HTML_color.h Sat Jun 18 01:25:36 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -#ifndef HTML_color_H -#define HTML_color_H - -#define ALICEBLUE 0xF0F8FF -#define ANTIQUEWHITE 0xFAEBD7 -#define AQUA 0x00FFFF -#define AQUAMARINE 0x7FFFD4 -#define AZURE 0xF0FFFF -#define BEIGE 0xF5F5DC -#define BISQUE 0xFFE4C4 -#define BLACK 0x000000 -#define BLANCHEDALMOND 0xFFEBCD -#define BLUE 0x0000FF -#define BLUEVIOLET 0x8A2BE2 -#define BROWN 0xA52A2A -#define BURLYWOOD 0xDEB887 -#define CADETBLUE 0x5F9EA0 -#define CHARTREUSE 0x7FFF00 -#define CHOCOLATE 0xD2691E -#define CORAL 0xFF7F50 -#define CORNFLOWERBLUE 0x6495ED -#define CORNSILK 0xFFF8DC -#define CRIMSON 0xDC143C -#define CYAN 0x00FFFF -#define DARKBLUE 0x00008B -#define DARKCYAN 0x008B8B -#define DARKGOLDENROD 0xB8860B -#define DARKGRAY 0xA9A9A9 -#define DARKGREEN 0x006400 -#define DARKKHAKI 0xBDB76B -#define DARKMAGENTA 0x8B008B -#define DARKOLIVEGREEN 0x556B2F -#define DARKORANGE 0xFF8C00 -#define DARKORCHID 0x9932CC -#define DARKRED 0x8B0000 -#define DARKSALMON 0xE9967A -#define DARKSEAGREEN 0x8FBC8F -#define DARKSLATEBLUE 0x483D8B -#define DARKSLATEGRAY 0x2F4F4F -#define DARKTURQUOISE 0x00CED1 -#define DARKVIOLET 0x9400D3 -#define DEEPPINK 0xFF1493 -#define DEEPSKYBLUE 0x00BFFF -#define DIMGRAY 0x696969 -#define DODGERBLUE 0x1E90FF -#define FIREBRICK 0xB22222 -#define FLORALWHITE 0xFFFAF0 -#define FORESTGREEN 0x228B22 -#define FUCHSIA 0xFF00FF -#define GAINSBORO 0xDCDCDC -#define GHOSTWHITE 0xF8F8FF -#define GOLD 0xFFD700 -#define GOLDENROD 0xDAA520 -#define GRAY 0xBEBEBE -#define GREEN 0x008000 -#define GREENYELLOW 0xADFF2F -#define HONEYDEW 0xF0FFF0 -#define HOTPINK 0xFF69B4 -#define INDIANRED 0xCD5C5C -#define INDIGO 0x4B0082 -#define IVORY 0xFFFFF0 -#define KHAKI 0xF0D58C -#define LAVENDER 0xE6E6FA -#define LAVENDERBLUSH 0xFFF0F5 -#define LAWNGREEN 0x7CFC00 -#define LEMONCHIFFON 0xFFFACD -#define LIGHTBLUE 0xADD8E6 -#define LIGHTCORAL 0xF08080 -#define LIGHTCYAN 0xE0FFFF -#define LIGHTGOLDENRODYELLOW 0xFAFAD2 -#define LIGHTGREEN 0x90EE90 -#define LIGHTGREY 0xD3D3D3 -#define LIGHTPINK 0xFFB6C1 -#define LIGHTSALMON 0xFFA07A -#define LIGHTSEAGREEN 0x20B2AA -#define LIGHTSKYBLUE 0x87CEFA -#define LIGHTSLATEGRAY 0x778899 -#define LIGHTSTEELBLUE 0xB0C4DE -#define LIGHTYELLOW 0xFFFFE0 -#define LIME 0x00FF00 -#define LIMEGREEN 0x32CD32 -#define LINEN 0xFAF0E6 -#define MAGENTA 0xFF00FF -#define MAROON 0x800000 -#define MEDIUMAQUAMARINE 0x66CDAA -#define MEDIUMBLUE 0x0000CD -#define MEDIUMORCHID 0xBA55D3 -#define MEDIUMPURPLE 0x9370DB -#define MEDIUMSEAGREEN 0x3CB371 -#define MEDIUMSLATEBLUE 0x7B68EE -#define MEDIUMSPRINGGREEN 0x00FA9A -#define MEDIUMTURQUOISE 0x48D1CC -#define MEDIUMVIOLETRED 0xC71585 -#define MIDNIGHTBLUE 0x191970 -#define MINTCREAM 0xF5FFFA -#define MISTYROSE 0xFFE4E1 -#define MOCCASIN 0xFFE4B5 -#define NAVAJOWHITE 0xFFDEAD -#define NAVY 0x000080 -#define OLDLACE 0xFDF5E6 -#define OLIVE 0x808000 -#define OLIVEDRAB 0x6B8E23 -#define ORANGE 0xFFA500 -#define ORANGERED 0xFF4500 -#define ORCHID 0xDA70D6 -#define PALEGOLDENROD 0xEEE8AA -#define PALEGREEN 0x98FB98 -#define PALETURQUOISE 0xAFEEEE -#define PALEVIOLET xDB7093 -#define PAPAYAWHIP 0xFFEFD5 -#define PEACHPUFF 0xFFDAB9 -#define PERU 0xCD853F -#define PINK 0xFFC0CB -#define PLUM 0xDDA0DD -#define POWDERBLUE 0xB0E0E6 -#define PURPLE 0x800080 -#define RED 0xFF0000 -#define ROSYBROWN 0xBC8F8F -#define ROYALBLUE 0x4169E1 -#define SADDLEBROWN 0x8B4513 -#define SALMON 0xFA8072 -#define SANDYBROWN 0xF4A460 -#define SEAGREEN 0x2E8B57 -#define SEASHELL 0xFFF5EE -#define SIENNA 0xA0522D -#define SILVER 0xC0C0C0 -#define SKYBLUE 0x87CEEB -#define SLATEBLUE 0x6A5ACD -#define SLATEGRAY 0x708090 -#define SNOW 0xFFFAFA -#define SPRINGGREEN 0x00FF7F -#define STEELBLUE 0x4682B4 -#define TAN 0xD2B48C -#define TEAL 0x008080 -#define THISTLE 0xD8BFD8 -#define TOMATO 0xFF6347 -#define TURQUOISE 0x40E0D0 -#define VIOLET 0xEE82EE -#define WHEAT 0xF5DEB3 -#define WHITE 0xFFFFFF -#define WHITESMOKE 0xF5F5F5 -#define YELLOW 0xFFFF00 -#define YELLOWGREEN 0x9ACD32 - -#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/a101.cpp Fri Dec 28 10:27:10 2012 +0000
@@ -0,0 +1,71 @@
+#include "a101.h"
+#include "mbed.h"
+
+int padding;
+
+a101::a101(PinName CKI, PinName SDI, int ledLength, int tapeLength) : _CKI(CKI), _SDI(SDI), _ledLength(ledLength), _tapeLength(tapeLength) {
+ clear();
+}
+
+void a101::post(int *strip_colors) {
+ for (int i = 0; i < 32; i++) {
+ padding0();
+ }
+
+ wait_us(RESET_DERAY);
+
+ for (int tapeNum = 0; tapeNum < _tapeLength; tapeNum++) {
+ for(int ledNum = 0; ledNum < _ledLength; ledNum++) {
+ operate();
+ for (int color = 0; color <= 2; color++) {
+ int color_level = (strip_colors[tapeNum*24+ledNum] & (0xff << (8*color))) >> (8*color);
+ for (int color_bit = 7; color_bit >= 0; color_bit--) {
+ if (color_level & (1 << color_bit)) padding1();
+ else padding0();
+ }
+ }
+ }
+ }
+ for (padding = 0; padding < 12*_ledLength*_tapeLength; padding++) {
+ padding1();
+ }
+}
+
+void a101::padding1() {
+ _CKI = 0;
+ _SDI = 1;
+ _CKI = 1;
+}
+
+void a101::padding0() {
+ _CKI = 0;
+ _SDI = 0;
+ _CKI = 1;
+}
+
+void a101::operate() {
+ for (int i = 0; i < 8; i++) {
+ padding1();
+ }
+}
+
+void a101::clear() {
+ for (int i = 0; i < 32; i++) {
+ padding0();
+ }
+
+ wait_us(RESET_DERAY);
+
+ for (int tape = 0; tape < _tapeLength; tape++) {
+ for (int led = 0; led < _ledLength; led++) {
+ operate();
+ for (int bit = 0; bit < 24; bit++) {
+ padding0();
+ }
+ }
+ }
+ for (padding = 0; padding < 12*_ledLength*_tapeLength; padding++) {
+ padding1();
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/a101.h Fri Dec 28 10:27:10 2012 +0000
@@ -0,0 +1,28 @@
+#ifndef A101_H
+#define A101_H
+
+#define RESET_DERAY 2500
+
+#include "mbed.h"
+
+class a101 {
+
+private:
+ DigitalOut _CKI;
+ DigitalOut _SDI;
+ int _ledLength;
+ int _tapeLength;
+
+public:
+ a101(PinName CKI, PinName SDI, int ledLength = 24, int tapeLength = 1);
+ void post(int *strip_colors);
+
+private:
+ void padding1();
+ void padding0();
+ void operate();
+ void clear();
+};
+
+#endif
+
--- a/ws2801.cpp Sat Jun 18 01:25:36 2011 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-#include "ws2801.h"
-#include "mbed.h"
-
-
-//------------------------------------------------------------------------------------------------------------
-ws2801::ws2801(PinName CKI, PinName SDI, int STRIP_LENGTH, int reset_delay) : _CKI(CKI), _SDI(SDI), _STRIP_LENGTH(STRIP_LENGTH), _reset_delay(reset_delay)
-{
-_level=100;
-//ws2801.clear();
-for(int bits = 0; bits <= _STRIP_LENGTH*24; bits++)
- {
- _CKI = 0;
- _SDI = 0;
- _CKI = 1;
- }
-_CKI = 0;
-wait_us(_reset_delay);
-}
-//------------------------------------------------------------------------------------------------------------
-void ws2801::post(int *strip_colors)
-{
-
-int strip_colors_leveled[_STRIP_LENGTH];
-uint32_t mask;
-
-for(int LED_number = 0 ; LED_number < _STRIP_LENGTH ; LED_number++)
- {
- if(_level != 100)
- {
- int R = ((strip_colors[LED_number] & 0x00ff0000) >> 16)*_level/100;
- int G = ((strip_colors[LED_number] & 0x0000ff00) >> 8)*_level/100;
- int B = (strip_colors[LED_number] & 0x000000ff)*_level/100;
- strip_colors_leveled[LED_number] = (R << 16)|(G << 8)|B;
- }
- else strip_colors_leveled[LED_number] = strip_colors[LED_number];
- int this_led_color = strip_colors_leveled[LED_number]; //24 bits of color data
- for(char color_bit = 23 ; color_bit != 255 ; color_bit--)
- {
- _CKI = 0;
- mask = 1 << color_bit;
- if(this_led_color & mask)_SDI = 1;
- else _SDI = 0;
- _CKI = 1; //Data is latched when clock goes high
- }
- }
-_CKI = 0;
-wait_us(_reset_delay); //Wait for 1ms to go into reset
-}
-//------------------------------------------------------------------------------------------------------------
-void ws2801::clear(void)
-{
-for(int bits = 0; bits <= _STRIP_LENGTH*24; bits++)
- {
- _CKI = 0;
- _SDI = 0;
- _CKI = 1;
- }
-_CKI = 0;
-wait_us(_reset_delay);
-}
-//------------------------------------------------------------------------------------------------------------
-int ws2801::level(int level)
-{
-if((level <= 100) && level)
- {
- _level = level;
- return _level;
- }
-return 0;
-}
-
-//------------------------------------------------------------------------------------------------------------
-int ws2801::delay(uint32_t reset_delay)
-{
-if(reset_delay <= 0xffffffff)_reset_delay = reset_delay;
-return _reset_delay;
-}
-//---------EOF---------------EOF------------------------------------------------------------------------------
\ No newline at end of file
--- a/ws2801.h Sat Jun 18 01:25:36 2011 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
- /*
-Copyright (c) 2011 Thomas Olsson.
-
-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.
-*/
-
-#ifndef WS2801_H
-#define WS2801_H
-
-#include "mbed.h"
-#include "HTML_color.h"
-
-
-/** WS2801 class, controlling LED strips or arrays like this http://www.sparkfun.com/products/10312
-*
-* the WS2801 IC's are 5V but works well connected directly to mbed IO pins.
-*
-* You need a 5V power supply capable of about 2A to light up a 32 led strip, do NOT power from mbed(usb).
-*
-* the required reset delay is a blocking wait(), it can be lowered (or set to 0) if you want to use the
-* time for executing code instead, data sheet says 500us but i found it need at least 800us.
-*
-* Example:
-* @code
-#include "mbed.h"
-#include "ws2801.h"
-
-#define STRIP_LENGTH 32
-
-ws2801 mystrip(p9, p10, STRIP_LENGTH);
-
-int dir=1, level=10;
-int rainbow[] = {0xff00ff,0xff00cc,0xff0099,0xff0066,0xff0033,0xff0000,0xff3300,0xff6600,
- 0xff9900,0xffcc00,0xffff00,0xccff00,0x99ff00,0x66ff00,0x33ff00,0x00ff00,
- 0x00ff33,0x00ff66,0x00ff99,0x00ffcc,0x00ffff,0x00ccff,0x0099ff,0x0066ff,
- 0x0033ff,0x0000ff,0x3300ff,0x6600ff,0x9900ff,0xcc00ff,0x9900ff,0x6600ff
- };
-
-void move(void){
- int temp = rainbow[31];
- for (int x = (STRIP_LENGTH - 1) ; x > 0 ; x--) rainbow[x] = rainbow[x - 1];
- rainbow[0] = temp;
-}
-
-void pulse(void){
- if(dir)
- {
- mystrip.level(level+=2);
- if(level >= 100)dir = 0;
- }
- else if(!dir)
- {
- mystrip.level(level--);
- if(level <= 5)dir = 1;
- }
-}
-
-int main() {
- mystrip.level(level);
- while(1)
- {
- move();
- pulse();
- mystrip.post(rainbow);
- wait_ms(100);
- }
-}
-* @endcode
- */
-class ws2801
-{
-public:
- /** Create a new ws2801 object
- *
- *
- * @param CKI clock pin
- * @param SDI data pin
- * @param STRIP_LENGTH number of ws2801 IC's i strip or array defaults to 32
- * @param reset_delay delay in us to allow latching data defaults to 800
- * @returns nothing
- */
- ws2801(PinName CKI, PinName SDI, int STRIP_LENGTH = 32, int reset_delay = 800);
- /** write RGB color data to strip or array
- *
- * color data for each LED is 3 bytes int the order of rrggbb.
- * array must have STRIP_LENGTH number of elements
- *
- * @param strip_colors array of color data
- */
- void post(int *strip_colors);
- /** clears the array or strip (all off)
- */
- void clear(void);
- /** set level of the entire array 0-100%
- *
- * at low levels the colors may change because R,G or B
- * reaches 0.
- *
- * @param level level in percent
- * @returns current level
- */
- int level(int level=0);
- /** get/set reset/write delay
- *
- * mainly for experimenting with reset values without recompiling,
- * leave at default to begin with & then lower to get faster execution.
- *
- * @param delay delay in us
- * @returns delay in us
- */
- int delay(uint32_t reset_delay=800);
-
-private:
- DigitalOut _CKI;
- DigitalOut _SDI;
- int _STRIP_LENGTH;
- int _level;
- int _reset_delay;
-};
-
-#endif
\ No newline at end of file
