jsmirnio

Arduino Driver RadioShack RGB LEDs 276-0339 & 0249

Jul 1st, 2015
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*  HAPPY FOURTH OF JULY TO ALL ARDUINOS !!! */
  2. /*
  3. RadioShack RGB Color LED strip light show.
  4. This is the default code from RS - with some annotations to help explain
  5. what is happening PLUS several NEW Patterns for July 4th 2015
  6. */
  7.  
  8. // For the older 271-0249 COLORS ARE SENT AS HEX BYTES: Green - Blue - Red
  9. // For the newer 271-0339 COLORS ARE SENT AS HEX BYTES: Red - Blue - Green
  10.  
  11. #include <avr/pgmspace.h>
  12.  
  13. /*
  14. #define DATA_1 (PORTD |= (1<<5)) // Set logic high Pin5 of Port D
  15. #define DATA_0 (PORTD &= ~(1<<5)) // Set Pin5 logic low Pin5 of Port D
  16. #define STRIP_PINOUT DDRD |= (1<<5) // Set Pin5 of PortD as digital output
  17. #define LED_RGB_STRIP
  18. */
  19.  
  20. #define DATA_1 (PORTC |=  0X01)    // DEFINE a value for DATA as 1  // for UNO
  21. #define DATA_0 (PORTC &=  0XFE)    // DEFINE a value for DATA 0   // for UNO
  22. #define STRIP_PINOUT (DDRC=0x3F)  // DEFINE PORTC as OUTPUT // for UNO (change pins 0-5; leave PORTC 6 & 7 alone)
  23.  
  24. /*
  25. Create an array of values to control each LED NODE in the standard RadioShack strip RS 276-0249.
  26.  
  27. NOTE: The newer RS 276-0339 use a different order for the colors!
  28.  
  29. For the 271-0339 COLORS ARE SENT AS HEX BYTES: Red - Blue - Green
  30. For the 271-0249 COLORS ARE SENT AS HEX BYTES: Green - Blue - Red
  31.  
  32. PROGMEM stores the data in the AVR chip's PROGRAM memory.  This has much more space than the 2K of variable RAM memory.
  33. The two dimensional array has one value for each one of the 10 TM1803 RGB LEDs - controlling the color.
  34. Each "row" can change the colors assigned.  This is like a FRAME in an animation.  Changing the FRAME's
  35. values can create the animation effect of motion.
  36.  
  37. We will then read out these values one FRAME (row) at a time to create the 24bit serial pulse train that is OUTPUT to the LED Strip.
  38.  
  39. Each ROW is sent as OUTPUT and it will SET the COLOR for each of the TEN (10) nodes.
  40. Each ROW is a NEW FRAME, changing the colors again and again, creating a pattern.
  41.  
  42. The order of the HEX doublets (bytes) controlling the COLORS for the RS 276-0249 is: Green - Blue - Red.
  43. ff is full brightness - so 0xff0000 is full GREEN, 0xx00ff00 is full BLUE, 0x0000ff is full RED
  44.  
  45. NOTE: The newer RS 276-0339 use a different order for these colors!
  46. */
  47.  
  48. /*
  49. ##  FILL PROGRAM MEMORY with PATTERN ARRAY FOR LATER READOUT  ##
  50. PROGMEM const unsigned long array_name[rows][cols] = {
  51. }
  52. */
  53. // In the Radio Shack 276-0249 RGB Strip, the TM1803 controls RED with the last HEX byte
  54.  
  55. PROGMEM const unsigned long pattern_test_red[10][10] = {
  56.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  57.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  58.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  59.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  60.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  61.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  62.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  63.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  64.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  65.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  66. };
  67.  
  68. /* ********************************************************************************
  69. CREATE RED, WHITE, AND BLUE PATTERNS
  70. The order of the HEX doublets (bytes) controlling the COLORS is: GREEN - BLUE - RED.
  71. *********************************************************************************** */
  72.  
  73. PROGMEM const unsigned long first_red[10][10] = {
  74.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  75.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  76.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  77.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  78.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  79.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  80.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  81.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  82.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  83.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  84. };
  85.  
  86. PROGMEM const unsigned long second_red[10][10] = {
  87.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  88.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  89.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  90.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  91.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  92.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x0000f0},
  93.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x0000f0},
  94.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x0000f0},
  95.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  96.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  97. };
  98.  
  99. PROGMEM const unsigned long first_white[10][10] = {
  100.   {0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  101.   {0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  102.   {0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  103.   {0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  104.   {0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  105.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x0000f0, 0x0000f0},
  106.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x0000f0, 0x0000f0},
  107.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  108.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  109.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  110. };
  111.  
  112. PROGMEM const unsigned long second_white[10][10] = {
  113.   {0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  114.   {0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  115.   {0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  116.   {0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  117.   {0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  118.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0x000000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  119.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  120.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  121.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  122.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  123. };
  124.  
  125. PROGMEM const unsigned long first_blue[20][10] = {
  126.   {0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  127.   {0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  128.   {0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  129.   {0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  130.   {0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  131.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  132.   {0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  133.   {0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  134.   {0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  135.   {0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  136.  
  137.   {0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  138.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  139.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  140.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  141.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  142.   {0x0000f0, 0x000000, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  143.   {0x000000, 0x0000f0, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  144.   {0x000000, 0x000000, 0x0000f0, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  145.   {0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  146. };
  147.  
  148. PROGMEM const unsigned long second_blue[10][10] = {
  149.   {0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  150.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  151.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  152.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  153.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  154.   {0x0000f0, 0x000000, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  155.   {0x000000, 0x0000f0, 0x000000, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  156.   {0x000000, 0x000000, 0x0000f0, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  157.   {0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0, 0x00f000, 0x00f000, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0x0000f0},
  158. };
  159.  
  160. PROGMEM const unsigned long final_blue[5][10] = {
  161.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  162.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  163.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  164.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  165.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  166.   };
  167.  
  168. PROGMEM const unsigned long red_white_blue[1][10] = {
  169.   {0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x00f000, 0xd0d0d0, 0x0000f0, 0x0000f0},
  170. };
  171.  
  172.  
  173. PROGMEM const unsigned long static_red_white_blue[5][10] = {
  174.   {0x0000f0, 0x0000f0, 0xfdfdfd, 0xfdfdfd, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0xfdfdfd, 0xd0d0d0, 0x000000},
  175.   {0x0000f0, 0x0000f0, 0xfdfdfd, 0xfdfdfd, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0xfdfdfd, 0xd0d0d0, 0x000000},
  176.   {0x0000f0, 0x0000f0, 0xfdfdfd, 0xfdfdfd, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0xfdfdfd, 0xd0d0d0, 0x000000},
  177.   {0x0000f0, 0x0000f0, 0xfdfdfd, 0xfdfdfd, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0xfdfdfd, 0xd0d0d0, 0x000000},
  178.   {0x0000f0, 0x0000f0, 0xfdfdfd, 0xfdfdfd, 0xd0d0d0, 0xd0d0d0, 0x0000f0, 0xfdfdfd, 0xd0d0d0, 0x000000},
  179. };
  180.  
  181. /* CREATE RED, WHITE, AND BLUE PATTERNS */
  182.  
  183.  
  184. // WHITE is ALL HEX bytes (can vary the "color" of white by changing these
  185. PROGMEM const unsigned long pattern_test_white[10][10] = {
  186.   {0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  187.   {0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  188.   {0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  189.   {0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  190.   {0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  191.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000},
  192.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000, 0x000000},
  193.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000, 0x000000},
  194.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x000000},
  195.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd},
  196. };
  197.  
  198. // BLUE is the second HEX byte
  199. PROGMEM const unsigned long pattern_test_blue[10][10] = {
  200.   {0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  201.   {0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  202.   {0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  203.   {0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  204.   {0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  205.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000, 0x000000},
  206.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000, 0x000000},
  207.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000, 0x000000},
  208.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000, 0x000000},
  209.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00f000},
  210. };
  211.  
  212. // GREEN is the first HEX byte
  213. PROGMEM const unsigned long pattern_test_green[10][10] = {
  214.   {0xf00000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  215.   {0x000000, 0xf00000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  216.   {0x000000, 0x000000, 0xf00000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  217.   {0x000000, 0x000000, 0x000000, 0xf00000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  218.   {0x000000, 0x000000, 0x000000, 0x000000, 0xf00000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  219.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xf00000, 0x000000, 0x000000, 0x000000, 0x000000},
  220.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xf00000, 0x000000, 0x000000, 0x000000},
  221.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xf00000, 0x000000, 0x000000},
  222.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xf00000, 0x000000},
  223.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xf00000},
  224. };
  225.  
  226. // Each ROW changes which LED is bright, creating a moving pattern
  227. PROGMEM const unsigned long pattern_test_comet1[][10] = {
  228.   {0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  229.   {0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  230.   {0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  231.   {0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  232.   {0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  233.   {0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000},
  234.   {0x000000, 0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000},
  235.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000},
  236.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000},
  237.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd},
  238. };
  239.  
  240. PROGMEM const unsigned long pattern_test_comet2[][10] = {
  241.   {0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000},
  242.   {0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000},
  243.   {0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000},
  244.   {0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000},
  245.   {0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd},
  246.   {0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000},
  247.   {0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000},
  248.   {0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000},
  249.   {0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000},
  250.   {0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd},
  251. };
  252.  
  253. PROGMEM const unsigned long pattern_test_comet3[][10] = {
  254.   {0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd},
  255.   {0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x444444},
  256.   {0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x444444, 0x111111},
  257.   {0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0xfdfdfd, 0x444444, 0x111111, 0x000000},
  258.   {0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0xfdfdfd, 0x444444, 0x111111, 0x000000, 0x000000},
  259.   {0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0xfdfdfd, 0x444444, 0x111111, 0x000000, 0x000000},
  260.   {0x000000, 0x000000, 0x000000, 0xfdfdfd, 0x444444, 0x444444, 0xfdfdfd, 0x000000, 0x000000, 0x000000},
  261.   {0x000000, 0x000000, 0xfdfdfd, 0x444444, 0x111111, 0x111111, 0x444444, 0xfdfdfd, 0x000000, 0x000000},
  262.   {0x000000, 0xfdfdfd, 0x444444, 0x111111, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd, 0x000000},
  263.   {0xfdfdfd, 0x444444, 0x111111, 0x000000, 0x000000, 0x000000, 0x000000, 0x111111, 0x444444, 0xfdfdfd},
  264. };
  265.  
  266. //  Each row changes the color and intensity of the LEDs
  267. PROGMEM const unsigned long pattern_test_rainbow[10][10] = {
  268.   {0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000, 0x000000, 0x000000},
  269.   {0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000, 0x000000},
  270.   {0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000},
  271.   {0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd},
  272.   {0x8f00fd, 0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd},
  273.   {0x6f00fd, 0x8f00fd, 0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd},
  274.   {0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00, 0x00fd00},
  275.   {0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00, 0xfdfd00},
  276.   {0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x000000, 0x000000, 0x000000, 0xfd0000, 0xfd7f00},
  277.   {0xfd7f00, 0xfdfd00, 0x00fd00, 0x0000fd, 0x6f00fd, 0x8f00fd, 0x0000fd, 0x00fd00, 0xfdfd00, 0xfdfd00},
  278. };
  279.  
  280. PROGMEM const unsigned long cylon_test_red[10][10] = {
  281.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  282.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  283.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  284.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  285.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  286.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  287.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  288.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  289.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  290.   {0x000000, 0x000000, 0x000000, 0x000000, 0xf0f0f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  291. };
  292.  
  293. PROGMEM const unsigned long red_cylon_R[][10] = {
  294.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  295.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  296.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  297.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  298.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  299.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  300.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  301.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  302.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  303.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  304. };
  305.  
  306. PROGMEM const unsigned long red_cylon_L[][10] = {
  307.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  308.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  309.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  310.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  311.   {0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  312.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  313.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  314.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  315.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  316.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000},
  317. };
  318.  
  319. PROGMEM const unsigned long star_trek_bridge[10][10] = {
  320.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  321.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  322.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  323.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  324.   {0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0xf000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  325.   {0x000000, 0x000000, 0x000000, 0x000000, 0xf000f0, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000},
  326.   {0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000},
  327.   {0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000, 0x000000},
  328.   {0x000000, 0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0, 0x000000},
  329.   {0x0000f0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000f0},
  330. };
  331. // ***********************************************************************************************************
  332. // *
  333. // *                            INITIALIZE the system on Power Up or after a RESET
  334. // *
  335. // *
  336. // ***********************************************************************************************************
  337. void setup() {
  338.  
  339.   STRIP_PINOUT; // sets the output pin to control the LED Strip
  340.   reset_strip();    // resets each of the LED nodes to OFF
  341.  
  342. }
  343.  
  344.  
  345. // ***********************************************************************************************************
  346. // *
  347. // *                            Main Program Loop
  348. // *
  349. // *
  350. // ***********************************************************************************************************
  351. void loop()
  352. {
  353.  
  354.   /*
  355.   This is a TEST PATTERN to show that all of the
  356.   segments ("nodes") are working properly.
  357.   This Runs Only ONCE ... because the next loop
  358.   never finishes.
  359.  
  360.   You could remove the WHILE loop and then these patterns
  361.   would run continuously, as long as there is power to the board.
  362.   */
  363.   int q = 1;
  364.  
  365.   /*  TEST WHITE  */
  366.   send_1M_pattern(pattern_test_white, 10, 500);
  367.   delay(500);
  368.  
  369.   /*  TEST INDIVIDUAL COLORS  */
  370.   send_1M_pattern(pattern_test_green, 10, 200);
  371.   delay(500);
  372.   send_1M_pattern(pattern_test_blue, 10, 200);
  373.   delay(500);
  374.   send_1M_pattern(pattern_test_red, 10, 200);
  375.   delay(500);
  376.  
  377.   /* RAINBOW TEST PATTERN */
  378.   send_1M_pattern(pattern_test_rainbow, 10, 100);
  379.   delay(1000); // Wait for one second to make you think about the infinite loop
  380.  
  381.   /* RED-WHITE-BLUE STATIE */
  382.   q = 10;
  383.   while (q > 0) {
  384.     send_1M_pattern(red_white_blue, 1, 500);
  385.     q -= 1;
  386.   }
  387.   delay(500); // Wait for 1/2 second to make you think about the infinite loop
  388.  
  389.   /* COMET PATTERNS  */
  390.   send_1M_pattern(pattern_test_comet1, 10, 70);
  391.   delay(500);
  392.   send_1M_pattern(pattern_test_comet2, 10, 70);
  393.   delay(500);
  394.   send_1M_pattern(pattern_test_comet3, 10, 70);
  395.   delay(500);
  396.  
  397.  
  398.  
  399.   /* TEN CYCLES OF TREK BRIDGE */
  400.   q = 10;
  401.   while (q > 0) {
  402.     send_1M_pattern(star_trek_bridge, 10, 50);
  403.     q -= 1;
  404.   }
  405.   delay(500);
  406.  
  407.   /*
  408.   Use this to control which pattern is sent to the
  409.   LED Strip.
  410.  
  411.   This loop runs will run continuously inside the "master" loop;
  412.   because the value of WHILE (1) never changes.
  413.   */
  414.   while (1)
  415.   {
  416.     send_1M_pattern(pattern_test_white, 10, 100);
  417.     delay(500);
  418.     send_1M_pattern(pattern_test_rainbow, 10, 100);
  419.     delay(500);
  420.     send_1M_pattern(pattern_test_green, 10, 50);
  421.     delay(1000); // Wait for one second to make you think about the infinite loop
  422.  
  423.     /* RAINBOW TEST PATTERN */
  424.     send_1M_pattern(pattern_test_rainbow, 10, 100);
  425.     delay(1000); // Wait for one second to make you think about the infinite loop
  426.  
  427.     /* RED-WHITE-BLUE PATTERN */
  428.     send_1M_pattern(red_white_blue, 1, 2000); // 2 second frame rate
  429.     delay(1000); // Wait for one second to make you think about the infinite loop
  430.  
  431.     /* 10 CYCLES OF RED-WHITE-BLUE BUILD UP */
  432.     q = 10;
  433.     while (q > 0) {
  434.       send_1M_pattern(first_red, 10, 100);
  435.       delay(500);
  436.       send_1M_pattern(second_red, 10, 100);
  437.       delay(500);
  438.       send_1M_pattern(first_white, 10, 100);
  439.       delay(500);
  440.       send_1M_pattern(second_white, 10, 100);
  441.       delay(500);
  442.       send_1M_pattern(first_blue, 20, 100);
  443.       delay(500);
  444.       send_1M_pattern(final_blue, 5, 100);
  445.       delay(500);
  446.       send_1M_pattern(static_red_white_blue, 5, 100);
  447.       delay(500);
  448.  
  449.       //    send_1M_pattern(second_blue, 10, 100);
  450.       delay(500);
  451.       q -= 1;
  452.     }
  453.     delay(500);
  454.  
  455.     /* TEN CYCLES OF CYLON */
  456.     q = 10;
  457.     while (q > 0) {
  458.       send_1M_pattern(cylon_test_red, 10, 100);
  459.       delay(500);
  460.       send_1M_pattern(red_cylon_R, 10, 70);
  461.       send_1M_pattern(red_cylon_L, 10, 70);
  462.       q -= 1;
  463.     }
  464.     delay(500);
  465.  
  466.  
  467.     /* 5 CYCLES OF SIMPLE RED-WHITE-BLUE */
  468.     q = 5;
  469.     while (q > 0) {
  470.       send_1M_pattern(pattern_test_red, 10, 100);
  471.       delay(500);
  472.       send_1M_pattern(pattern_test_white, 10, 100);
  473.       delay(500);
  474.       send_1M_pattern(pattern_test_blue, 10, 100);
  475.       delay(500);
  476.       q -= 1;
  477.     }
  478.     delay(500);
  479.  
  480.     /* FIVE CYCLES OF TREK BRIDGE */
  481.     q = 5;
  482.     while (q > 0) {
  483.       send_1M_pattern(star_trek_bridge, 10, 60);
  484.       q -= 1;
  485.     }
  486.     delay(500);
  487.  
  488.  
  489.   } // END OF WHILE (1)
  490. } // END OF VOID LOOP() - otherwise known as MAIN();
  491.  
  492. /*******************************************************************************
  493. * Function Name:    send_1M_pattern
  494. * Description:      Read RAM and Transmit Pattern to whole 1 meter strip*
  495. * Input (3 variables):  Pointer to RAM pattern; pattern length; frame rate*
  496.                         // Pattern_Name, Pattern_length, Pattern_rate
  497. * Output:       Sends out a serial pulse train using the send_strip function
  498. * Return:       None
  499. *******************************************************************************/
  500. void send_1M_pattern(const unsigned long data[][10], int pattern_length, int frame_rate)
  501. {
  502.   int i = 0;
  503.   int j = 0;
  504.   uint32_t temp_data;
  505.  
  506.   // Each pattern sends out [x] data packets - one for each NODE (RGB LED cluster)
  507.   // pattern_length is the [y] dimension of the array - the number of ROWS in each pattern array
  508.   for (i = 0; i < pattern_length; i++)
  509.   {
  510.     noInterrupts(); // Turn OFF Interupts for more precise Pulse Timing
  511.     for (j = 0; j < 10; j++)
  512.     {
  513.       temp_data = pgm_read_dword_near(&data[i][j]);
  514.       send_strip(temp_data);
  515.     }
  516.     interrupts(); // Turn ON Interrupts after data is sent
  517.  
  518.     delay(frame_rate); // Delay between each pulse train - sets the duration of each Frame, before the next signal is sent;
  519.     /* CONTROLS THE VISUAL SPEED OF THE DISPLAY CHANGES */
  520.  
  521.   }
  522.  
  523.  
  524. }
  525.  
  526.  
  527. /*******************************************************************************
  528. * Function Name:    send_strip
  529. * Description:      Creates and Transmits a serial train of 24 pulses for the LED strip
  530. * Input:        24-bit data sets intensity of each color, which will persist until
  531. *           the next cycle makes a change
  532. * Output:       Sends a train of 24 pulses (bits) representing values of 0 or 1 to the output pin ()
  533. * Return:       Nothing returned from function
  534. *******************************************************************************/
  535. void send_strip(uint32_t data)
  536. {
  537.   int i;
  538.   unsigned long j = 0x800000;
  539.  
  540.  
  541.   for (i = 0; i < 24; i++)
  542.   {
  543.     if (data & j)
  544.     {
  545.       DATA_1; // SEND TM1803 a HIGH BIT;
  546.       __asm__("nop\n\t");
  547.       __asm__("nop\n\t");
  548.       __asm__("nop\n\t");
  549.       __asm__("nop\n\t");
  550.       __asm__("nop\n\t");
  551.       __asm__("nop\n\t");
  552.       __asm__("nop\n\t");
  553.       __asm__("nop\n\t");
  554.       __asm__("nop\n\t");
  555.       __asm__("nop\n\t");
  556.       __asm__("nop\n\t");
  557.       __asm__("nop\n\t");
  558.       __asm__("nop\n\t");
  559.       __asm__("nop\n\t");
  560.       __asm__("nop\n\t");
  561.       __asm__("nop\n\t");
  562.       __asm__("nop\n\t");
  563.       __asm__("nop\n\t");
  564.  
  565.       /*----------------------------*/
  566.       __asm__("nop\n\t");
  567.       __asm__("nop\n\t");
  568.       __asm__("nop\n\t");
  569.       __asm__("nop\n\t");
  570.       __asm__("nop\n\t");
  571.       __asm__("nop\n\t");
  572.       __asm__("nop\n\t");
  573.       __asm__("nop\n\t");
  574.       __asm__("nop\n\t");
  575.       __asm__("nop\n\t");
  576.       /*----------------------------*/
  577.       DATA_0;
  578.     }
  579.     else
  580.     { // SEND TM1803 a LOW BIT;
  581.       DATA_1;
  582.       __asm__("nop\n\t");
  583.       __asm__("nop\n\t");
  584.       __asm__("nop\n\t");
  585.       __asm__("nop\n\t");
  586.       __asm__("nop\n\t");
  587.       __asm__("nop\n\t");
  588.       __asm__("nop\n\t");
  589.       __asm__("nop\n\t");
  590.       __asm__("nop\n\t");
  591.       DATA_0;
  592.       /*----------------------------*/
  593.       __asm__("nop\n\t");
  594.       __asm__("nop\n\t");
  595.       __asm__("nop\n\t");
  596.       /*----------------------------*/
  597.     }
  598.  
  599.     j >>= 1;
  600.   }
  601.  
  602.  
  603. }
  604.  
  605. /*******************************************************************************
  606. * Function Name:    reset_strip
  607. * Description:      Send a 0 pulse to reset all colors on all NODES of the strip*
  608. * Input:        None*
  609. * Output:       Sends out a looong value of 0 on the output pin to RESET
  610. * Return:       None
  611. *******************************************************************************/
  612. void reset_strip()
  613. {
  614.   DATA_0;
  615.   delayMicroseconds(20);
  616. }
Add Comment
Please, Sign In to add comment