RGB в Hex в эскизах Arduino - PullRequest
       14

RGB в Hex в эскизах Arduino

2 голосов
/ 30 ноября 2011

У меня есть функция, которая принимает от 24 до 12 бит в шестнадцатеричном формате и печатает значение цвета на ЖК-дисплее.

Если пользователь вводит значения RGB, как я могу преобразовать RGB в одну 24-битную шестнадцатеричную строку?

Я нашел много алгоритмов Java и C ++ онлайн, но не могу показатьсячтобы сделать их совместимыми с Arduino.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Согласно http://arduino.cc/en/Serial/Print вы можете использовать:

Serial.print(78, HEX) gives "4E"

http://arduino.cc/en/Reference/HomePage также гласит:

Язык Arduino основан на C / C ++. Он связывается с AVR Libc и позволяет использовать любую из его функций; см. его руководство пользователя для деталей.

Таким образом, доступны все стандартные функции printf.

http://www.nongnu.org/avr-libc/user-manual

3 голосов
/ 30 ноября 2011

В последний раз, когда я посмотрел, у Arduino нет хорошего способа печати других форматов, например, с помощью printf (). Поэтому вам придется самостоятельно преобразовать в hex или найти существующую функцию, которая делает это, превращая реальные целые числа в представления шестнадцатеричных символов. Вот один из способов:

Я предполагаю, что "24 бит" - это значения RGB, и это 3 8-битные числа от 0 до 255, как обычно. В этом случае у вас будет две цифры шестнадцатеричного числа для каждого десятичного числа. Проиллюстрируем это R = 243.

Первая шестнадцатеричная "цифра" будет h1 = int(R/16), что составляет 15. Другой будет h2 = R - h1*16, что составляет 3.

Но эти "цифры" все еще являются десятичными числами. Так что имейте таблицу поиска в массиве, например, где индексом массива является десятичное число, а значением является шестнадцатеричный символ.

Так, например, у вас будет lookup[15] = 'F' и lookup[3] = '3'.

Просто распечатайте все эти цифры без пробелов, и все готово.

1 голос
/ 05 июня 2013
int r = 128;
int g = 0x99;
int b = 32;
long rgb = 0;
rgb = ((long)r << 16) | ((long)g << 8 ) | (long)b;
Serial.println("R:" + String(r) + " G:" + String(g) + " B:" + String(b));
Serial.println("Hex: 0x" + String(rgb, HEX));
...