gusimplewhiteboard
SENSORSLedsSensors.hpp
Go to the documentation of this file.
1
10#ifndef SENSORSLedsSensors_DEFINED
11#define SENSORSLedsSensors_DEFINED
12
13
14#include <gu_util.h>
15#include <assert.h>
16#include "wb_sensors_leds.h"
17
18namespace guWhiteboard
19{
22 {
23 Off = -1,
24 Red = 0,
30 };
31
34 {
35 AllLEDs = 0,
47 };
48
49 namespace LEDs
50 {
53 {
132 };
133
134#ifdef WHITEBOARD_POSTER_STRING_CONVERSION
136 static const char *ledNames[NUMBER_OF_LEDS] =
137 {
138 "LeftEar1",
139 "LeftEar2",
140 "LeftEar3",
141 "LeftEar4",
142 "LeftEar5",
143 "LeftEar6",
144 "LeftEar7",
145 "LeftEar8",
146 "LeftEar9",
147 "LeftEar10",
148 "RightEar1",
149 "RightEar2",
150 "RightEar3",
151 "RightEar4",
152 "RightEar5",
153 "RightEar6",
154 "RightEar7",
155 "RightEar8",
156 "RightEar9",
157 "RightEar10",
158 "LeftEyeRed1",
159 "LeftEyeRed2",
160 "LeftEyeRed3",
161 "LeftEyeRed4",
162 "LeftEyeRed5",
163 "LeftEyeRed6",
164 "LeftEyeRed7",
165 "LeftEyeRed8",
166 "LeftEyeGreen1",
167 "LeftEyeGreen2",
168 "LeftEyeGreen3",
169 "LeftEyeGreen4",
170 "LeftEyeGreen5",
171 "LeftEyeGreen6",
172 "LeftEyeGreen7",
173 "LeftEyeGreen8",
174 "LeftEyeBlue1",
175 "LeftEyeBlue2",
176 "LeftEyeBlue3",
177 "LeftEyeBlue4",
178 "LeftEyeBlue5",
179 "LeftEyeBlue6",
180 "LeftEyeBlue7",
181 "LeftEyeBlue8",
182 "RightEyeRed1",
183 "RightEyeRed2",
184 "RightEyeRed3",
185 "RightEyeRed4",
186 "RightEyeRed5",
187 "RightEyeRed6",
188 "RightEyeRed7",
189 "RightEyeRed8",
190 "RightEyeGreen1",
191 "RightEyeGreen2",
192 "RightEyeGreen3",
193 "RightEyeGreen4",
194 "RightEyeGreen5",
195 "RightEyeGreen6",
196 "RightEyeGreen7",
197 "RightEyeGreen8",
198 "RightEyeBlue1",
199 "RightEyeBlue2",
200 "RightEyeBlue3",
201 "RightEyeBlue4",
202 "RightEyeBlue5",
203 "RightEyeBlue6",
204 "RightEyeBlue7",
205 "RightEyeBlue8",
206 "ChestRed",
207 "ChestGreen",
208 "ChestBlue",
209 "LeftFootRed",
210 "LeftFootGreen",
211 "LeftFootBlue",
212 "RightFootRed",
213 "RightFootGreen",
214 "RightFootBlue",
215 };
216#endif
217 }
218
243 {
244
245 public:
248 {
250 }
251
256 void LEDsGroupChange(LEDGroups target_group, LEDColour target_colour_or_numOfEars)
257 {
258 switch (target_group)
259 {
260 case AllLEDs: //Only supporting off command
261 {
262 for(int i = LEDs::LeftEar1; i < LEDs::NUMBER_OF_LEDS; i++)
263 changeLed(static_cast<LEDs::LEDCode>(i), false);
264 break;
265 }
266 case Ears:
267 {
268 for(int i = LEDs::LeftEar1; i <= LEDs::LeftEar10; i++)
269 i-LEDs::LeftEar1 < target_colour_or_numOfEars ? changeLed(static_cast<LEDs::LEDCode>(i), true) : changeLed(static_cast<LEDs::LEDCode>(i), false);
270 for(int i = LEDs::RightEar1; i <= LEDs::RightEar10; i++)
271 i-LEDs::RightEar1 < target_colour_or_numOfEars ? changeLed(static_cast<LEDs::LEDCode>(i), true) : changeLed(static_cast<LEDs::LEDCode>(i), false);
272 break;
273 }
274 case LEar:
275 {
276 for(int i = LEDs::LeftEar1; i <= LEDs::LeftEar10; i++)
277 i-LEDs::LeftEar1 < target_colour_or_numOfEars ? changeLed(static_cast<LEDs::LEDCode>(i), true) : changeLed(static_cast<LEDs::LEDCode>(i), false);
278 break;
279 }
280 case REar:
281 {
282 for(int i = LEDs::RightEar1; i <= LEDs::RightEar10; i++)
283 i-LEDs::RightEar1 < target_colour_or_numOfEars ? changeLed(static_cast<LEDs::LEDCode>(i), true) : changeLed(static_cast<LEDs::LEDCode>(i), false);
284 break;
285 }
286 case Eyes:
287 {
288 for(int i = LEDs::LeftEyeRed1; i <= LEDs::LeftEyeRed8; i++)
289 {
291 changeLedColour(led, target_colour_or_numOfEars);
292 }
293 for(int i = LEDs::RightEyeRed1; i <= LEDs::RightEyeRed8; i++)
294 {
296 changeLedColour(led, target_colour_or_numOfEars);
297 }
298 break;
299 }
300 case LEye:
301 {
302 for(int i = LEDs::LeftEyeRed1; i <= LEDs::LeftEyeRed8; i++)
303 {
305 changeLedColour(led, target_colour_or_numOfEars);
306 }
307 break;
308 }
309 case REye:
310 {
311 for(int i = LEDs::RightEyeRed1; i <= LEDs::RightEyeRed8; i++)
312 {
314 changeLedColour(led, target_colour_or_numOfEars);
315 }
316 break;
317 }
318 case Chest:
319 {
321 changeLedColour(led, target_colour_or_numOfEars);
322 break;
323 }
324 case Feet:
325 {
327 changeLedColour(led, target_colour_or_numOfEars);
329 changeLedColour(led2, target_colour_or_numOfEars);
330 break;
331 }
332 case LFoot:
333 {
335 changeLedColour(led, target_colour_or_numOfEars);
336 break;
337 }
338 case RFoot:
339 {
341 changeLedColour(led, target_colour_or_numOfEars);
342 break;
343 }
345 break;
346 }
347 }
348
354 {
355 //led[0] R, led[1] G, led[2] B
356 switch (colour)
357 {
358 case Off:
359 changeLed(led[0], false);
360 changeLed(led[1], false);
361 changeLed(led[2], false);
362 break;
363 case Red:
364 changeLed(led[0], true);
365 changeLed(led[1], false);
366 changeLed(led[2], false);
367 break;
368 case Green:
369 changeLed(led[0], false);
370 changeLed(led[1], true);
371 changeLed(led[2], false);
372 break;
373 case Blue:
374 changeLed(led[0], false);
375 changeLed(led[1], false);
376 changeLed(led[2], true);
377 break;
378 case Yellow:
379 changeLed(led[0], static_cast<u_int8_t>(100));
380 changeLed(led[1], static_cast<u_int8_t>(25));
381 changeLed(led[2], static_cast<u_int8_t>(0));
382 break;
383 case White:
384 changeLed(led[0], true);
385 changeLed(led[1], true);
386 changeLed(led[2], true);
387 break;
389 break;
390 }
391 }
392
397 void changeLed(LEDs::LEDCode led, bool state)
398 {
399 changeLed(led, state ? static_cast<u_int8_t>(100) : static_cast<u_int8_t>(0));
400 }
401
406 void changeLed(LEDs::LEDCode led, u_int8_t level) //level == percentage, 100 == MAX
407 {
408 _leds[led] = level;
409 }
410 };
411}
412
413#endif //SENSORSLedsSensors_DEFINED
Class for changing the LEDs on a robot, designed for Nao but is fairly generic.
void changeLed(LEDs::LEDCode led, u_int8_t level)
Set the intensity value for an individual LED.
void changeLedColour(LEDs::LEDCode led[3], LEDColour colour)
Colour mixer for RGB LEDs.
void changeLed(LEDs::LEDCode led, bool state)
Turn on or off an individual LED.
SENSORSLedsSensors()
Constructor, sets all LED values to off.
void LEDsGroupChange(LEDGroups target_group, LEDColour target_colour_or_numOfEars)
Allows changes to be made to a group of LEDs.
#define u_int8_t
/file APM_Interface.h
@ Ears
Number of leds to turn on is the value.
@ REar
Number of leds to turn on is the value
@ Eyes
All others have the desired colour as the passed value to LEDsGroupChange.
@ LEar
Number of leds to turn on is the value.
@ AllLEDs
Only off is supported regardless of what is passed in.
LEDColour
Predefined colour values, feel free to add more, just implement them in changeLedColour.
@ NUMBER_OF_LEDS_COLOURS
number of LEDColours
@ Green
turn leds green
@ White
turn leds white
@ Blue
turn leds blue
@ Red
turn leds red
@ Yellow
turn leds yellow
@ Off
turn off leds
LED sensors c struct.