diff --git a/OLED.cpp b/OLED.cpp index 19ca09f..dfb133c 100644 --- a/OLED.cpp +++ b/OLED.cpp @@ -251,6 +251,22 @@ bool COLED::open() return true; } +float COLED::readTemperature(const std::string& filePath) +{ + std::ifstream file(filePath); + if (!file.is_open()) { + std::cerr << "Error: Could not open file " << filePath << std::endl; + return -1.0F; // Return a negative value to indicate that CPU temp is not available + } + + float temperature; + file >> temperature; + + file.close(); + + return temperature / 1000.0F; // The temperature is stored in millidegrees Celsius, so a bit of conversion +} + void COLED::setIdleInt() { m_mode = MODE_IDLE; @@ -292,14 +308,14 @@ void COLED::setIdleInt() if (configFile.is_open()) { std::string line; while (std::getline(configFile, line)) { - if (line.find("ssid=") != std::string::npos) { - std::istringstream iss(line); - std::string key, value; - if (std::getline(iss, key, '=') && std::getline(iss, value)) { - ssid = value; - break; - } - } + if (line.find("ssid=") != std::string::npos) { + std::istringstream iss(line); + std::string key, value; + if (std::getline(iss, key, '=') && std::getline(iss, value)) { + ssid = value; + break; + } + } } configFile.close(); } else { @@ -319,11 +335,21 @@ void COLED::setIdleInt() } } else { // Connected to network - no Auto-AP mode; normal display layout... if (m_displayLogoScreensaver) { - m_display.setCursor(0,OLED_LINE3); + m_display.setCursor(0,OLED_LINE2); m_display.setTextSize(1); m_display.print(" -IDLE-"); - m_display.setCursor(0, OLED_LINE5); + m_display.setCursor(0, OLED_LINE4); m_display.printf("%s", m_ipaddress.c_str()); + + // Display temperature + float tempCelsius = readTemperature("/sys/class/thermal/thermal_zone0/temp"); + if (tempCelsius >= 0.0F) { + // Convert to Fahrenheit + float tempFahrenheit = (tempCelsius * 9.0F / 5.0F) + 32.0F; + m_display.setCursor(0, OLED_LINE5); + m_display.setTextSize(1); + m_display.printf("Temp: %.0fF / %.0fC ", tempFahrenheit, tempCelsius); + } } } m_display.display(); @@ -744,7 +770,7 @@ void COLED::writeCWInt() m_display.clearDisplay(); m_display.setCursor(0,30); - m_display.setTextSize(3); + m_display.setTextSize(2); m_display.print("CW ID TX"); m_display.setTextSize(1); @@ -764,6 +790,16 @@ void COLED::clearCWInt() m_display.setCursor(0,OLED_LINE3); m_display.printf("%s",m_ipaddress.c_str()); + // Display temperature + float tempCelsius = readTemperature("/sys/class/thermal/thermal_zone0/temp"); + if (tempCelsius >= 0.0F) { + // Convert to Fahrenheit + float tempFahrenheit = (tempCelsius * 9.0F / 5.0F) + 32.0F; + m_display.setCursor(0, OLED_LINE5); + m_display.setTextSize(1); + m_display.printf("Temp: %.0fF / %.0fC ", tempFahrenheit, tempCelsius); + } + if (m_displayScroll) m_display.startscrolldiagleft(0x00,0x0f); m_display.display(); diff --git a/OLED.h b/OLED.h index 14723cb..55c3d51 100644 --- a/OLED.h +++ b/OLED.h @@ -34,6 +34,8 @@ #include #include #include +#include // for cpu temp value extraction +#include // for cpu temp value rounding #include "ArduiPi_OLED_lib.h" #include "Adafruit_GFX.h" @@ -97,6 +99,8 @@ private: std::string m_ipaddress; ArduiPi_OLED m_display; + float readTemperature(const std::string& filePath); + void OLED_statusbar(); };