edit

# Grove - LED Bar

Grove – LED Bar is comprised of a 10 segment LED gauge bar and an MY9221 LED controlling chip. It can be used as an indicator for remaining battery life, voltage, water level, music volume or other values that require a gradient display. There are 10 LED bars in the LED bar graph: one red, one yellow, one light green, and seven green bars. Demo code is available to get you up and running quickly. It lights up the LEDs sequentially from red to green, so the entire bar graph is lit up in the end. Want to go further? Go ahead and code your own effect.

## Version¶

Product Version Changes Released Date
Grove – LED Bar V1 Initial June 2014
Grove – LED Bar V2 Improved the power supply Oct 2015

## Features¶

• Input Voltage: 3.3V/5V
• Each LED segment can be controlled individually via code
• Intuitive display
• Flexible power option, supports 3-5.5DC
• Available demo code
• Suli-compatible Library

Tip

## Specification¶

Parameter Value/Range
Operating voltage 3.⅗V
Operation Temperature -20℃ to +80℃
Peak Emission Wavelength-RED(Current 20mA) 630-637nm
Peak Emission Wavelength-Yellow Green(Current 20mA ) 570-573nm
Peak Emission Wavelength-Yellow(Current 20mA ) 585-592nm
Luminous Intensity Per Segment-RED(Current 20mA ) 50-70mcd
Luminous Intensity Per Segment-Yellow Green(Current 20mA ) 28-35mcd
Luminous Intensity Per Segment-Yellow(Current 20mA ) 45-60mcd
LED segment 10
Size 40mm * 20mm

## Platforms Supported¶

Arduino Raspberry Pi BeagleBone Wio LinkIt ONE

Caution

The platforms mentioned above as supported is/are an indication of the module's software or theoritical compatibility. We only provide software library or code examples for Arduino platform in most cases. It is not possible to provide software library / demo code for all possible MCU platforms. Hence, users have to write their own software library.

## Getting Started¶

Note

If this is the first time you work with Arduino, we firmly recommend you to see Getting Started with Arduino before the start.

### Play With Arduino¶

Hardware

• Step 1. Prepare the below stuffs:
Seeeduino V4.2 Base Shield Grove-LED Bar
Get One Now Get One Now Get One Now
• Step 2. Connect Grove-LED Bar to port D8 of Grove-Base Shield.
• Step 3. Plug Grove - Base Shield into Seeeduino.
• Step 4. Connect Seeeduino to PC via a USB cable.

Note

If we don't have Grove Base Shield, We also can directly connect Grove-LED Bar to Seeeduino as below.

Seeeduino Grove-LED Bar
5V Red
GND Black
D9 White
D8 Yellow

Software

• Step 1. Download the Grove - LED Bar Library from Github

• Step 2. Refer How to install library to install library for Arduino.

• Step 3. Restart the Arduino IDE. Open “Level” example via the path : File → Examples → Grove LED Bar → Level.

The result should be like:

### Play With Raspberry Pi¶

Hardware

• Step 1. Prepare the below stuffs:
Raspberry pi GrovePi_Plus Grove-LED Bar
Get One Now Get One Now Get One Now
• Step 2. Plug the GrovePi_Plus into Raspberry.

• Step 3. Connect Grove-LED Bar to D5 port of GrovePi_Plus.

• Step 4. Connect the Raspberry to PC through USB cable.

Software

Tip

In this wiki we use the path ~/GrovePi/ instead of /home/pi/Desktop/GrovePi, you need to make sure Step 2 and Step 3 use the same path.

Note

We firmly suggest you to update the firmware, or for some sensors you may get errors.

• Step 3. Git clone the Github repository.
 1 2 cd ~ git clone https://github.com/DexterInd/GrovePi.git 
• Step 4. Navigate to the demos' directory:
 1 cd yourpath/GrovePi/Software/Python/ 

Here is the grove_ledbar.py code.

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 import time import grovepi import random # Connect the Grove LED Bar to digital port D5 # DI,DCKI,VCC,GND ledbar = 5 grovepi.pinMode(ledbar,"OUTPUT") time.sleep(1) i = 0 # LED Bar methods # grovepi.ledBar_init(pin,orientation) # grovepi.ledBar_orientation(pin,orientation) # grovepi.ledBar_setLevel(pin,level) # grovepi.ledBar_setLed(pin,led,state) # grovepi.ledBar_toggleLed(pin,led) # grovepi.ledBar_setBits(pin,state) # grovepi.ledBar_getBits(pin) while True: try: print "Test 1) Initialise - red to green" # ledbar_init(pin,orientation) # orientation: (0 = red to green, 1 = green to red) grovepi.ledBar_init(ledbar, 0) time.sleep(.5) print "Test 2) Set level" # ledbar_setLevel(pin,level) # level: (0-10) for i in range(0,11): grovepi.ledBar_setLevel(ledbar, i) time.sleep(.2) time.sleep(.3) grovepi.ledBar_setLevel(ledbar, 8) time.sleep(.5) grovepi.ledBar_setLevel(ledbar, 2) time.sleep(.5) grovepi.ledBar_setLevel(ledbar, 5) time.sleep(.5) print "Test 3) Switch on/off a single LED" # ledbar_setLed(pin,led,state) # led: which led (1-10) # state: off or on (0,1) grovepi.ledBar_setLed(ledbar, 10, 1) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 9, 1) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 8, 1) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 1, 0) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 2, 0) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 3, 0) time.sleep(.5) print "Test 4) Toggle a single LED" # flip a single led - if it is currently on, it will become off and vice versa # ledbar_toggleLed(ledbar, led) grovepi.ledBar_toggleLed(ledbar, 1) time.sleep(.5) grovepi.ledBar_toggleLed(ledbar, 2) time.sleep(.5) grovepi.ledBar_toggleLed(ledbar, 9) time.sleep(.5) grovepi.ledBar_toggleLed(ledbar, 10) time.sleep(.5) print "Test 5) Set state - control all leds with 10 bits" # ledbar_setBits(ledbar, state) # state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2)) for i in range(0,32): grovepi.ledBar_setBits(ledbar, i) time.sleep(.2) time.sleep(.3) print "Test 6) Get current state" # state = ledbar_getBits(ledbar) # state: (0-1023) a bit for each of the 10 LEDs state = grovepi.ledBar_getBits(ledbar) print "with first 5 leds lit, the state should be 31 or 0x1F" print state # bitwise shift five bits to the left state = state << 5 # the state should now be 992 or 0x3E0 # when saved the last 5 LEDs will be lit instead of the first 5 LEDs time.sleep(.5) print "Test 7) Set state - save the state we just modified" # ledbar_setBits(ledbar, state) # state: (0-1023) a bit for each of the 10 LEDs grovepi.ledBar_setBits(ledbar, state) time.sleep(.5) print "Test 8) Swap orientation - green to red - current state is preserved" # ledbar_orientation(pin,orientation) # orientation: (0 = red to green, 1 = green to red) # when you reverse the led bar orientation, all methods know how to handle the new LED index # green to red grovepi.ledBar_orientation(ledbar, 1) time.sleep(.5) # red to green grovepi.ledBar_orientation(ledbar, 0) time.sleep(.5) # green to red grovepi.ledBar_orientation(ledbar, 1) time.sleep(.5) print "Test 9) Set level, again" # ledbar_setLevel(pin,level) # level: (0-10) # note the red LED is now at index 10 instead of 1 for i in range(0,11): grovepi.ledBar_setLevel(ledbar, i) time.sleep(.2) time.sleep(.3) print "Test 10) Set a single LED, again" # ledbar_setLed(pin,led,state) # led: which led (1-10) # state: off or on (0,1) grovepi.ledBar_setLed(ledbar, 1, 0) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 3, 0) time.sleep(.5) grovepi.ledBar_setLed(ledbar, 5, 0) time.sleep(.5) print "Test 11) Toggle a single LED, again" # ledbar_toggleLed(ledbar, led) grovepi.ledBar_toggleLed(ledbar, 2) time.sleep(.5) grovepi.ledBar_toggleLed(ledbar, 4) time.sleep(.5) print "Test 12) Get state" # state = ledbar_getBits(ledbar) # state: (0-1023) a bit for each of the 10 LEDs state = grovepi.ledBar_getBits(ledbar) # the last 5 LEDs are lit, so the state should be 992 or 0x3E0 # bitwise shift five bits to the right state = state >> 5 # the state should now be 31 or 0x1F print "Test 13) Set state, again" # ledbar_setBits(ledbar, state) # state: (0-1023) a bit for each of the 10 LEDs grovepi.ledBar_setBits(ledbar, state) time.sleep(.5) print "Test 14) Step" # step through all 10 LEDs for i in range(0,11): grovepi.ledBar_setLevel(ledbar, i) time.sleep(.2) time.sleep(.3) print "Test 15) Bounce" # switch on the first two LEDs grovepi.ledBar_setLevel(ledbar, 2) # get the current state (which is 0x3) state = grovepi.ledBar_getBits(ledbar) # bounce to the right for i in range(0,9): # bit shift left and update state <<= 1; grovepi.ledBar_setBits(ledbar, state) time.sleep(.2) # bounce to the left for i in range(0,9): # bit shift right and update state >>= 1; grovepi.ledBar_setBits(ledbar, state) time.sleep(.2) time.sleep(.3) print "Test 16) Random" for i in range(0,21): state = random.randint(0,1023) grovepi.ledBar_setBits(ledbar, state) time.sleep(.2) time.sleep(.3) print "Test 17) Invert" # set every 2nd LED on - 341 or 0x155 state = 341 for i in range(0,5): grovepi.ledBar_setBits(ledbar, state) time.sleep(.2) # bitwise XOR all 10 LEDs on with the current state state = 0x3FF ^ state grovepi.ledBar_setBits(ledbar, state) time.sleep(.2) time.sleep(.3) print "Test 18) Walk through all possible combinations" for i in range(0,1024): grovepi.ledBar_setBits(ledbar, i) time.sleep(.1) time.sleep(.4) except KeyboardInterrupt: grovepi.ledBar_setBits(ledbar, 0) break except IOError: print "Error" 
• Step 5. Run the demo.
 1 sudo python grove_ledbar.py 

## Projects¶

Grove LED Bar v2.0: Calliope Mini is equipped with two Grove connectors. In this project, I want to explore, how to talk to these Seeed Grove parts.

Grove LED Bar Controller with the Bean+: Learn the basics of using popular Grove components with the new LightBlue Bean+ to get started with building your own projects!

## Tech Support¶

Please submit any technical issue into our forum.