...danke für die Idee..und, schon getested...?![]()
...danke für die Idee..und, schon getested...?![]()
Nein, ich habe das von Hand gerechnet. Du hattest ja nur auf dem Rückweg Probleme, mit den Berechnungen, daher denke ich, dass es was mit dem 8 Bit-Gedöhns zu tun hat. Ich habe die Rechnung genau aufgeschlüsselt. Kann man nachvollziehen und überprüfen.
Ich habe die Berechnung gerade einmal in einem Excel Blatt angelegt um es verständlich zu machen
https://puu.sh/BsLSg/6fe9cf4a10.png
ich liefere später noch etwas code nach, wenn mein kopf sich von dem krampf auf arbeit erholt hat XD
ich sehe im moment nur miraculi vor augen
man kann den leichten farbunterschied durch die skallierung von 5 bzw. 6 bit doch besser erkennen als mir lieb ist XD
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
HaWe, soll das auf Arduino laufen?
Nächstes mal komme ich vorbei und haue Dich! Schreibt der Kerl "...bevor du einen falschen Lösungsweg postest". Tse, tse, tse!
Was hältst Du denn von dieser Ausgabe mit Deinem Programm? Sieht das besser aus? :
Code:Hauptprogramm vor Aufruf: col16=0 r=255 g=102 b=78 Hauptprogramm nach rgb zu col16-Berechnung (rgb gelöscht): col16=64297 r=0 g=0 b=0 Unterprogramm color16 zu RGB: color16=64297 R=248 G=100 B=72 Hauptprogramm nach col16 zu rgb: col16=64297 r=248 g=100 b=72
Geändert von Moppi (10.09.2018 um 17:54 Uhr)
da bin ich jetzt gespantn (ich habs noch nicht hingekriegt, evtl was falsch verstanden)
Ich habe doch geschrieben, wo ich denke, dass das Problem liegt. Dass Du die Berechnung auf 8 Bit erzwingst.
mach bitte so:
Code:void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) { R = (color16 / 2048)*8; ; G = (color16 & 2016)/8;; B = (color16 & 31)*8; Serial.println(""); Serial.println("Unterprogramm color16 zu RGB:"); Serial.println( (String)"color16="+(String)color16); Serial.println( (String)"R="+(String)R); Serial.println( (String)"G="+(String)G); Serial.println( (String)"B="+(String)B); }
Ich hoffe, dass es jetzt besser ist!
hatte ich das nicht gemacht?
R = (uint8_t)(color16 / 2048 )*8; ;
G = (uint8_t)(color16 & 2016)/8;;
B = (uint8_t)(color16 & 31)*8;
ach so, du meinst ich soll das nicht machen?
Das wäre nicht korrekt, denn es sind ja uint8_t Zahlen, die zurückgegeben werden sollen.
Probier doch mal bitte selber!
Ich hatte das hier schon geschrieben (Beirag #20): https://www.roboternetz.de/community...l=1#post646541
Ich denke, er führt die Berechnung mit 8 Bit aus.Du brauchst aber 16 Bit während der Berechnung, weil zumindest Dein Farbwert color16 ja 16 Bit umfasst.Code:so: (uint8_t)(color16 / 2048 )*8;
Du müsstest hinterher eine Umwandlung vornehmenAber das funktioniert nicht!Code:(uint8_t)R = (color16 / 2048 )*8;
Deshalb habe ich jetzt das probiert, da gibt es kein Gemecker:Code:void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) { R = (color16 / 2048)*8; ; G = (color16 & 2016)/8;; B = (color16 & 31)*8; R = (uint8_t)R; G = (uint8_t)G; B = (uint8_t)B; Serial.println(""); Serial.println("Unterprogramm color16 zu RGB:"); Serial.println( (String)"color16="+(String)color16); Serial.println( (String)"R="+(String)R); Serial.println( (String)"G="+(String)G); Serial.println( (String)"B="+(String)B); }
Geändert von Moppi (10.09.2018 um 18:22 Uhr)
Lesezeichen