1
2
3 '''
4 Class that represents a LED pair.
5
6 This software is part of the raspibrick module.
7 It is Open Source Free Software, so you may
8 - run the code for any purpose
9 - study how the code works and adapt it to your needs
10 - integrate all or parts of the code in your own programs
11 - redistribute copies of the code
12 - improve the code and release your improvements to the public
13 However the use of the code is entirely your responsibility.
14 '''
15
16 from Tools import Tools
17 from RobotInstance import RobotInstance
18 import time
19 from threading import Thread
20 '''
21 Dictionary "color":[RGB list] of X11 colors.
22 '''
23 x11Colors = {"aqua":[0, 255, 255],
24 "cornflower":[100, 149, 237],
25 "crimson":[220, 20, 60],
26 "fuchsia":[255, 0, 255],
27 "indigo":[75, 0, 130],
28 "lime":[50, 205, 50],
29 "silver":[192, 192, 192],
30 "ghost white":[248, 248, 255],
31 "snow":[255, 250, 250],
32 "ghostwhite":[248, 248, 255],
33 "white smoke":[245, 245, 245],
34 "whitesmoke":[245, 245, 245],
35 "gainsboro":[220, 220, 220],
36 "floral white":[255, 250, 240],
37 "floralwhite":[255, 250, 240],
38 "old lace":[253, 245, 230],
39 "oldlace":[253, 245, 230],
40 "linen":[250, 240, 230],
41 "antique white":[250, 235, 215],
42 "antiquewhite":[250, 235, 215],
43 "papaya whip":[255, 239, 213],
44 "papayawhip":[255, 239, 213],
45 "blanched almond":[255, 235, 205],
46 "blanchedalmond":[255, 235, 205],
47 "bisque":[255, 228, 196],
48 "peach puff":[255, 218, 185],
49 "peachpuff":[255, 218, 185],
50 "navajo white":[255, 222, 173],
51 "navajowhite":[255, 222, 173],
52 "moccasin":[255, 228, 181],
53 "cornsilk":[255, 248, 220],
54 "ivory":[255, 255, 240],
55 "lemon chiffon":[255, 250, 205],
56 "lemonchiffon":[255, 250, 205],
57 "seashell":[255, 245, 238],
58 "honeydew":[240, 255, 240],
59 "mint cream":[245, 255, 250],
60 "mintcream":[245, 255, 250],
61 "azure":[240, 255, 255],
62 "alice blue":[240, 248, 255],
63 "aliceblue":[240, 248, 255],
64 "lavender":[230, 230, 250],
65 "lavender blush":[255, 240, 245],
66 "lavenderblush":[255, 240, 245],
67 "misty rose":[255, 228, 225],
68 "mistyrose":[255, 228, 225],
69 "white":[255, 255, 255],
70 "black":[0, 0, 0],
71 "dark slate gray":[47, 79, 79],
72 "darkslategray":[47, 79, 79],
73 "dark slate grey":[47, 79, 79],
74 "darkslategrey":[47, 79, 79],
75 "dim gray":[105, 105, 105],
76 "dimgray":[105, 105, 105],
77 "dim grey":[105, 105, 105],
78 "dimgrey":[105, 105, 105],
79 "slate gray":[112, 128, 144],
80 "slategray":[112, 128, 144],
81 "slate grey":[112, 128, 144],
82 "slategrey":[112, 128, 144],
83 "light slate gray":[119, 136, 153],
84 "lightslategray":[119, 136, 153],
85 "light slate grey":[119, 136, 153],
86 "lightslategrey":[119, 136, 153],
87 "gray":[190, 190, 190],
88 "grey":[190, 190, 190],
89 "light grey":[211, 211, 211],
90 "lightgrey":[211, 211, 211],
91 "light gray":[211, 211, 211],
92 "lightgray":[211, 211, 211],
93 "midnight blue":[25, 25, 112],
94 "midnightblue":[25, 25, 112],
95 "navy":[0, 0, 128],
96 "navy blue":[0, 0, 128],
97 "navyblue":[0, 0, 128],
98 "cornflower blue":[100, 149, 237],
99 "cornflowerblue":[100, 149, 237],
100 "dark slate blue":[72, 61, 139],
101 "darkslateblue":[72, 61, 139],
102 "slate blue":[106, 90, 205],
103 "slateblue":[106, 90, 205],
104 "medium slate blue":[123, 104, 238],
105 "mediumslateblue":[123, 104, 238],
106 "light slate blue":[132, 112, 255],
107 "lightslateblue":[132, 112, 255],
108 "medium blue":[0, 0, 205],
109 "mediumblue":[0, 0, 205],
110 "royal blue":[65, 105, 225],
111 "royalblue":[65, 105, 225],
112 "blue":[0, 0, 255],
113 "dodger blue":[30, 144, 255],
114 "dodgerblue":[30, 144, 255],
115 "deep sky blue":[0, 191, 255],
116 "deepskyblue":[0, 191, 255],
117 "sky blue":[135, 206, 235],
118 "skyblue":[135, 206, 235],
119 "light sky blue":[135, 206, 250],
120 "lightskyblue":[135, 206, 250],
121 "steel blue":[70, 130, 180],
122 "steelblue":[70, 130, 180],
123 "light steel blue":[176, 196, 222],
124 "lightsteelblue":[176, 196, 222],
125 "light blue":[173, 216, 230],
126 "lightblue":[173, 216, 230],
127 "powder blue":[176, 224, 230],
128 "powderblue":[176, 224, 230],
129 "pale turquoise":[175, 238, 238],
130 "paleturquoise":[175, 238, 238],
131 "dark turquoise":[0, 206, 209],
132 "darkturquoise":[0, 206, 209],
133 "medium turquoise":[72, 209, 204],
134 "mediumturquoise":[72, 209, 204],
135 "turquoise":[64, 224, 208],
136 "cyan":[0, 255, 255],
137 "light cyan":[224, 255, 255],
138 "lightcyan":[224, 255, 255],
139 "cadet blue":[95, 158, 160],
140 "cadetblue":[95, 158, 160],
141 "medium aquamarine":[102, 205, 170],
142 "mediumaquamarine":[102, 205, 170],
143 "aquamarine":[127, 255, 212],
144 "dark green":[0, 100, 0],
145 "darkgreen":[0, 100, 0],
146 "dark olive green":[85, 107, 47],
147 "darkolivegreen":[85, 107, 47],
148 "dark sea green":[143, 188, 143],
149 "darkseagreen":[143, 188, 143],
150 "sea green":[46, 139, 87],
151 "seagreen":[46, 139, 87],
152 "medium sea green":[60, 179, 113],
153 "mediumseagreen":[60, 179, 113],
154 "light sea green":[32, 178, 170],
155 "lightseagreen":[32, 178, 170],
156 "pale green":[152, 251, 152],
157 "palegreen":[152, 251, 152],
158 "spring green":[0, 255, 127],
159 "springgreen":[0, 255, 127],
160 "lawn green":[124, 252, 0],
161 "lawngreen":[124, 252, 0],
162 "green":[0, 255, 0],
163 "chartreuse":[127, 255, 0],
164 "medium spring green":[0, 250, 154],
165 "mediumspringgreen":[0, 250, 154],
166 "green yellow":[173, 255, 47],
167 "greenyellow":[173, 255, 47],
168 "lime green":[50, 205, 50],
169 "limegreen":[50, 205, 50],
170 "yellow green":[154, 205, 50],
171 "yellowgreen":[154, 205, 50],
172 "forest green":[34, 139, 34],
173 "forestgreen":[34, 139, 34],
174 "olive drab":[107, 142, 35],
175 "olivedrab":[107, 142, 35],
176 "dark khaki":[189, 183, 107],
177 "darkkhaki":[189, 183, 107],
178 "khaki":[240, 230, 140],
179 "pale goldenrod":[238, 232, 170],
180 "palegoldenrod":[238, 232, 170],
181 "light goldenrod yellow":[250, 250, 210],
182 "lightgoldenrodyellow":[250, 250, 210],
183 "light yellow":[255, 255, 224],
184 "lightyellow":[255, 255, 224],
185 "yellow":[255, 255, 0],
186 "gold":[255, 215, 0],
187 "light goldenrod":[238, 221, 130],
188 "lightgoldenrod":[238, 221, 130],
189 "goldenrod":[218, 165, 32],
190 "dark goldenrod":[184, 134, 11],
191 "darkgoldenrod":[184, 134, 11],
192 "rosy brown":[188, 143, 143],
193 "rosybrown":[188, 143, 143],
194 "indian red":[205, 92, 92],
195 "indianred":[205, 92, 92],
196 "saddle brown":[139, 69, 19],
197 "saddlebrown":[139, 69, 19],
198 "sienna":[160, 82, 45],
199 "peru":[205, 133, 63],
200 "burlywood":[222, 184, 135],
201 "beige":[245, 245, 220],
202 "wheat":[245, 222, 179],
203 "sandy brown":[244, 164, 96],
204 "sandybrown":[244, 164, 96],
205 "tan":[210, 180, 140],
206 "chocolate":[210, 105, 30],
207 "firebrick":[178, 34, 34],
208 "brown":[165, 42, 42],
209 "dark salmon":[233, 150, 122],
210 "darksalmon":[233, 150, 122],
211 "salmon":[250, 128, 114],
212 "light salmon":[255, 160, 122],
213 "lightsalmon":[255, 160, 122],
214 "orange":[255, 165, 0],
215 "dark orange":[255, 140, 0],
216 "darkorange":[255, 140, 0],
217 "coral":[255, 127, 80],
218 "light coral":[240, 128, 128],
219 "lightcoral":[240, 128, 128],
220 "tomato":[255, 99, 71],
221 "orange red":[255, 69, 0],
222 "orangered":[255, 69, 0],
223 "red":[255, 0, 0],
224 "hot pink":[255, 105, 180],
225 "hotpink":[255, 105, 180],
226 "deep pink":[255, 20, 147],
227 "deeppink":[255, 20, 147],
228 "pink":[255, 192, 203],
229 "light pink":[255, 182, 193],
230 "lightpink":[255, 182, 193],
231 "pale violet red":[219, 112, 147],
232 "palevioletred":[219, 112, 147],
233 "maroon":[176, 48, 96],
234 "medium violet red":[199, 21, 133],
235 "mediumvioletred":[199, 21, 133],
236 "violet red":[208, 32, 144],
237 "violetred":[208, 32, 144],
238 "magenta":[255, 0, 255],
239 "violet":[238, 130, 238],
240 "plum":[221, 160, 221],
241 "orchid":[218, 112, 214],
242 "medium orchid":[186, 85, 211],
243 "mediumorchid":[186, 85, 211],
244 "dark orchid":[153, 50, 204],
245 "darkorchid":[153, 50, 204],
246 "dark violet":[148, 0, 211],
247 "darkviolet":[148, 0, 211],
248 "blue violet":[138, 43, 226],
249 "blueviolet":[138, 43, 226],
250 "purple":[160, 32, 240],
251 "medium purple":[147, 112, 219],
252 "mediumpurple":[147, 112, 219],
253 "thistle":[216, 191, 216],
254 "snow1":[255, 250, 250],
255 "snow2":[238, 233, 233],
256 "snow3":[205, 201, 201],
257 "snow4":[139, 137, 137],
258 "seashell1":[255, 245, 238],
259 "seashell2":[238, 229, 222],
260 "seashell3":[205, 197, 191],
261 "seashell4":[139, 134, 130],
262 "antiquewhite1":[255, 239, 219],
263 "antiquewhite2":[238, 223, 204],
264 "antiquewhite3":[205, 192, 176],
265 "antiquewhite4":[139, 131, 120],
266 "bisque1":[255, 228, 196],
267 "bisque2":[238, 213, 183],
268 "bisque3":[205, 183, 158],
269 "bisque4":[139, 125, 107],
270 "peachpuff1":[255, 218, 185],
271 "peachpuff2":[238, 203, 173],
272 "peachpuff3":[205, 175, 149],
273 "peachpuff4":[139, 119, 101],
274 "navajowhite1":[255, 222, 173],
275 "navajowhite2":[238, 207, 161],
276 "navajowhite3":[205, 179, 139],
277 "navajowhite4":[139, 121, 94],
278 "lemonchiffon1":[255, 250, 205],
279 "lemonchiffon2":[238, 233, 191],
280 "lemonchiffon3":[205, 201, 165],
281 "lemonchiffon4":[139, 137, 112],
282 "cornsilk1":[255, 248, 220],
283 "cornsilk2":[238, 232, 205],
284 "cornsilk3":[205, 200, 177],
285 "cornsilk4":[139, 136, 120],
286 "ivory1":[255, 255, 240],
287 "ivory2":[238, 238, 224],
288 "ivory3":[205, 205, 193],
289 "ivory4":[139, 139, 131],
290 "honeydew1":[240, 255, 240],
291 "honeydew2":[224, 238, 224],
292 "honeydew3":[193, 205, 193],
293 "honeydew4":[131, 139, 131],
294 "lavenderblush1":[255, 240, 245],
295 "lavenderblush2":[238, 224, 229],
296 "lavenderblush3":[205, 193, 197],
297 "lavenderblush4":[139, 131, 134],
298 "mistyrose1":[255, 228, 225],
299 "mistyrose2":[238, 213, 210],
300 "mistyrose3":[205, 183, 181],
301 "mistyrose4":[139, 125, 123],
302 "azure1":[240, 255, 255],
303 "azure2":[224, 238, 238],
304 "azure3":[193, 205, 205],
305 "azure4":[131, 139, 139],
306 "slateblue1":[131, 111, 255],
307 "slateblue2":[122, 103, 238],
308 "slateblue3":[105, 89, 205],
309 "slateblue4":[71, 60, 139],
310 "royalblue1":[72, 118, 255],
311 "royalblue2":[67, 110, 238],
312 "royalblue3":[58, 95, 205],
313 "royalblue4":[39, 64, 139],
314 "blue1":[0, 0, 255],
315 "blue2":[0, 0, 238],
316 "blue3":[0, 0, 205],
317 "blue4":[0, 0, 139],
318 "dodgerblue1":[30, 144, 255],
319 "dodgerblue2":[28, 134, 238],
320 "dodgerblue3":[24, 116, 205],
321 "dodgerblue4":[16, 78, 139],
322 "steelblue1":[99, 184, 255],
323 "steelblue2":[92, 172, 238],
324 "steelblue3":[79, 148, 205],
325 "steelblue4":[54, 100, 139],
326 "deepskyblue1":[0, 191, 255],
327 "deepskyblue2":[0, 178, 238],
328 "deepskyblue3":[0, 154, 205],
329 "deepskyblue4":[0, 104, 139],
330 "skyblue1":[135, 206, 255],
331 "skyblue2":[126, 192, 238],
332 "skyblue3":[108, 166, 205],
333 "skyblue4":[74, 112, 139],
334 "lightskyblue1":[176, 226, 255],
335 "lightskyblue2":[164, 211, 238],
336 "lightskyblue3":[141, 182, 205],
337 "lightskyblue4":[96, 123, 139],
338 "slategray1":[198, 226, 255],
339 "slategray2":[185, 211, 238],
340 "slategray3":[159, 182, 205],
341 "slategray4":[108, 123, 139],
342 "lightsteelblue1":[202, 225, 255],
343 "lightsteelblue2":[188, 210, 238],
344 "lightsteelblue3":[162, 181, 205],
345 "lightsteelblue4":[110, 123, 139],
346 "lightblue1":[191, 239, 255],
347 "lightblue2":[178, 223, 238],
348 "lightblue3":[154, 192, 205],
349 "lightblue4":[104, 131, 139],
350 "lightcyan1":[224, 255, 255],
351 "lightcyan2":[209, 238, 238],
352 "lightcyan3":[180, 205, 205],
353 "lightcyan4":[122, 139, 139],
354 "paleturquoise1":[187, 255, 255],
355 "paleturquoise2":[174, 238, 238],
356 "paleturquoise3":[150, 205, 205],
357 "paleturquoise4":[102, 139, 139],
358 "cadetblue1":[152, 245, 255],
359 "cadetblue2":[142, 229, 238],
360 "cadetblue3":[122, 197, 205],
361 "cadetblue4":[83, 134, 139],
362 "turquoise1":[0, 245, 255],
363 "turquoise2":[0, 229, 238],
364 "turquoise3":[0, 197, 205],
365 "turquoise4":[0, 134, 139],
366 "cyan1":[0, 255, 255],
367 "cyan2":[0, 238, 238],
368 "cyan3":[0, 205, 205],
369 "cyan4":[0, 139, 139],
370 "darkslategray1":[151, 255, 255],
371 "darkslategray2":[141, 238, 238],
372 "darkslategray3":[121, 205, 205],
373 "darkslategray4":[82, 139, 139],
374 "aquamarine1":[127, 255, 212],
375 "aquamarine2":[118, 238, 198],
376 "aquamarine3":[102, 205, 170],
377 "aquamarine4":[69, 139, 116],
378 "darkseagreen1":[193, 255, 193],
379 "darkseagreen2":[180, 238, 180],
380 "darkseagreen3":[155, 205, 155],
381 "darkseagreen4":[105, 139, 105],
382 "seagreen1":[84, 255, 159],
383 "seagreen2":[78, 238, 148],
384 "seagreen3":[67, 205, 128],
385 "seagreen4":[46, 139, 87],
386 "palegreen1":[154, 255, 154],
387 "palegreen2":[144, 238, 144],
388 "palegreen3":[124, 205, 124],
389 "palegreen4":[84, 139, 84],
390 "springgreen1":[0, 255, 127],
391 "springgreen2":[0, 238, 118],
392 "springgreen3":[0, 205, 102],
393 "springgreen4":[0, 139, 69],
394 "green1":[0, 255, 0],
395 "green2":[0, 238, 0],
396 "green3":[0, 205, 0],
397 "green4":[0, 139, 0],
398 "chartreuse1":[127, 255, 0],
399 "chartreuse2":[118, 238, 0],
400 "chartreuse3":[102, 205, 0],
401 "chartreuse4":[69, 139, 0],
402 "olivedrab1":[192, 255, 62],
403 "olivedrab2":[179, 238, 58],
404 "olivedrab3":[154, 205, 50],
405 "olivedrab4":[105, 139, 34],
406 "darkolivegreen1":[202, 255, 112],
407 "darkolivegreen2":[188, 238, 104],
408 "darkolivegreen3":[162, 205, 90],
409 "darkolivegreen4":[110, 139, 61],
410 "khaki1":[255, 246, 143],
411 "khaki2":[238, 230, 133],
412 "khaki3":[205, 198, 115],
413 "khaki4":[139, 134, 78],
414 "lightgoldenrod1":[255, 236, 139],
415 "lightgoldenrod2":[238, 220, 130],
416 "lightgoldenrod3":[205, 190, 112],
417 "lightgoldenrod4":[139, 129, 76],
418 "lightyellow1":[255, 255, 224],
419 "lightyellow2":[238, 238, 209],
420 "lightyellow3":[205, 205, 180],
421 "lightyellow4":[139, 139, 122],
422 "yellow1":[255, 255, 0],
423 "yellow2":[238, 238, 0],
424 "yellow3":[205, 205, 0],
425 "yellow4":[139, 139, 0],
426 "gold1":[255, 215, 0],
427 "gold2":[238, 201, 0],
428 "gold3":[205, 173, 0],
429 "gold4":[139, 117, 0],
430 "goldenrod1":[255, 193, 37],
431 "goldenrod2":[238, 180, 34],
432 "goldenrod3":[205, 155, 29],
433 "goldenrod4":[139, 105, 20],
434 "darkgoldenrod1":[255, 185, 15],
435 "darkgoldenrod2":[238, 173, 14],
436 "darkgoldenrod3":[205, 149, 12],
437 "darkgoldenrod4":[139, 101, 8],
438 "rosybrown1":[255, 193, 193],
439 "rosybrown2":[238, 180, 180],
440 "rosybrown3":[205, 155, 155],
441 "rosybrown4":[139, 105, 105],
442 "indianred1":[255, 106, 106],
443 "indianred2":[238, 99, 99],
444 "indianred3":[205, 85, 85],
445 "indianred4":[139, 58, 58],
446 "sienna1":[255, 130, 71],
447 "sienna2":[238, 121, 66],
448 "sienna3":[205, 104, 57],
449 "sienna4":[139, 71, 38],
450 "burlywood1":[255, 211, 155],
451 "burlywood2":[238, 197, 145],
452 "burlywood3":[205, 170, 125],
453 "burlywood4":[139, 115, 85],
454 "wheat1":[255, 231, 186],
455 "wheat2":[238, 216, 174],
456 "wheat3":[205, 186, 150],
457 "wheat4":[139, 126, 102],
458 "tan1":[255, 165, 79],
459 "tan2":[238, 154, 73],
460 "tan3":[205, 133, 63],
461 "tan4":[139, 90, 43],
462 "chocolate1":[255, 127, 36],
463 "chocolate2":[238, 118, 33],
464 "chocolate3":[205, 102, 29],
465 "chocolate4":[139, 69, 19],
466 "firebrick1":[255, 48, 48],
467 "firebrick2":[238, 44, 44],
468 "firebrick3":[205, 38, 38],
469 "firebrick4":[139, 26, 26],
470 "brown1":[255, 64, 64],
471 "brown2":[238, 59, 59],
472 "brown3":[205, 51, 51],
473 "brown4":[139, 35, 35],
474 "salmon1":[255, 140, 105],
475 "salmon2":[238, 130, 98],
476 "salmon3":[205, 112, 84],
477 "salmon4":[139, 76, 57],
478 "lightsalmon1":[255, 160, 122],
479 "lightsalmon2":[238, 149, 114],
480 "lightsalmon3":[205, 129, 98],
481 "lightsalmon4":[139, 87, 66],
482 "orange1":[255, 165, 0],
483 "orange2":[238, 154, 0],
484 "orange3":[205, 133, 0],
485 "orange4":[139, 90, 0],
486 "darkorange1":[255, 127, 0],
487 "darkorange2":[238, 118, 0],
488 "darkorange3":[205, 102, 0],
489 "darkorange4":[139, 69, 0],
490 "coral1":[255, 114, 86],
491 "coral2":[238, 106, 80],
492 "coral3":[205, 91, 69],
493 "coral4":[139, 62, 47],
494 "tomato1":[255, 99, 71],
495 "tomato2":[238, 92, 66],
496 "tomato3":[205, 79, 57],
497 "tomato4":[139, 54, 38],
498 "orangered1":[255, 69, 0],
499 "orangered2":[238, 64, 0],
500 "orangered3":[205, 55, 0],
501 "orangered4":[139, 37, 0],
502 "red1":[255, 0, 0],
503 "red2":[238, 0, 0],
504 "red3":[205, 0, 0],
505 "red4":[139, 0, 0],
506 "deeppink1":[255, 20, 147],
507 "deeppink2":[238, 18, 137],
508 "deeppink3":[205, 16, 118],
509 "deeppink4":[139, 10, 80],
510 "hotpink1":[255, 110, 180],
511 "hotpink2":[238, 106, 167],
512 "hotpink3":[205, 96, 144],
513 "hotpink4":[139, 58, 98],
514 "pink1":[255, 181, 197],
515 "pink2":[238, 169, 184],
516 "pink3":[205, 145, 158],
517 "pink4":[139, 99, 108],
518 "lightpink1":[255, 174, 185],
519 "lightpink2":[238, 162, 173],
520 "lightpink3":[205, 140, 149],
521 "lightpink4":[139, 95, 101],
522 "palevioletred1":[255, 130, 171],
523 "palevioletred2":[238, 121, 159],
524 "palevioletred3":[205, 104, 137],
525 "palevioletred4":[139, 71, 93],
526 "maroon1":[255, 52, 179],
527 "maroon2":[238, 48, 167],
528 "maroon3":[205, 41, 144],
529 "maroon4":[139, 28, 98],
530 "violetred1":[255, 62, 150],
531 "violetred2":[238, 58, 140],
532 "violetred3":[205, 50, 120],
533 "violetred4":[139, 34, 82],
534 "magenta1":[255, 0, 255],
535 "magenta2":[238, 0, 238],
536 "magenta3":[205, 0, 205],
537 "magenta4":[139, 0, 139],
538 "orchid1":[255, 131, 250],
539 "orchid2":[238, 122, 233],
540 "orchid3":[205, 105, 201],
541 "orchid4":[139, 71, 137],
542 "plum1":[255, 187, 255],
543 "plum2":[238, 174, 238],
544 "plum3":[205, 150, 205],
545 "plum4":[139, 102, 139],
546 "mediumorchid1":[224, 102, 255],
547 "mediumorchid2":[209, 95, 238],
548 "mediumorchid3":[180, 82, 205],
549 "mediumorchid4":[122, 55, 139],
550 "darkorchid1":[191, 62, 255],
551 "darkorchid2":[178, 58, 238],
552 "darkorchid3":[154, 50, 205],
553 "darkorchid4":[104, 34, 139],
554 "purple1":[155, 48, 255],
555 "purple2":[145, 44, 238],
556 "purple3":[125, 38, 205],
557 "purple4":[85, 26, 139],
558 "mediumpurple1":[171, 130, 255],
559 "mediumpurple2":[159, 121, 238],
560 "mediumpurple3":[137, 104, 205],
561 "mediumpurple4":[93, 71, 139],
562 "thistle1":[255, 225, 255],
563 "thistle2":[238, 210, 238],
564 "thistle3":[205, 181, 205],
565 "thistle4":[139, 123, 139],
566 "gray0":[0, 0, 0],
567 "grey0":[0, 0, 0],
568 "gray1":[3, 3, 3],
569 "grey1":[3, 3, 3],
570 "gray2":[5, 5, 5],
571 "grey2":[5, 5, 5],
572 "gray3":[8, 8, 8],
573 "grey3":[8, 8, 8],
574 "gray4":[10, 10, 10],
575 "grey4":[10, 10, 10],
576 "gray5":[13, 13, 13],
577 "grey5":[13, 13, 13],
578 "gray6":[15, 15, 15],
579 "grey6":[15, 15, 15],
580 "gray7":[18, 18, 18],
581 "grey7":[18, 18, 18],
582 "gray8":[20, 20, 20],
583 "grey8":[20, 20, 20],
584 "gray9":[23, 23, 23],
585 "grey9":[23, 23, 23],
586 "gray10":[26, 26, 26],
587 "grey10":[26, 26, 26],
588 "gray11":[28, 28, 28],
589 "grey11":[28, 28, 28],
590 "gray12":[31, 31, 31],
591 "grey12":[31, 31, 31],
592 "gray13":[33, 33, 33],
593 "grey13":[33, 33, 33],
594 "gray14":[36, 36, 36],
595 "grey14":[36, 36, 36],
596 "gray15":[38, 38, 38],
597 "grey15":[38, 38, 38],
598 "gray16":[41, 41, 41],
599 "grey16":[41, 41, 41],
600 "gray17":[43, 43, 43],
601 "grey17":[43, 43, 43],
602 "gray18":[46, 46, 46],
603 "grey18":[46, 46, 46],
604 "gray19":[48, 48, 48],
605 "grey19":[48, 48, 48],
606 "gray20":[51, 51, 51],
607 "grey20":[51, 51, 51],
608 "gray21":[54, 54, 54],
609 "grey21":[54, 54, 54],
610 "gray22":[56, 56, 56],
611 "grey22":[56, 56, 56],
612 "gray23":[59, 59, 59],
613 "grey23":[59, 59, 59],
614 "gray24":[61, 61, 61],
615 "grey24":[61, 61, 61],
616 "gray25":[64, 64, 64],
617 "grey25":[64, 64, 64],
618 "gray26":[66, 66, 66],
619 "grey26":[66, 66, 66],
620 "gray27":[69, 69, 69],
621 "grey27":[69, 69, 69],
622 "gray28":[71, 71, 71],
623 "grey28":[71, 71, 71],
624 "gray29":[74, 74, 74],
625 "grey29":[74, 74, 74],
626 "gray30":[77, 77, 77],
627 "grey30":[77, 77, 77],
628 "gray31":[79, 79, 79],
629 "grey31":[79, 79, 79],
630 "gray32":[82, 82, 82],
631 "grey32":[82, 82, 82],
632 "gray33":[84, 84, 84],
633 "grey33":[84, 84, 84],
634 "gray34":[87, 87, 87],
635 "grey34":[87, 87, 87],
636 "gray35":[89, 89, 89],
637 "grey35":[89, 89, 89],
638 "gray36":[92, 92, 92],
639 "grey36":[92, 92, 92],
640 "gray37":[94, 94, 94],
641 "grey37":[94, 94, 94],
642 "gray38":[97, 97, 97],
643 "grey38":[97, 97, 97],
644 "gray39":[99, 99, 99],
645 "grey39":[99, 99, 99],
646 "gray40":[102, 102, 102],
647 "grey40":[102, 102, 102],
648 "gray41":[105, 105, 105],
649 "grey41":[105, 105, 105],
650 "gray42":[107, 107, 107],
651 "grey42":[107, 107, 107],
652 "gray43":[110, 110, 110],
653 "grey43":[110, 110, 110],
654 "gray44":[112, 112, 112],
655 "grey44":[112, 112, 112],
656 "gray45":[115, 115, 115],
657 "grey45":[115, 115, 115],
658 "gray46":[117, 117, 117],
659 "grey46":[117, 117, 117],
660 "gray47":[120, 120, 120],
661 "grey47":[120, 120, 120],
662 "gray48":[122, 122, 122],
663 "grey48":[122, 122, 122],
664 "gray49":[125, 125, 125],
665 "grey49":[125, 125, 125],
666 "gray50":[127, 127, 127],
667 "grey50":[127, 127, 127],
668 "gray51":[130, 130, 130],
669 "grey51":[130, 130, 130],
670 "gray52":[133, 133, 133],
671 "grey52":[133, 133, 133],
672 "gray53":[135, 135, 135],
673 "grey53":[135, 135, 135],
674 "gray54":[138, 138, 138],
675 "grey54":[138, 138, 138],
676 "gray55":[140, 140, 140],
677 "grey55":[140, 140, 140],
678 "gray56":[143, 143, 143],
679 "grey56":[143, 143, 143],
680 "gray57":[145, 145, 145],
681 "grey57":[145, 145, 145],
682 "gray58":[148, 148, 148],
683 "grey58":[148, 148, 148],
684 "gray59":[150, 150, 150],
685 "grey59":[150, 150, 150],
686 "gray60":[153, 153, 153],
687 "grey60":[153, 153, 153],
688 "gray61":[156, 156, 156],
689 "grey61":[156, 156, 156],
690 "gray62":[158, 158, 158],
691 "grey62":[158, 158, 158],
692 "gray63":[161, 161, 161],
693 "grey63":[161, 161, 161],
694 "gray64":[163, 163, 163],
695 "grey64":[163, 163, 163],
696 "gray65":[166, 166, 166],
697 "grey65":[166, 166, 166],
698 "gray66":[168, 168, 168],
699 "grey66":[168, 168, 168],
700 "gray67":[171, 171, 171],
701 "grey67":[171, 171, 171],
702 "gray68":[173, 173, 173],
703 "grey68":[173, 173, 173],
704 "gray69":[176, 176, 176],
705 "grey69":[176, 176, 176],
706 "gray70":[179, 179, 179],
707 "grey70":[179, 179, 179],
708 "gray71":[181, 181, 181],
709 "grey71":[181, 181, 181],
710 "gray72":[184, 184, 184],
711 "grey72":[184, 184, 184],
712 "gray73":[186, 186, 186],
713 "grey73":[186, 186, 186],
714 "gray74":[189, 189, 189],
715 "grey74":[189, 189, 189],
716 "gray75":[191, 191, 191],
717 "grey75":[191, 191, 191],
718 "gray76":[194, 194, 194],
719 "grey76":[194, 194, 194],
720 "gray77":[196, 196, 196],
721 "grey77":[196, 196, 196],
722 "gray78":[199, 199, 199],
723 "grey78":[199, 199, 199],
724 "gray79":[201, 201, 201],
725 "grey79":[201, 201, 201],
726 "gray80":[204, 204, 204],
727 "grey80":[204, 204, 204],
728 "gray81":[207, 207, 207],
729 "grey81":[207, 207, 207],
730 "gray82":[209, 209, 209],
731 "grey82":[209, 209, 209],
732 "gray83":[212, 212, 212],
733 "grey83":[212, 212, 212],
734 "gray84":[214, 214, 214],
735 "grey84":[214, 214, 214],
736 "gray85":[217, 217, 217],
737 "grey85":[217, 217, 217],
738 "gray86":[219, 219, 219],
739 "grey86":[219, 219, 219],
740 "gray87":[222, 222, 222],
741 "grey87":[222, 222, 222],
742 "gray88":[224, 224, 224],
743 "grey88":[224, 224, 224],
744 "gray89":[227, 227, 227],
745 "grey89":[227, 227, 227],
746 "gray90":[229, 229, 229],
747 "grey90":[229, 229, 229],
748 "gray91":[232, 232, 232],
749 "grey91":[232, 232, 232],
750 "gray92":[235, 235, 235],
751 "grey92":[235, 235, 235],
752 "gray93":[237, 237, 237],
753 "grey93":[237, 237, 237],
754 "gray94":[240, 240, 240],
755 "grey94":[240, 240, 240],
756 "gray95":[242, 242, 242],
757 "grey95":[242, 242, 242],
758 "gray96":[245, 245, 245],
759 "grey96":[245, 245, 245],
760 "gray97":[247, 247, 247],
761 "grey97":[247, 247, 247],
762 "gray98":[250, 250, 250],
763 "grey98":[250, 250, 250],
764 "gray99":[252, 252, 252],
765 "grey99":[252, 252, 252],
766 "gray100":[255, 255, 255],
767 "grey100":[255, 255, 255],
768 "dark grey":[169, 169, 169],
769 "darkgrey":[169, 169, 169],
770 "dark gray":[169, 169, 169],
771 "darkgray":[169, 169, 169],
772 "dark blue":[0, 0, 139],
773 "darkblue":[0, 0, 139],
774 "dark cyan":[0, 139, 139],
775 "darkcyan":[0, 139, 139],
776 "dark magenta":[139, 0, 139],
777 "darkmagenta":[139, 0, 139],
778 "dark red":[139, 0, 0],
779 "darkred":[139, 0, 0],
780 "light green":[144, 238, 144],
781 "lightgreen":[144, 238, 144],
782 "olive":[128, 128, 0],
783 "teal":[0, 128, 128]}
784
785
786 -class Led():
787 blinkerThreads = []
788
789 '''
790 Class that represents a LED pair.
791 '''
793 '''
794 Creates a Led instance with given ID.
795 IDs of the double LEDs: 0: front, 1: left side , 2: rear, 3: right side.
796 The following global constants are defined:
797 LED_FRONT = 0, LED_LEFT = 1, LED_REAR = 2, RED_RIGHT = 3.
798 @param id: the LED identifier
799 '''
800 self.id = id
801 self.robot = RobotInstance.getRobot()
802 self._blinkerThread = None
803 Tools.debug("Led instance with ID " + str(id) + " created")
804
806 '''
807 Sets the RGB color value of the two LEDs with current ID.
808 @param args list of [red, green, blue] RGB color components 0..255
809 or three color integers 0..255 or X11-color string
810 '''
811 self._checkRobot()
812 if len(args) == 1 and type(args[0]) == list:
813 red = int(args[0][0] / 255.0 * 4095)
814 green = int(args[0][1] / 255.0 * 4095)
815 blue = int(args[0][2] / 255.0 * 4095)
816 elif len(args) == 1 and type(args[0]) == str:
817 colorStr = args[0]
818 colorList = x11Colors[colorStr]
819 red = colorList[0]
820 green = colorList[1]
821 blue = colorList[2]
822 elif len(args) == 3:
823 red = int(args[0] / 255.0 * 4095)
824 green = int(args[1] / 255.0 * 4095)
825 blue = int(args[2] / 255.0 * 4095)
826 else:
827 raise ValueError("Illegal param in setColor()")
828 id = (self.id + 3) % 4
829 self.robot.pwm.setDuty(3 * id, blue)
830 self.robot.pwm.setDuty(3 * id + 1, green)
831 self.robot.pwm.setDuty(3 * id + 2, red)
832
833
834 - def startBlinker(self, onColor, offColor, onTime, offTime, count = 0, blocking = False):
835 '''
836 Starts blinking with given onColor and offColor. The blinking period
837 is offTime + onTime. May be stopped by calling stopBlinker(). If blocking is False, the
838 function returns immediately while the blinking goes on. The blinking is stopped by setColor().
839 @param onColor: color in on state. Must be X11 color string
840 @param offColor: color in off state. Must be X11 color string
841 @param onTime: the time in ms in on state
842 @param offTime: the time in ms in off state
843 @param count: total number of on states; 0 for endlessly (default)
844 @param blocking: if True, the method blocks until the blinker has finished; otherwise
845 it returns immediately (default: False)
846 '''
847 self._checkRobot()
848 if self._blinkerThread != None:
849 self.stopBlinker()
850 self._blinkerThread = BlinkerThread(self, onColor, offColor, onTime, offTime, count)
851 Led.blinkerThreads.append(self._blinkerThread)
852 if blocking:
853 while self.isBlinkerAlive():
854 continue
855
857 '''
858 Stops blinking and turns the led off.
859 '''
860 self._checkRobot()
861 if self._blinkerThread != None:
862 self._blinkerThread.stop()
863
865 '''
866 @return: True, if the blinker is displaying; otherwise False
867 '''
868 self._checkRobot()
869 time.sleep(0.001)
870 return self._blinkerThread != None
871
872 @staticmethod
874 '''
875 Sets the RGB color of all 4 LED pairs.
876 @param color list of [red, green, blue] RGB color components 0..255
877 or three color integers 0..255 or X11-color string
878 '''
879 for blinkerThread in Led.blinkerThreads:
880 blinkerThread.stop()
881 leds = [Led(0), Led(1), Led(2), Led(3)]
882 for led in leds:
883 led.setColor(*args)
884
885 @staticmethod
887 '''
888 Turns off all 4 LED pairs.
889 '''
890 Led.setColorAll(0, 0, 0)
891
895
900 - def __init__(self, led, onColor, offColor, onTime, offTime, count):
901 Thread.__init__(self)
902 self.led = led
903 self._onColor = onColor
904 self._offColor = offColor
905 self._onTime = onTime
906 self._offTime = offTime
907 self._count = count
908 self._isAlive = True
909 self.start()
910
912 Tools.debug("Led blinker thread starting")
913 nb = 0
914 self._isRunning = True
915 while self._isRunning:
916 self.led.setColor(self._onColor)
917 startTime = time.time()
918 while time.time() - startTime < self._onTime / 1000.0 and self._isRunning:
919 time.sleep(0.001)
920 if not self._isRunning:
921 break
922
923 self.led.setColor(self._offColor)
924 startTime = time.time()
925 while time.time() - startTime < self._offTime / 1000.0 and self._isRunning:
926 time.sleep(0.001)
927 if not self._isRunning:
928 break
929
930 nb += 1
931 if nb == self._count:
932 self._isRunning = False
933 self.led.setColor(0, 0, 0)
934 self.led._blinkerThread = None
935 self._isAlive = False
936 Tools.debug("Led blinker thread finished")
937
939 self._isRunning = False
940 while self._isAlive:
941 continue
942