вам нужно выучить C (на самом деле C ++, так как Arduino запрограммирован на C ++).
strtol преобразует строки в числа.
строка в C - это массив элементов char, заканчивающихся на ноль (не '0'
, а 0
).Таким образом, «0x225» - это массив {'0', 'x', '2', '2', '5', 0}
'2'
, а не число 2
.Это ASCII-представление char '2' с десятичным числом 50.
buff[0] = '0';
buff[1] = 'x';
buff[2] = '2';
buff[3] = '2';
buff[4] = '5';
buff[5] = 0;
val = strtol(buff, NULL, 16);
buff[0] = 48;
buff[1] = 120;
buff[2] = 50;
buff[3] = 50;
buff[4] = 53;
buff[5] = 0;
val = strtol(buff, NULL, 16);
В вашем коде много других проблем.Вам нужно понять, что такое 25 и что такое 0x25 (они не равны).Вы должны начать с книги и компилятора ПК и изучать язык из самых простых вещей.