Edit:
Вы не можете сжимать данные без потери информации в этом случае. Поскольку ваш диапазон данных от АЦП составляет от 0x000 до 0xFFF, вы не можете идеально представлять данные без информации/точности, потерянной в байтах uint8, диапазон которых находится только от 0x00 до 0xFF
Но вы все еще можете отображать данные с точность потеряна. Например:
uint8_t Test2 = (unsigned)(Test >> 4);
заставит вас карту каждый 16 диапазона в одно значение:
0-15 -> 0
16-31 -> 1
32-47 -> 2
//and so on
Поскольку у вас есть только 8 светодиодов в любом случае, вы могли бы использовать Uint8 байты для управления светодиодом - хоть ты потеряет точность реальной стоимости, но вы все еще в состоянии представить диапазон стоимости (за единицу 16) правильно с 8 светодиодов (так как вы только есть 8 светодиодов в любом случае)
Оригинал:
Случай весьма вероятно, причина переполнения, когда вы приводите больший размер типа uint16 данных меньшего размера uint8:
uint16_t Test = 0x565;
uint8_t Test2 = (uint8_t)Test; //Test2 value is only 0x65, 0x500 is missing
Отливка вызывает наиболее существенное значение в байтах (0x500) быть усеченным.
Какой тип "16uint" и "8uint"? В тексте используются разные типы. Что вы имеете в виду с «не работает хорошо»? Зачем? В каком смысле? – Olaf
Вы не можете получить кварту в банкноты пинты. –
Из-за переполнения? Это очень вероятно. – Ian