A Windows system tray application that sends CPU and memory utilization to a custom Arduino-based analog meter device.
PC Meter consists of two parts:
- Windows app (
PcMeter/) — a .NET WPF tray application that reads CPU% and memory% every 500ms and sends the values to the meter device over a serial port. - Arduino firmware (
arduino/) — runs on an Arduino Leonardo, receives the data over serial, and drives two analog panel meters with green/red LEDs.
The meter hardware uses analog panel meters (VU-style gauges) driven by PWM output from the Arduino. Each meter has a green LED that switches to red when utilization exceeds 80%.
- Windows 10/11
- .NET 10 runtime (or SDK to build)
- Arduino-based PC Meter device connected via USB (virtual COM port)
dotnet build PcMeter/PcMeter.csproj
dotnet run --project PcMeter/PcMeter.csproj
Or open PcMeter/PcMeter.csproj in Visual Studio 2022.
The app runs as a system tray icon. Right-click the tray icon to:
- View live CPU% and Memory%
- Connect / disconnect the serial port
- Open Settings to choose the COM port
- View the About dialog
- Exit the application
On first run, go to Settings and select the COM port your Arduino is connected to. The setting is saved to %APPDATA%\PcMeter\settings.json and restored on next launch.
The app shows a balloon tip when it successfully connects to the device. If the device is unplugged while running, the app detects the loss within 500ms, updates the tray menu, and automatically reconnects once the device is plugged back in — no manual action required.
| Setting | Default | Description |
|---|---|---|
| COM Port | COM20 | Serial port the Arduino is connected to |
- Arduino Leonardo (or compatible)
- Arduino IDE 1.8+ or 2.x
| Pin | Function |
|---|---|
| 11 | CPU meter (PWM) |
| 10 | Memory meter (PWM) |
| 4 | CPU green LED |
| 5 | CPU red LED |
| 2 | Memory green LED |
| 3 | Memory red LED |
- Meters update every 100ms, smoothed using a rolling average of 20 readings for fluid needle movement
- LEDs are green below 80% utilization and switch to red at or above 80%
- On startup, both meters sweep to 100% for 2 seconds as a self-test
- If no serial data is received for 2 seconds, a "screensaver" mode activates: needles sweep back and forth until data resumes
The Windows app sends CR-terminated messages at 9600 baud:
C{0-100}\r → CPU percentage
M{0-100}\r → Memory percentage
Both are sent together every 500ms: C42\rM67\r
PcMeter/ .NET WPF tray application (current)
PcMeter (legacy)/ .NET Framework 4.8 WinForms app (legacy)
arduino/ Arduino firmware
drawings/ Meter face artwork (SVG + PNG)
I wrote the original version of this program several years ago in .NET Framework as a Winforms application. In 2026 I finally upgraded it to modern .NET and switched to WPF. I did this using Claude Code to automate much of the work of upgrading the application and then troubleshooting it. It's a little messy "under the hood" but it works and without the AI assistance I probably would have never got around to updating it.
MIT License — Copyright © 2018-2026 Scott W. Vincent
