Не дает покоя мне код, вернее, типы переменных в нем.
Штудируя скудную относительно z-19 информацию в сети, вижу, что в русскоязычном секторе все крутится по сути вокруг одной и той же статьи, которую растаскивают на цитаты и принимают за эталон. Однако, встречал несколько раз комментарии, дескать, тип переменных не тот!
Вот кусок "оригинала":
int responseHigh = (int) response[2];
int responseLow = (int) response[3];
Встречается еще одна вариация, тоже активно кочующая по сети:
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
Бывалые ухмыльнутся: "И что?.."
А мне вот не понятно, зачем байт, получаемый в ответе от датчика, помещать в переменную типа int или unsigned int? Не достаточно ли типа byte?
И еще. Какой же тип необходим и достаточен для переменных responseHigh и responseLow?
Интерес не праздный - хочу сам разобраться, да и блок довести до состояния, достойного помещения в раздел пользовательских блоков.
Понимаю, что и так сойдет, но хочу понять правильный подход.
И, что самое главное, два, казалось бы одинаковых блока выдают разные результаты.
Я поместил датчик в герметичную банку. Мои блоки, что сейчас допиливаю
MH-Z19_UART3_(CODE)
MH-Z19_UART3_2.0_(CODE)
выдают 995ppm, а ранее выкладывавшийся здесь
CO2UART_(CODE)
показывает 740ppm.
При этом датчик физически от питания не отрывался и, соответственно, не калибровался, только обновлялся скетч.
Куда копать? Кому верить?
Может это (unsigned char) / (char) response[9]? Меняю в своем блоке один тип на другой и получаю разные значения, отличающиеся почти в полтора раза.
Решил посмотреть, что присылает в ответе датчик в зависимости от типа переменной response, и оказалось, что типы unsigned char и byte возвращают вполне адекватные значения, а char - абракадабру:
При этом тип переменных responseHigh, responseLow и response[2] вообще ни на что не влияют.
Прошу программистов оценить, что здесь не так и как должно быть.
Спасибо!