Grove - Chainable RGB LED

From Wiki
Jump to: navigation, search

Introduction

Chainable RGB LED is based on P9813 chip which is a full-color light source LED driver chip, and can provide constant current drive and modulated output of 256 gray. Transmission by wire (DATA and CLK), built-in recycling, can enhance the transmission distance.


300px-Chanbalelednb1.jpg


Specification

Operating Voltage: 5V Operating Current: 20mA Communication Protocol: Serial Usage

With Arduino When you get Grove - Chainble RGB LED, you may think how I can light up it. Now we will show you this demo: all colors of RGB cycles in an uniform way. The hardware installation like this: Picture To complete this demo, you can use one or more Grove - Chainable RGB LED. Note that the IN interface of one Grove - Chainable RGB LED should be connect to D7/D8 of Grove - Base Shield and its OUT interface connect to IN interface of another Grove - Chainable RGB LED, chainable more LED in this way. Jasa seo, Jasa seo jakarta Download Chainable LED Library and install it to Arduino Library. There is the course about how to install Arduino Library in wiki page. Open the example CycleThroughColors by the path:File->Examples->CnainableLED_master and upload it to Seeeduino. /*

* Example of using the ChainableRGB library for controlling a Grove RGB.
* This code cycles through all the colors in an uniform way. This is accomplished using a HSB color space. 
*/
  1. include <ChainableLED.h>
  1. define NUM_LEDS 5

ChainableLED leds(7, 8, NUM_LEDS);

void setup() { }

float hue = 0.0; boolean up = true;

void loop() {

 for (byte i=0; i<NUM_LEDS; i++)
   leds.setColorHSB(i, hue, 1.0, 0.5);
   
 delay(50);
   
 if (up)
   hue+= 0.025;
 else
   hue-= 0.025;
   
 if (hue>=1.0 && up)
   up = false;
 else if (hue<=0.0 && !up)
   up = true;

} You can observe this scene: colors of two LED will gradient consistently. Extend application: Based on Chainable LED Library, we have designed this demo: RGB color varies with the temperature measured by Grove - temperature. The RGB color vary from green to red when the temperature is from 25 to 32. The test code is shown below. Do it if you are interested in it. // demo of temperature -> rgbLED // temperature form 25 - 32, rgbLed from green -> red // Grove-temperature plu to A0 // LED plug to D7,D8

  1. include <Streaming.h>
  2. include <ChainableLED.h>
  1. define TEMPUP 32
  2. define TEMPDOWN 25

ChainableLED leds(7, 8, 1); // connect to pin7 and pin8 , one led

int getAnalog() // get value from A0 {

   int sum = 0;
   for(int i=0; i<32; i++)
   {
       sum += analogRead(A0);
   }
   
   return sum>>5;

}

float getTemp() // get temperature {

   float temperature = 0.0;
   float resistance = 0.0;
   int B = 3975; //B value of the thermistor
   
   int a = getAnalog();
   
   resistance = (float)(1023-a)*10000/a; //get the resistance of the sensor;
   temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15; //convert to temperature via datasheet ;
   return temperature;

}

void ledLight(int dta) // light led {

   dta = dta/4; // 0 - 255
   
   int colorR = dta;
   int colorG = 255-dta;
   int colorB = 0;
   leds.setColorRGB(0, colorR, colorG, colorB);

}

void setup() {

   Serial.begin(38400);
   cout << "hello world !" << endl;

}

void loop() {

   float temp = getTemp();
   int nTemp = temp*100;
   
   nTemp = nTemp > TEMPUP*100 ? TEMPUP*100 : (nTemp < TEMPDOWN*100 ? TEMPDOWN*100 : nTemp);
   nTemp = map(nTemp, TEMPDOWN*100, TEMPUP*100, 0, 1023);
   ledLight(nTemp);
   delay(100);

} With Raspberry Pi 1.You should have got a raspberry pi and a grovepi or grovepi+. 2.You should have completed configuring the development enviroment, otherwise follow here. 3.Connection Plug the sensor to grovepi socket D7 by using a grove cable. 4.Navigate to the demos' directory:

  cd yourpath/GrovePi/Software/Python/

To see the code

  nano grove_chainable_rgb_led.py   # "Ctrl+x" to exit #

import time import grovepi

  1. Connect first LED in Chainable RGB LED chain to digital port D7
  2. In: CI,DI,VCC,GND
  3. Out: CO,DO,VCC,GND

pin = 7

  1. I have 10 LEDs connected in series with the first connected to the GrovePi and the last not connected
  2. First LED input socket connected to GrovePi, output socket connected to second LED input and so on

numleds = 1

grovepi.pinMode(pin,"OUTPUT") time.sleep(1)

  1. Chainable RGB LED methods
  2. grovepi.storeColor(red, green, blue)
  3. grovepi.chainableRgbLed_init(pin, numLeds)
  4. grovepi.chainableRgbLed_test(pin, numLeds, testColor)
  5. grovepi.chainableRgbLed_pattern(pin, pattern, whichLed)
  6. grovepi.chainableRgbLed_modulo(pin, offset, divisor)
  7. grovepi.chainableRgbLed_setLevel(pin, level, reverse)
  1. test colors used in grovepi.chainableRgbLed_test()

testColorBlack = 0 # 0b000 #000000 testColorBlue = 1 # 0b001 #0000FF testColorGreen = 2 # 0b010 #00FF00 testColorCyan = 3 # 0b011 #00FFFF testColorRed = 4 # 0b100 #FF0000 testColorMagenta = 5 # 0b101 #FF00FF testColorYellow = 6 # 0b110 #FFFF00 testColorWhite = 7 # 0b111 #FFFFFF

  1. patterns used in grovepi.chainableRgbLed_pattern()

thisLedOnly = 0 allLedsExceptThis = 1 thisLedAndInwards = 2 thisLedAndOutwards = 3

try:

   print "Test 1) Initialise"
   # init chain of leds
   grovepi.chainableRgbLed_init(pin, numleds)
   time.sleep(.5)
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set led 1 to green
   grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 0)
   time.sleep(.5)
   # change color to red
   grovepi.storeColor(255,0,0)
   time.sleep(.5)
   # set led 10 to red
   grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 9)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 2a) Test Patterns - black"
   # test pattern 0 - black (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(1)


   print "Test 2b) Test Patterns - blue"
   # test pattern 1 blue
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlue)
   time.sleep(1)


   print "Test 2c) Test Patterns - green"
   # test pattern 2 green
   grovepi.chainableRgbLed_test(pin, numleds, testColorGreen)
   time.sleep(1)


   print "Test 2d) Test Patterns - cyan"
   # test pattern 3 cyan
   grovepi.chainableRgbLed_test(pin, numleds, testColorCyan)
   time.sleep(1)


   print "Test 2e) Test Patterns - red"
   # test pattern 4 red
   grovepi.chainableRgbLed_test(pin, numleds, testColorRed)
   time.sleep(1)


   print "Test 2f) Test Patterns - magenta"
   # test pattern 5 magenta
   grovepi.chainableRgbLed_test(pin, numleds, testColorMagenta)
   time.sleep(1)


   print "Test 2g) Test Patterns - yellow"
   # test pattern 6 yellow
   grovepi.chainableRgbLed_test(pin, numleds, testColorYellow)
   time.sleep(1)


   print "Test 2h) Test Patterns - white"
   # test pattern 7 white
   grovepi.chainableRgbLed_test(pin, numleds, testColorWhite)
   time.sleep(1)


   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 3a) Set using pattern - this led only"
   # change color to red
   grovepi.storeColor(255,0,0)
   time.sleep(.5)
   # set led 3 to red
   grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 2)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 3b) Set using pattern - all leds except this"
   # change color to blue
   grovepi.storeColor(0,0,255)
   time.sleep(.5)
   # set all leds except for 3 to blue
   grovepi.chainableRgbLed_pattern(pin, allLedsExceptThis, 3)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 3c) Set using pattern - this led and inwards"
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set leds 1-3 to green
   grovepi.chainableRgbLed_pattern(pin, thisLedAndInwards, 2)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 3d) Set using pattern - this led and outwards"
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set leds 7-10 to green
   grovepi.chainableRgbLed_pattern(pin, thisLedAndOutwards, 6)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 4a) Set using modulo - all leds"
   # change color to black (fully off)
   grovepi.storeColor(0,0,0)
   time.sleep(.5)
   # set all leds black
   # offset 0 means start at first led
   # divisor 1 means every led
   grovepi.chainableRgbLed_modulo(pin, 0, 1)
   time.sleep(.5)
   # change color to white (fully on)
   grovepi.storeColor(255,255,255)
   time.sleep(.5)
   # set all leds white
   grovepi.chainableRgbLed_modulo(pin, 0, 1)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 4b) Set using modulo - every 2"
   # change color to red
   grovepi.storeColor(255,0,0)
   time.sleep(.5)
   # set every 2nd led to red
   grovepi.chainableRgbLed_modulo(pin, 0, 2)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)


   print "Test 4c) Set using modulo - every 2, offset 1"
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set every 2nd led to green, offset 1
   grovepi.chainableRgbLed_modulo(pin, 1, 2)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 4d) Set using modulo - every 3, offset 0"
   # change color to red
   grovepi.storeColor(255,0,0)
   time.sleep(.5)
   # set every 3nd led to red
   grovepi.chainableRgbLed_modulo(pin, 0, 3)
   time.sleep(.5)
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set every 3nd led to green, offset 1
   grovepi.chainableRgbLed_modulo(pin, 1, 3)
   time.sleep(.5)
   # change color to blue
   grovepi.storeColor(0,0,255)
   time.sleep(.5)
   # set every 3nd led to blue, offset 2
   grovepi.chainableRgbLed_modulo(pin, 2, 3)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 4e) Set using modulo - every 3, offset 1"
   # change color to yellow
   grovepi.storeColor(255,255,0)
   time.sleep(.5)
   # set every 4nd led to yellow
   grovepi.chainableRgbLed_modulo(pin, 1, 3)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)


   print "Test 4f) Set using modulo - every 3, offset 2"
   # change color to magenta
   grovepi.storeColor(255,0,255)
   time.sleep(.5)
   # set every 4nd led to magenta
   grovepi.chainableRgbLed_modulo(pin, 2, 3)
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 5a) Set level 6"
   # change color to green
   grovepi.storeColor(0,255,0)
   time.sleep(.5)
   # set leds 1-6 to green
   grovepi.write_i2c_block(0x04,[95,pin,6,0])
   time.sleep(.5)
   # pause so you can see what happened
   time.sleep(2)
   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   time.sleep(.5)


   print "Test 5b) Set level 7 - reverse"
   # change color to red
   grovepi.storeColor(255,0,0)
   time.sleep(.5)
   # set leds 4-10 to red
   grovepi.write_i2c_block(0x04,[95,pin,7,1])
   time.sleep(.5)


except KeyboardInterrupt:

   # reset (all off)
   grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
   break

except IOError:

   print "Error"

Notice that there's something you have to concern of: pin = 7 #setting up the output pin numleds = 1 #how many leds you plug Also all methods you can see in grovepi.py is: storeColor(red, green, blue) chainableRgbLed_init(pin, numLeds) chainableRgbLed_test(pin, numLeds, testColor) chainableRgbLed_pattern(pin, pattern, whichLed) chainableRgbLed_modulo(pin, offset, divisor) chainableRgbLed_setLevel(pin, level, reverse)

5.Run the demo.

  sudo python grove_chainable_rgb_led.py

6.This demo may not work if your grovepi dosen't have the newest firmware, update the firmware. cd yourpath/GrovePi/Firmware sudo ./firmware_update.sh



File:P9813 datasheet.pdf