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
|
#!/usr/bin/python
import argparse
import board
import neopixel
import time
from os.path import exists
# parse command line arguments
# TODO parse multiple LEDs e.g. ./ledctl --led 1 red --led 2 white
parser = argparse.ArgumentParser(description='Set LED colors')
parser.add_argument('--led', type=int, help='LED number to control, starting at 1')
parser.add_argument('color', type=str, help='color or command')
args = parser.parse_args();
# initialize LED array
leds_max = 6
leds_num = 0
leds_array = neopixel.NeoPixel(board.D18, leds_max)
# restore LED array from state file
statefile = '/tmp/ledctl.state'
if exists(statefile):
#print('reading ' + statefile)
with open(statefile, 'r') as f:
lines = f.readlines()
i = 0;
for line in lines:
values = [ int(number) for number in line.rstrip().split(' ')]
if (i < leds_max):
leds_array[i] = (values[0], values[1], values[2]);
i = i + 1
f.close()
# figure out if we want to control a single LED or all of them
if args.led:
if (args.led < 1) or (args.led > leds_max):
parser.error("led must be within range")
else:
leds_num = args.led;
# default color is white
leds_color = (255, 255, 255)
def rgbval(colorname):
switch = {
'on': (255, 255, 255),
'off': (0, 0, 0),
'white': (255, 255, 255),
'black': (0, 0, 0),
'red': (255, 0, 0),
'green': (0, 255, 0),
'blue': (0, 0, 255),
'yellow': (255, 255, 0),
'cyan': (0, 255, 255),
'pink': (255, 0, 255),
}
return switch.get(colorname, 'Valid colors are black, white, ired, green, blue, yellow, on, off')
if args.color:
#print('color ' + args.color)
leds_color = rgbval(args.color);
if (leds_num > 0):
#print('setting LED %d' % leds_num)
leds_array[leds_num - 1] = leds_color
else:
#print('setting all LEDs')
leds_array.fill(leds_color)
# write LED array to state file
#print('writing ' + statefile)
with open(statefile, 'w') as f:
for i in range(leds_max):
for c in range(3):
f.write ('%d ' % leds_array[i][c])
f.write('\n');
f.close()
|