Search models, users, collections, and posts

PC status bar CPU, GPU monitor

IP Report

Print Profile(1)

All
P1S
A1
P1P
X1E
H2D
X1
X1 Carbon
H2D Pro
H2S
P2S
H2C
X2D
A2L

0.16mm layer, 4 walls, 25% infill
0.16mm layer, 4 walls, 25% infill
Designer
3.9 h
1 plate

Open in Bambu Studio
Boost
28
54
1
3
9
2
Released 

Description

Simply status bar under monitor.

use Arduino Nano, TCA9548A I2C multiplexer, LED 1306   128x32 displays.

 

i created simply app for collect data from PC - ex library  ( https://github.com/LibreHardwareMonitor/LibreHardwareMonitor )  

 

download from *.zip archive or  ( https://github.com/pvladik/PCMonitorBar )

 

Created with AI assist and created in VB.NET ( sorry :-D )

 

ARduino code in archive. 

Use some I2C scanner and  TCA9548A test for detect right channel. 

 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_ADDR 0x3C
#define TCA_ADDR 0x70

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);

String incomingData = "";

// Vybere kanál 1–2 na multiplexeru (TCA9548A)
void tcaSelect(uint8_t channel) {
 if (channel > 7) return;
 Wire.beginTransmission(TCA_ADDR);
 Wire.write(1 << channel);
 Wire.endTransmission();
}

void setup() {
 Serial.begin(9600);
 Wire.begin();
 Wire.setClock(400000);

 // Inicializuj displeje 2 a 3 (kanály 1 a 2)
 for (uint8_t i = 1; i <= 2; i++) {
   tcaSelect(i);
   if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
     Serial.print("Displej na kanálu "); Serial.print(i); Serial.println(" nenalezen.");
   } else {
     display.clearDisplay();
     display.setTextSize(2);
     display.setTextColor(SSD1306_WHITE);
     display.setCursor(0, 10);
     display.print("D");
     display.print(i + 1); // Displej 2 a 3
     display.display();
   }
 }
}

void drawTemperature(String text) {
 display.clearDisplay();
 display.setTextSize(4);
 display.setTextColor(SSD1306_WHITE);
 display.setCursor(0, 0);

 // Najdi pozici "oC" nebo "°C" a vykresli ručně
 int pos = text.indexOf("oC");
 if (pos == -1) pos = text.indexOf("°C");

 if (pos != -1) {
   String number = text.substring(0, pos); // např. "23"
   display.print(number);

   // Získej aktuální pozici kurzoru po čísle
   int16_t x = display.getCursorX();
   int16_t y = display.getCursorY();

   // Nakresli malý kruh jako znak °
   display.fillCircle(x + 2, y + 4, 4, SSD1306_WHITE);

   // Posuň kurzor a vypiš "C"
   display.setCursor(x + 10, y);
   display.print("C");
 } else {
   // Pokud není °C v textu, vypiš vše
   display.print(text);
 }

 display.display();
}

void loop() {
 while (Serial.available() > 0) {
   char c = Serial.read();
   if (c == '\n') {
     // Rozdělení vstupu podle středníků
     String parts[2] = {"", ""};
     int index = 0;
     int start = 0;
     for (int i = 0; i <= incomingData.length() && index < 2; i++) {
       if (incomingData[i] == ';' || i == incomingData.length()) {
         parts[index++] = incomingData.substring(start, i);
         start = i + 1;
       }
     }

     // Displej 2 (kanál 1)
     tcaSelect(1);
     drawTemperature(parts[0]);

     // Displej 3 (kanál 2)
     tcaSelect(2);
     drawTemperature(parts[1]);

     incomingData = "";
   } else {
     incomingData += c;
   }
 }
}

 

 

 

In source win.app

Run as admin (collect data from sensors)-

connect with serial   port (USB)  COMx

in list button write name from HardwareLibraryMonitor for right send data to Arduino. not all works fine, but ….

 

 

 

 

 

 

 

 

 

Comment & Rating (1)

(0/1000)