как разбить число на составлющие

dimontau
Offline
Зарегистрирован: 17.02.2016

Делаю управление телевизором с помощью Алисы.

От алисы по mqtt приходит номер канала, например 17 или 123

в есп прописаны коды для каждой цифры от 0 до 9

например

1 это AB12C6

2 это 3CAA62

3 это 45FF11

Не могу сообразить  как сделать, чтоб есп отправляла последовательно коды согласно цифрам в номере канала.

Буду очень благодарен за помощь.

b707
Offline
Зарегистрирован: 26.05.2017

не очень понял... у вас есть число, цифры и коды пульта... поясните точнее, что и в какую сторону надо преобразовать

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

X = 123;
Y = X / 100; // 1
X = X % 100; // 23
Y = X / 10; // 2
Y = X % 10; // 3

dimontau
Offline
Зарегистрирован: 17.02.2016

В есп прописаны коды  кнопок от пульта, от 0 до 9.

по mqtt приходит приходит номер канала, например 145 

есп должна отправить на  ик светодиод вместо 1, 4, 5 коды этих кнопок.

то есть она должна сначала разбить номер канала 145 на составляющие цифры 1, 4, 5

и отправить в место них коды кнопок

 

dimontau
Offline
Зарегистрирован: 17.02.2016

Рассматривал это вариант, не подходит. Так как номер канала может быть однозначным, двухзначным или трехзначным.

rkit
Offline
Зарегистрирован: 23.11.2016

dimontau пишет:

Рассматривал это вариант, не подходит. Так как номер канала может быть однозначным, двухзначным или трехзначным.

а подумать?

dimontau
Offline
Зарегистрирован: 17.02.2016

Спасибо что откликнулись

Смог разобраться сам. Вот, что у меня получилось

Может кому то понадобится

int numb = 230;//номер канала
int dlina;//длина массива соответствующая длине канала 
/*int key1 = strtol("FB2AD5", NULL, 16);
int key2 = strtol("FB6897", NULL, 16);
int key3 = strtol("FBA857", NULL, 16);
int key4 = strtol("FB0AF5", NULL, 16);
int key5 = strtol("FB48B7", NULL, 16);
int key6 = strtol("FB8877", NULL, 16);
int key7 = strtol("FB32CD", NULL, 16);
int key8 = strtol("FB708F", NULL, 16);
int key9 = strtol("FBB04F", NULL, 16);
int key0 = strtol("FB30CF", NULL, 16);
*/
//массив из кодов кнопок от 0 до 9 с переводом их в десятичное число
int key[] = {strtol("FB30CF", NULL, 16), strtol("FB2AD5", NULL, 16), strtol("FB6897", NULL, 16), strtol("FBA857", NULL, 16), strtol("FB0AF5", NULL, 16),
             strtol("FB48B7", NULL, 16), strtol("FB8877", NULL, 16), strtol("FB32CD", NULL, 16), strtol("FB708F", NULL, 16), strtol("FBB04F", NULL, 16)
            };
 
void setup() {
  Serial.begin(9600);
  // считаем кол-во цифр в номере канала
  String yourText = String (numb);
  int dlina = yourText.length();
  //Serial.println(dlina);
//массив из чисел составляющих номер канала ( задом на перед 0, 3, 2)
  int kanal[dlina];
  for (int i = 0; i < dlina; i++) {
    kanal[i] = numb % 10;
    Serial.println(kanal[i]);
 
    numb /= 10;
  }
  // переворачиваем массив из чисел номера канала в правильный порядок(2,3,0)
  int buf[dlina];
  for (int i = 0; i < dlina; i++) {
    buf[i] = kanal[i];
  }
 
  for (int i = 0; i < dlina; i++) {
    kanal[i] = buf[dlina - 1 - i];
  }
//отправляем в ик порт коды соответствующие цифрам в номере канала)
  for (int i = 0; i < dlina; i++) {
    Serial.println(kanal[i]);
    Serial.println(key[kanal[i]], HEX);
    delay (500);
 
  }
 
}
 
void loop() {
 
 
 
}
sadman41
Offline
Зарегистрирован: 19.10.2016

strtol("FB30CF", NULL, 16) -> 0xFB30CF 

b707
Offline
Зарегистрирован: 26.05.2017

dimontau пишет:

Смог разобраться сам. Вот, что у меня получилось

хорошо что разобрались, хотя это ровно то же самое, что вам предложили в ответе #2. не замечаете?