как я могу отобразить значения uint8 на oled-дисплее - PullRequest
0 голосов
/ 25 июня 2019

Я могу скомпилировать код, но ничего не отображается

int main(void){
    lcd_init(LCD_DISP_ON);
    lcd_clrscr();
    lcd_set_contrast(0x00);
    lcd_gotoxy(0,3);
    lcd_puts((char*)&temperature);
    lcd_gotoxy(1,2);
    lcd_puts((char*)&humidity); 
    lcd_puts("Hello World");
}

1 Ответ

0 голосов
/ 28 июня 2019

Вам нужно сначала преобразовать числовые данные (например, uint8_t) в строку , прежде чем вы сможете их отобразить.

Например, значение uint8_t 123 составляет один байт, но для его отображения его необходимо преобразовать в трехбайтовую / байтную строку 1, 2, 3, т. Е. Три char с 0x31, 0x32, 0x33.

Для этого вы можете использовать функцию itoa() ("integer to ascii"), чтобы скопировать целочисленное значение в предоставленный вами массив char. Обратите внимание, что массив char должен быть достаточно большим, чтобы вместить любую возможную числовую строку, т. Е. Если ваши значения uint8_t (диапазон 0 ... 255), массив должен быть длиной не менее трех символов.

Чтобы массив символов обрабатывался как строка в C (-libraries), вам нужен дополнительный char для хранения ограничителя строки '\0'.

* +1025 * Пример:
char tempStr[3+1]; // One extra for terminator

// Clear tempStr and make sure there's always a string-terminating `\0` at the end
for ( uint8_t i = 0; i < sizeof(tempStr); i++ ) {
  tempStr[i] = '\0';
}

itoa(temperature, tempStr, 10);

// Now we have the string representation of temperature in tempStr, followed by at least one '\0' to make it a valid string.
// For example:
//      1 --> [ '1', '\0', '\0', '\0' ]
//    255 --> [ '2', '5', '5', '\0' ] 
...