Grove - LED Bar
Version från den 3 februari 2021 kl. 15.19 av Christian (diskussion | bidrag)
LED Bar består av en 10-segment LED-display. Den kan användas som indikator för återstående batterilivslängd, spänning, vattennivå, musikvolym eller andra värden som kräver en gradientdisplay. Det finns 10 LED-streck i LED-streckdiagrammet: en röd, en gul, en ljusgrön och sju gröna streck.
Innehåll
Kompatibilitet
- Arduino
- Raspberry Pi
Port
- Digital
Bibliotek
https://github.com/Seeed-Studio/Grove_LED_Bar
Exempelkod
Arduino
#include <Grove_LED_Bar.h>
Grove_LED_Bar bar(9, 8, 0); // Clock pin, Data pin, Orientation
unsigned int state;
void setup()
{
// nothing to initialize
bar.begin();
}
void loop()
{
bar.setLevel(2); // Switch on the first two LEDs
state = bar.getBits(); // Get the current state (which is 0x3)
// Bounce to the right
for (int i = 0; i < 8; i++)
{
// Bit shift left and update
state <<= 1;
bar.setBits(state);
delay(200);
}
// Bounce to the left
for (int i = 0; i < 8; i++)
{
// Bit shift right and update
state >>= 1;
bar.setBits(state);
delay(200);
}
}
Raspberry Pi
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"