Im Übrigen war es die falsche Schreibweise, die zu den merkwürdigen Ergebnissen führte:
Code:
R = (uint8_t)(color16 / 2048)*8; ;
G = (uint8_t)(color16 & 2016)/8;;
B = (uint8_t)(color16 & 31)*8;
was immer die Schreibweise (uint8_t) bewirken sollte. Hier hast Du offenbar uint8_t nur auf die Folgeausdrücke angewandt. Also:
Code:
uint8_t(color16 & 2016)
und das dann durch 8 dividiert. Du stampfst auf 8 Bit ein (obwohl Du an der Stelle noch 16 Bit brauchst - eigentlich nur 11). Richtig wäre die Schreibweise und Funktion, die Du wolltest, so:
Code:
R = uint8_t((color16 / 2048)*8);
G = uint8_t((color16 & 2016)/8);
B = uint8_t((color16 & 31)*8);
Allerdings habe ich woanders gelesen, dass man statt uint8_t() lieber byte() verwenden soll. Wäre der bessere Stil (kann man sehen wie man möchte):
"An unsigned char data type that occupies 1 byte of memory. It is the same as the byte datatype. The unsigned char datatype encodes numbers from 0 to 255. For consistency of Arduino programming style, the byte data type is to be preferred."
Arduino: Difference in “Byte” VS “uint8_t” VS “unsigned char”
Lesezeichen