C语言 如何在OLED显示屏上显示数值,而不会在发送连续数值时 Flink 整个文本?

pokxtpni  于 6个月前  发布在  Flink
关注(0)|答案(2)|浏览(69)

我尝试使用STM32微控制器显示从NTC温度传感器读取的值,并将其写入OLED显示器。然而,由于我不断发送值,整个文本和值一直 Flink ,而不仅仅是值。我只希望更新的值 Flink ,而支持文本(如“Temperature NTC1:“)不 Flink 。
下面是我在while循环中尝试的代码,我使用了这个网站上的显示库:https://controllerstech.com/oled-display-using-i2c-stm32/

char tempStr[32];  ///16
                            SSD1306_Init (); // initialize the display
                        SSD1306_Clear();  // Clear the screen
                        SSD1306_GotoXY(10, 10);  // Adjust Y position for the first temperature value
                    snprintf(tempStr, sizeof(tempStr),"Temp NTC1: %.2f °C" , temperature_ntc1);  // Format NTC1 temperature value to string and store in tempStr array
                    SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_WHITE);    //Print/ Display NTC1 temperature
                    SSD1306_GotoXY(10, 30);  //Adjust the Y position for the second temperature value
                    snprintf(tempStr, sizeof(tempStr),"Temp NTC2: %.2f °C" , temperature_ntc2); //Format NTC2 temperature
                    SSD1306_Puts(tempStr, &Font_7x10, SSD1306_COLOR_WHITE); //Print/ Display NTC2 temperature
                    SSD1306_UpdateScreen(); //Update the display by sending buffer data to controller
                    HAL_Delay(5000);

字符串
我试着在while循环(下面给出的代码)之外将这个特定的字符串作为静态文本,但是当发送新值时,整个文本仍然会 Flink 。
我真正想要的是“Temp NTC1:and Temp NTC2:“保持静态,当更新新值时,阅读值保持每秒 Flink 。

char staticText1[] = "Temp NTC1: ";
char staticText2[] = "Temp NTC2: ";
char tempStr1[32];
char tempStr2[32];

SSD1306_Init();   // Initialize OLED

while (1)
{
    // .temperature calculation code for NTC1 ...

    // Format NTC1 temperature value
    snprintf(tempStr1, sizeof(tempStr1), "%.2f °C", temperature_ntc1);

    // ... temperature calculation code for NTC2 ...

    // Format NTC2 temperature value
    snprintf(tempStr2, sizeof(tempStr2), "%.2f °C", temperature_ntc2);

    SSD1306_Clear();  // Clear the entire screen

    // Display static text for NTC1
    SSD1306_GotoXY(10, 10);
    SSD1306_Puts(staticText1, &Font_7x10, SSD1306_COLOR_WHITE);

    // Display NTC1 temperature value
    SSD1306_GotoXY(10 + strlen(staticText1) * 7, 10);
    SSD1306_Puts(tempStr1, &Font_7x10, SSD1306_COLOR_WHITE);

    // Display static text for NTC2
    SSD1306_GotoXY(10, 30);
    SSD1306_Puts(staticText2, &Font_7x10, SSD1306_COLOR_WHITE);

    // Display NTC2 temperature value
    SSD1306_GotoXY(10 + strlen(staticText2) * 7, 30);
    SSD1306_Puts(tempStr2, &Font_7x10, SSD1306_COLOR_WHITE);

    SSD1306_UpdateScreen();

    HAL_Delay(1000);  // Update the values every second
}

goucqfw6

goucqfw61#

查看SSD 1306库的源代码(为了方便起见,在本Gist中复制),SSD1306_Clear实现为

void SSD1306_Clear (void)
{
    SSD1306_Fill (0);
    SSD1306_UpdateScreen();
}

字符串
但是,您不希望立即将内部(现在已清除)缓冲区更新到屏幕(这会导致 Flink )。
只需将SSD1306_Clear();调用替换为SSD1306_Fill(0);即可。

zu0ti5jz

zu0ti5jz2#

删除此

SSD1306_Clear();  // Clear the entire screen

字符串
从循环中;把它放在循环之前。

相关问题