Изменение цвета светодиода удаленно (mqtt)

oleg911
Offline
Зарегистрирован: 10.01.2018

Добрый вечер, хочу реализовать следующее, задавая на смартфоне цвет из палитры, чтобы светодиод светился тем же цветом. Как разбить на R , G , B из 0xFFFFFFFF я знаю, вернее получилость...

const long int redBits=0xFF000000;
const long int greenBits=0x00FF0000;
const long int blueBits=0x0000FF00;

unsigned long int rgb=0xFF7F3300;
unsigned char red=(rgb&redBits)>>24;
unsigned char green=(rgb&greenBits)>>16;
unsigned char blue=(rgb&blueBits)>>8;

Serial.println(rgb);
Serial.println(red);
Serial.println(green);
Serial.println(blue);

Вопрос в следующем, у меня из подписки в mqtt выходит значения типа string. Например, я задаю цвет в смартфоне он у меня выходит в ввиде FF7F3300. Как мне его привести в unsigned long int 0xFF7F3300...? Я новичек, в интернете искал, но не нашел очевидного ответа.

void callback(char* topic, byte* payload, unsigned int length) 
{
 Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  String payloadstr;
  for (int i = 1; i < length; i++) 
  {
    Serial.print((char)payload[i]);
    color+=(char)payload[i];
  }

 

sadman41
Offline
Зарегистрирован: 19.10.2016

strtoul() - http://cppstudio.com/post/828/

Только вам нужно String в функцию передавать как *char или сгружать с Serial прямо в char[]

oleg911
Offline
Зарегистрирован: 10.01.2018

sadman41 пишет:

Только вам нужно String в функцию передавать как *char или сгружать с Serial прямо в char[]

Я не сильно опытный, можете пример показать?

sadman41
Offline
Зарегистрирован: 19.10.2016

А я сильно ленивый, чтобы за кого-то код писать.

Вот отправная точка, в третьем же пункте ("String to unsigned long conversion") разбирается прямо таки схожий случай: https://www.google.ru/search?q=arduino+string+strtoul&oq=arduino+string+strtoul