Hallo mic,
es gibt beim RP6 6 Status LEDs.
Die heissen SL1 bis SL6 was eine Abkürzung für StatusLED1 bis StatusLED6 ist.
Das ist mit SL1 bis 6 auf dem Mainboard beschriftet, würde ich daher eigentlich ungern ändern.
Man könnte dann viel einfacher Bitmanipulationen im Bitfeld machen wenn die LED-Namen mit 0 starten.
Hier verstehe ich nicht ganz was Du mir eigentlich sagen willst?
Was hat der Name einer LED mit Bitmanipulationen zu tun?
Die LEDs heissen einfach so! Habe auch noch nirgendwo eine LED0 gesehen
Es fehlt auch eine getLEDS()-Funktion.
Könnte man noch hinzufügen - ja. Braucht man aber nicht unbedingt - wenn dann würde ein Makro reichen.
Über diese Union (aus RP6RobotBaseLib.h):
Code:
union {
uint8_t byte;
struct {
unsigned LEDsR:3;
unsigned LEDsL:3;
unsigned reserved:2;
};
struct {
unsigned LED1:1;
unsigned LED2:1;
unsigned LED3:1;
unsigned LED4:1;
unsigned LED5:1;
unsigned LED6:1;
unsigned reserved1:1;
unsigned reserved2:1;
};
} statusLEDs;
kannst Du einfach auf das Status LEDs byte und die einzelnen LED Bits zugreifen.
Wird in der Anleitung auch beschrieben wie das geht.
(Schreiben zumindest - lesen ist aber nicht viel anders)
Du kannst direkt die Variable "statusLEDs.byte" verwenden.
Oder statusLEDs.LED1 bis 6
Hier ein Auszug aus einem Beispielprogramm:
Code:
if(obstacle_left && obstacle_right) // Obstacle in the middle?
statusLEDs.byte = 0b100100;
else
statusLEDs.byte = 0b000000;
statusLEDs.LED5 = obstacle_left;
statusLEDs.LED4 = (!obstacle_left); // Inverted LED5!
statusLEDs.LED2 = obstacle_right;
statusLEDs.LED1 = (!obstacle_right); // Inverted LED2!
// Update the LED values:
updateStatusLEDs();
-------
Die beiden reservierten Bits sind da eigentlich nur um den Rest vom Byte auch noch bitweise zugänglich zu machen. Brauchst Du abernicht. Mache ich einfach immer so um zu kennzeichnen das da noch Bits frei sind in dem Byte...
MfG,
SlyD
Lesezeichen