From 8747d2cebddf0e6c37b3cb71c57261763daa22e3 Mon Sep 17 00:00:00 2001 From: Ronniie Date: Tue, 27 May 2025 19:11:05 -0400 Subject: [PATCH 1/6] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9bfd4c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Ronnie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 2d95ee1255f48e0820c3679cf50d6deb8ce2ddb4 Mon Sep 17 00:00:00 2001 From: Ronnie <30136547+Ronniie@users.noreply.github.com> Date: Tue, 27 May 2025 19:11:05 -0400 Subject: [PATCH 2/6] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9bfd4c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Ronnie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From c2824aeaa845f99cdf9d8e13da37595480b1bf7d Mon Sep 17 00:00:00 2001 From: Ronniie Date: Tue, 27 May 2025 19:12:16 -0400 Subject: [PATCH 3/6] Initial Commit --- README.md | 85 ++++++++++++++++++++++++++ ThermoMood_Display.ino | 132 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 README.md create mode 100644 ThermoMood_Display.ino diff --git a/README.md b/README.md new file mode 100644 index 0000000..24df533 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# 🌑️ ThermoMood Display + +**A circular mood visualizer based on skin temperature β€” perfect for your desk or cubicle.** +Touch the thermocouple, and the GC9A01A round display reveals a mood with color and snarky commentary. + +--- + +## πŸ“¦ Features + +- Displays Fahrenheit temperature at the bottom of a circular screen +- Mood is selected based on skin temperature ranges +- Background color changes dynamically with mood +- Funny, sarcastic, cubicle-safe mood labels +- Word-wrapped, auto-centered text +- Smooth average filtering to avoid noisy updates + +--- + +## πŸ› οΈ Hardware Requirements + +| Component | Details | +|----------|---------| +| **Microcontroller** | Arduino Nano ESP32 | +| **Display** | 1.28" Round TFT GC9A01A (240x240) | +| **Thermocouple** | Type K Thermocouple | +| **Converter Module** | MAX6675 Thermocouple Amplifier | +| **Wiring** | 4-Wire SPI (Display) + 3-Wire SPI (MAX6675) | + +--- + +## πŸ“· Pinout (Example Wiring) + +| Signal | Arduino Nano ESP32 | Module | +|--------|--------------------|--------| +| **SO** (Thermocouple) | `D4` | MAX6675 SO | +| **CS** (Thermocouple) | `D5` | MAX6675 CS | +| **SCK** | `D6` | MAX6675 SCK | +| **TFT DC** | `D7` | GC9A01A DC | +| **TFT CS** | `D10` | GC9A01A CS | +| **TFT RST** | `D8` | GC9A01A RST | +| **TFT SCK/MOSI** | Default SPI | GC9A01A SCK/MOSI | + +--- + +## 🎨 Mood Mapping (Temperature β†’ Mood) + +| Temp Range (Β°F) | Example Moods | +|-----------------|----------------| +| `< 85` | "Are you even alive?", "CRASHING OUT" | +| `85–87` | "Quietly spiraling", "Flatline on enthusiasm" | +| `88–89` | "Classic cubicle-core", "Emotionally beige" | +| `90–91` | "Deadline panic", "Running on fumes" | +| `92–93` | "Unraveling", "Caffeinated and dangerous" | +| `94–95` | "TIME FOR YOU TO GO HOME", "Corporate martyr detected" | +| `> 96` | "Go touch grass", "Return to sender (overheated)" | + +--- + +## πŸ’» Libraries Required + +Install these via the Arduino Library Manager: + +- `Adafruit_GFX` +- `Adafruit_GC9A01A` +- `MAX6675` (Adafruit version recommended) + +--- + +## πŸš€ To Run + +1. Wire up your components as listed. +2. Upload `ThermoMood_Display.ino` using Arduino IDE (board: **Arduino Nano ESP32**). +3. Touch the thermocouple β€” your mood will appear! + +--- + +## 🀝 Contributions Welcome + +Want to add emoji, animations, or finger detection? Submit a pull request or suggest ideas! + +--- + +## 🧠 License + +This project is open source under the MIT License. diff --git a/ThermoMood_Display.ino b/ThermoMood_Display.ino new file mode 100644 index 0000000..79242b3 --- /dev/null +++ b/ThermoMood_Display.ino @@ -0,0 +1,132 @@ +// ThermoMood Display Integration (Circular Layout, Mood-Centric) +// Uses MAX6675 thermocouple and GC9A01A round TFT to display temperature-based moods + +#include +#include +#include +#include + +// Thermocouple SPI pin definitions +#define SO_PIN D4 +#define CS_PIN D5 +#define SCK_PIN D6 +MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); + +// TFT display pin definitions +#define TFT_DC D7 +#define TFT_CS D10 +#define TFT_RST D8 +Adafruit_GC9A01A tft(TFT_CS, TFT_DC, TFT_RST); + +// Track last displayed stable temperature +float lastDisplayedTemp = -999.0; + +// Return background color based on mood content +uint16_t getMoodColor(const char* mood) { + if (strstr(mood, "alive") || strstr(mood, "Frozen")) return GC9A01A_NAVY; + if (strstr(mood, "spiraling") || strstr(mood, "low")) return GC9A01A_BLUE; + if (strstr(mood, "meh") || strstr(mood, "core")) return GC9A01A_DARKGREY; + if (strstr(mood, "deadline") || strstr(mood, "present")) return GC9A01A_ORANGE; + if (strstr(mood, "existential") || strstr(mood, "panic")) return GC9A01A_TEAL; + if (strstr(mood, "TIME FOR YOU") || strstr(mood, "martyr")) return GC9A01A_RED; + if (strstr(mood, "CRASHING OUT") || strstr(mood, "overheated")) return GC9A01A_MAROON; + return GC9A01A_PURPLE; +} + +// Choose mood text based on input temperature (Fahrenheit) +const char* getMood(float tempF) { + if (tempF < 85) { + const char* moods[] = {"Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT"}; return moods[random(0, 5)]; + } else if (tempF < 88) { + const char* moods[] = {"Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm"}; return moods[random(0, 5)]; + } else if (tempF < 90) { + const char* moods[] = {"Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time"}; return moods[random(0, 5)]; + } else if (tempF < 92) { + const char* moods[] = {"One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes"}; return moods[random(0, 5)]; + } else if (tempF < 94) { + const char* moods[] = {"Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja"}; return moods[random(0, 5)]; + } else if (tempF < 96) { + const char* moods[] = {"Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected"}; return moods[random(0, 5)]; + } else { + const char* moods[] = {"Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)"}; return moods[random(0, 5)]; + } +} + +void setup() { + Serial.begin(9600); // Start serial for debugging + delay(500); + tft.begin(); // Initialize TFT display + tft.setRotation(0); + tft.fillScreen(GC9A01A_BLACK); // Start with black screen + randomSeed(analogRead(A0)); // Seed RNG for mood randomness +} + +void loop() { + static float lastStableTemp = -999; + static float tempSum = 0; + static int sampleCount = 0; + + float tempF = thermocouple.readFahrenheit(); // Read current temperature + tempSum += tempF; + sampleCount++; + + // Average temp every 10 readings to reduce noise + if (sampleCount >= 10) { + float avgTemp = tempSum / sampleCount; + tempSum = 0; + sampleCount = 0; + + // Only update display if temperature changes significantly + if (abs(avgTemp - lastStableTemp) >= 1.0) { + lastStableTemp = avgTemp; + const char* mood = getMood(avgTemp); + uint16_t moodColor = getMoodColor(mood); + + Serial.print("Temp: "); Serial.print(avgTemp); Serial.print(" F | Mood: "); Serial.println(mood); + + tft.fillScreen(moodColor); // Set background to mood color + tft.drawCircle(120, 120, 119, GC9A01A_BLACK); // Thin border ring + tft.drawCircle(120, 120, 118, GC9A01A_BLACK); + + // Draw mood message, word-wrapped in center + tft.setTextColor(GC9A01A_WHITE); + tft.setTextSize(2); + int y = 100; + char buffer[128]; + strncpy(buffer, mood, sizeof(buffer)); + buffer[sizeof(buffer) - 1] = '\0'; + char* line = strtok(buffer, " "); + String currentLine = ""; + + while (line != NULL) { + if (currentLine.length() + strlen(line) + 1 < 15) { + currentLine += line; + currentLine += " "; + } else { + int x = (240 - currentLine.length() * 12) / 2; + tft.setCursor(x, y); + tft.print(currentLine); + y += 20; + currentLine = String(line) + " "; + } + line = strtok(NULL, " "); + } + if (currentLine.length() > 0) { + int x = (240 - currentLine.length() * 12) / 2; + tft.setCursor(x, y); + tft.print(currentLine); + } + + // Draw temperature at bottom + tft.setTextColor(GC9A01A_WHITE); + tft.setTextSize(2); + char tempStr[10]; + sprintf(tempStr, "%d F", (int)avgTemp); + int tempWidth = strlen(tempStr) * 12; + int tempX = (240 - tempWidth) / 2; + tft.setCursor(tempX, 210); + tft.print(tempStr); + } + } + delay(500); // Sample delay +} From a14910c0d16c83c939fb08dc778252f30c3e14c0 Mon Sep 17 00:00:00 2001 From: Ronnie <30136547+Ronniie@users.noreply.github.com> Date: Tue, 27 May 2025 19:12:16 -0400 Subject: [PATCH 4/6] Initial Commit --- README.md | 85 ++++++++++++++++++++++++++ ThermoMood_Display.ino | 132 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 README.md create mode 100644 ThermoMood_Display.ino diff --git a/README.md b/README.md new file mode 100644 index 0000000..24df533 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# 🌑️ ThermoMood Display + +**A circular mood visualizer based on skin temperature β€” perfect for your desk or cubicle.** +Touch the thermocouple, and the GC9A01A round display reveals a mood with color and snarky commentary. + +--- + +## πŸ“¦ Features + +- Displays Fahrenheit temperature at the bottom of a circular screen +- Mood is selected based on skin temperature ranges +- Background color changes dynamically with mood +- Funny, sarcastic, cubicle-safe mood labels +- Word-wrapped, auto-centered text +- Smooth average filtering to avoid noisy updates + +--- + +## πŸ› οΈ Hardware Requirements + +| Component | Details | +|----------|---------| +| **Microcontroller** | Arduino Nano ESP32 | +| **Display** | 1.28" Round TFT GC9A01A (240x240) | +| **Thermocouple** | Type K Thermocouple | +| **Converter Module** | MAX6675 Thermocouple Amplifier | +| **Wiring** | 4-Wire SPI (Display) + 3-Wire SPI (MAX6675) | + +--- + +## πŸ“· Pinout (Example Wiring) + +| Signal | Arduino Nano ESP32 | Module | +|--------|--------------------|--------| +| **SO** (Thermocouple) | `D4` | MAX6675 SO | +| **CS** (Thermocouple) | `D5` | MAX6675 CS | +| **SCK** | `D6` | MAX6675 SCK | +| **TFT DC** | `D7` | GC9A01A DC | +| **TFT CS** | `D10` | GC9A01A CS | +| **TFT RST** | `D8` | GC9A01A RST | +| **TFT SCK/MOSI** | Default SPI | GC9A01A SCK/MOSI | + +--- + +## 🎨 Mood Mapping (Temperature β†’ Mood) + +| Temp Range (Β°F) | Example Moods | +|-----------------|----------------| +| `< 85` | "Are you even alive?", "CRASHING OUT" | +| `85–87` | "Quietly spiraling", "Flatline on enthusiasm" | +| `88–89` | "Classic cubicle-core", "Emotionally beige" | +| `90–91` | "Deadline panic", "Running on fumes" | +| `92–93` | "Unraveling", "Caffeinated and dangerous" | +| `94–95` | "TIME FOR YOU TO GO HOME", "Corporate martyr detected" | +| `> 96` | "Go touch grass", "Return to sender (overheated)" | + +--- + +## πŸ’» Libraries Required + +Install these via the Arduino Library Manager: + +- `Adafruit_GFX` +- `Adafruit_GC9A01A` +- `MAX6675` (Adafruit version recommended) + +--- + +## πŸš€ To Run + +1. Wire up your components as listed. +2. Upload `ThermoMood_Display.ino` using Arduino IDE (board: **Arduino Nano ESP32**). +3. Touch the thermocouple β€” your mood will appear! + +--- + +## 🀝 Contributions Welcome + +Want to add emoji, animations, or finger detection? Submit a pull request or suggest ideas! + +--- + +## 🧠 License + +This project is open source under the MIT License. diff --git a/ThermoMood_Display.ino b/ThermoMood_Display.ino new file mode 100644 index 0000000..79242b3 --- /dev/null +++ b/ThermoMood_Display.ino @@ -0,0 +1,132 @@ +// ThermoMood Display Integration (Circular Layout, Mood-Centric) +// Uses MAX6675 thermocouple and GC9A01A round TFT to display temperature-based moods + +#include +#include +#include +#include + +// Thermocouple SPI pin definitions +#define SO_PIN D4 +#define CS_PIN D5 +#define SCK_PIN D6 +MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); + +// TFT display pin definitions +#define TFT_DC D7 +#define TFT_CS D10 +#define TFT_RST D8 +Adafruit_GC9A01A tft(TFT_CS, TFT_DC, TFT_RST); + +// Track last displayed stable temperature +float lastDisplayedTemp = -999.0; + +// Return background color based on mood content +uint16_t getMoodColor(const char* mood) { + if (strstr(mood, "alive") || strstr(mood, "Frozen")) return GC9A01A_NAVY; + if (strstr(mood, "spiraling") || strstr(mood, "low")) return GC9A01A_BLUE; + if (strstr(mood, "meh") || strstr(mood, "core")) return GC9A01A_DARKGREY; + if (strstr(mood, "deadline") || strstr(mood, "present")) return GC9A01A_ORANGE; + if (strstr(mood, "existential") || strstr(mood, "panic")) return GC9A01A_TEAL; + if (strstr(mood, "TIME FOR YOU") || strstr(mood, "martyr")) return GC9A01A_RED; + if (strstr(mood, "CRASHING OUT") || strstr(mood, "overheated")) return GC9A01A_MAROON; + return GC9A01A_PURPLE; +} + +// Choose mood text based on input temperature (Fahrenheit) +const char* getMood(float tempF) { + if (tempF < 85) { + const char* moods[] = {"Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT"}; return moods[random(0, 5)]; + } else if (tempF < 88) { + const char* moods[] = {"Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm"}; return moods[random(0, 5)]; + } else if (tempF < 90) { + const char* moods[] = {"Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time"}; return moods[random(0, 5)]; + } else if (tempF < 92) { + const char* moods[] = {"One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes"}; return moods[random(0, 5)]; + } else if (tempF < 94) { + const char* moods[] = {"Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja"}; return moods[random(0, 5)]; + } else if (tempF < 96) { + const char* moods[] = {"Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected"}; return moods[random(0, 5)]; + } else { + const char* moods[] = {"Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)"}; return moods[random(0, 5)]; + } +} + +void setup() { + Serial.begin(9600); // Start serial for debugging + delay(500); + tft.begin(); // Initialize TFT display + tft.setRotation(0); + tft.fillScreen(GC9A01A_BLACK); // Start with black screen + randomSeed(analogRead(A0)); // Seed RNG for mood randomness +} + +void loop() { + static float lastStableTemp = -999; + static float tempSum = 0; + static int sampleCount = 0; + + float tempF = thermocouple.readFahrenheit(); // Read current temperature + tempSum += tempF; + sampleCount++; + + // Average temp every 10 readings to reduce noise + if (sampleCount >= 10) { + float avgTemp = tempSum / sampleCount; + tempSum = 0; + sampleCount = 0; + + // Only update display if temperature changes significantly + if (abs(avgTemp - lastStableTemp) >= 1.0) { + lastStableTemp = avgTemp; + const char* mood = getMood(avgTemp); + uint16_t moodColor = getMoodColor(mood); + + Serial.print("Temp: "); Serial.print(avgTemp); Serial.print(" F | Mood: "); Serial.println(mood); + + tft.fillScreen(moodColor); // Set background to mood color + tft.drawCircle(120, 120, 119, GC9A01A_BLACK); // Thin border ring + tft.drawCircle(120, 120, 118, GC9A01A_BLACK); + + // Draw mood message, word-wrapped in center + tft.setTextColor(GC9A01A_WHITE); + tft.setTextSize(2); + int y = 100; + char buffer[128]; + strncpy(buffer, mood, sizeof(buffer)); + buffer[sizeof(buffer) - 1] = '\0'; + char* line = strtok(buffer, " "); + String currentLine = ""; + + while (line != NULL) { + if (currentLine.length() + strlen(line) + 1 < 15) { + currentLine += line; + currentLine += " "; + } else { + int x = (240 - currentLine.length() * 12) / 2; + tft.setCursor(x, y); + tft.print(currentLine); + y += 20; + currentLine = String(line) + " "; + } + line = strtok(NULL, " "); + } + if (currentLine.length() > 0) { + int x = (240 - currentLine.length() * 12) / 2; + tft.setCursor(x, y); + tft.print(currentLine); + } + + // Draw temperature at bottom + tft.setTextColor(GC9A01A_WHITE); + tft.setTextSize(2); + char tempStr[10]; + sprintf(tempStr, "%d F", (int)avgTemp); + int tempWidth = strlen(tempStr) * 12; + int tempX = (240 - tempWidth) / 2; + tft.setCursor(tempX, 210); + tft.print(tempStr); + } + } + delay(500); // Sample delay +} From 9daaea54d8d5874ce5678dbe9616bbf8654acffb Mon Sep 17 00:00:00 2001 From: Ronniie Date: Thu, 26 Jun 2025 20:48:05 -0400 Subject: [PATCH 5/6] Update ThermoMood_Display.ino --- ThermoMood_Display.ino | 66 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/ThermoMood_Display.ino b/ThermoMood_Display.ino index 79242b3..cae4721 100644 --- a/ThermoMood_Display.ino +++ b/ThermoMood_Display.ino @@ -36,22 +36,72 @@ uint16_t getMoodColor(const char* mood) { // Choose mood text based on input temperature (Fahrenheit) const char* getMood(float tempF) { if (tempF < 85) { - const char* moods[] = {"Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT"}; return moods[random(0, 5)]; + const char* moods[] = { + "Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT", + "Brain freeze, spiritually", "Free trial expired", "Skeletal operation mode", "Soul buffering...", "No warmth detected", + "Winter is inside me", "Heartbeat optional", "Frosty but functional", "Shivering in lowercase", "Glacial thoughts", + "Is this Antarctica?", "Sentient popsicle", "Emotionally glaciated", "Frozen screen vibes", "Zero serotonin detected", + "Warmth not found", "Arctic chill mode", "Cardiovascular snooze", "Tundra-core", "Respawning from cold storage" + }; + return moods[random(0, 25)]; } else if (tempF < 88) { - const char* moods[] = {"Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm"}; return moods[random(0, 5)]; + const char* moods[] = { + "Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm", + "Gray scale emotions", "Sad Mac beep", "Existence.exe lagging", "No spark, just static", "Barely breathing", + "Soft quitting reality", "Drained and dull", "Ghosting everyone (including self)", "Snooze mode IRL", "Dimly aware", + "Where is my will to vibe?", "Running on nostalgia", "Manual override failed", "Dark mode mind", "Internally buffering", + "Echo chamber of meh", "Empty inbox, empty heart", "Is this thing on?", "Caffeine = personality", "2% battery remaining" + }; + return moods[random(0, 25)]; } else if (tempF < 90) { - const char* moods[] = {"Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time"}; return moods[random(0, 5)]; + const char* moods[] = { + "Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time", + "Mildly vibrating", "Calendar soul", "Background NPC energy", "Muted ambition", "Wednesday afternoon essence", + "Waiting for lunch", "Neutral and compliant", "Middle management mindset", "Auto-pilot enabled", "Email sent, soul left", + "One tab away from meltdown", "Performance review pending", "Just surviving", "At capacity", "Debugging existence", + "Snooze loop initiated", "Sleepwalking professionalism", "Deadpan default", "HR-safe chaos", "Corporate husk" + }; + return moods[random(0, 25)]; } else if (tempF < 92) { - const char* moods[] = {"One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes"}; return moods[random(0, 5)]; + const char* moods[] = { + "One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes", + "Stress-colored glasses on", "Thriving (but sarcastically)", "Too hot to handle deadlines", "Meetings are a fever dream", "Google Calendar warrior", + "Anxiously efficient", "Caffeinated dread", "Deadlines whispering", "Hyper-focus? Maybe.", "Did I send that email?", + "Frantically composed", "99 tabs open, 1 brain cell", "Ctrl+Alt+Stress", "Surviving on vibes & panic", "Deadline-driven drama", + "Multitasking disaster", "Red-alert mindstate", "Mental break loading...", "Rush hour upstairs", "Spicy brain activity" + }; + return moods[random(0, 25)]; } else if (tempF < 94) { - const char* moods[] = {"Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja"}; return moods[random(0, 5)]; + const char* moods[] = { + "Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja", + "Thermally unhinged", "Mood: Keyboard smash", "Side questing thru life", "Out-of-office inside", "May implode soon", + "System overheating", "Productive chaos", "Brain jammed in 4th gear", "Screaming (internally)", "Manager ping anxiety", + "Ctrl+Z for life", "Power surge personality", "Ctrl+Shift+Survive", "Overclocking the soul", "Heavy emotional packet loss", + "Workload tsunami", "High temp, low chill", "Crashing in style", "This is fine.exe", "Stress-induced charisma" + }; + return moods[random(0, 25)]; } else if (tempF < 96) { - const char* moods[] = {"Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected"}; return moods[random(0, 5)]; + const char* moods[] = { + "Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected", + "Flame-retardant personality", "Data corrupted by stress", "Close to meltdown", "Break glass for emotional support", "Nearing brain boil", + "Meme-ing through pain", "Slack screaming", "Too hot to work", "Charcoal soul", "Emotional core dump", + "Danger zone entered", "Ping me never", "Deadlines are lava", "Executive dysfunction maxed", "Infernal to-do list", + "Crispy aura", "Drenched in digital sweat", "Mental fan spinning fast", "Update delayed due to fire", "Red-alert mode" + }; + return moods[random(0, 25)]; } else { - const char* moods[] = {"Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)"}; return moods[random(0, 5)]; + const char* moods[] = { + "Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)", + "Brain soup mode", "Sizzling regrets", "Ashes of motivation", "Permanent vacation (from logic)", "Doomscrolling the sun", + "Burnout bonanza", "Toxic heat signature", "Emotionally flambΓ©ed", "Sunburnt thoughts", "Smoking productivity", + "Human volcano", "Too late to chill", "Fahrenheit 404", "Internally toasted", "This meeting is a sauna", + "Excessive self-heating", "Crash cart required", "Too much vibe, not enough AC", "Flare-up in progress", "Hot mess express" + }; + return moods[random(0, 25)]; } } + void setup() { Serial.begin(9600); // Start serial for debugging delay(500); @@ -66,7 +116,7 @@ void loop() { static float tempSum = 0; static int sampleCount = 0; - float tempF = thermocouple.readFahrenheit(); // Read current temperature + float tempF = thermocouple.readFahrenheit() - 7.0; // Read current temperature tempSum += tempF; sampleCount++; From 3de64415b1f3f847463fccf4ba6f784d518a3791 Mon Sep 17 00:00:00 2001 From: Ronnie <30136547+Ronniie@users.noreply.github.com> Date: Thu, 26 Jun 2025 20:48:05 -0400 Subject: [PATCH 6/6] Update ThermoMood_Display.ino --- ThermoMood_Display.ino | 66 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/ThermoMood_Display.ino b/ThermoMood_Display.ino index 79242b3..cae4721 100644 --- a/ThermoMood_Display.ino +++ b/ThermoMood_Display.ino @@ -36,22 +36,72 @@ uint16_t getMoodColor(const char* mood) { // Choose mood text based on input temperature (Fahrenheit) const char* getMood(float tempF) { if (tempF < 85) { - const char* moods[] = {"Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT"}; return moods[random(0, 5)]; + const char* moods[] = { + "Are you even alive?", "Frozen in apathy", "Intern from the underworld", "Just cold hands or cold heart?", "CRASHING OUT", + "Brain freeze, spiritually", "Free trial expired", "Skeletal operation mode", "Soul buffering...", "No warmth detected", + "Winter is inside me", "Heartbeat optional", "Frosty but functional", "Shivering in lowercase", "Glacial thoughts", + "Is this Antarctica?", "Sentient popsicle", "Emotionally glaciated", "Frozen screen vibes", "Zero serotonin detected", + "Warmth not found", "Arctic chill mode", "Cardiovascular snooze", "Tundra-core", "Respawning from cold storage" + }; + return moods[random(0, 25)]; } else if (tempF < 88) { - const char* moods[] = {"Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm"}; return moods[random(0, 5)]; + const char* moods[] = { + "Quietly spiraling", "Coffee might help, but not really", "Low-power mode engaged", "Social battery: low", "Flatline on enthusiasm", + "Gray scale emotions", "Sad Mac beep", "Existence.exe lagging", "No spark, just static", "Barely breathing", + "Soft quitting reality", "Drained and dull", "Ghosting everyone (including self)", "Snooze mode IRL", "Dimly aware", + "Where is my will to vibe?", "Running on nostalgia", "Manual override failed", "Dark mode mind", "Internally buffering", + "Echo chamber of meh", "Empty inbox, empty heart", "Is this thing on?", "Caffeine = personality", "2% battery remaining" + }; + return moods[random(0, 25)]; } else if (tempF < 90) { - const char* moods[] = {"Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time"}; return moods[random(0, 5)]; + const char* moods[] = { + "Classic cubicle-core", "Meh. Just meh.", "Functioning introvert mode", "Emotionally beige", "Dead inside, but on time", + "Mildly vibrating", "Calendar soul", "Background NPC energy", "Muted ambition", "Wednesday afternoon essence", + "Waiting for lunch", "Neutral and compliant", "Middle management mindset", "Auto-pilot enabled", "Email sent, soul left", + "One tab away from meltdown", "Performance review pending", "Just surviving", "At capacity", "Debugging existence", + "Snooze loop initiated", "Sleepwalking professionalism", "Deadpan default", "HR-safe chaos", "Corporate husk" + }; + return moods[random(0, 25)]; } else if (tempF < 92) { - const char* moods[] = {"One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes"}; return moods[random(0, 5)]; + const char* moods[] = { + "One deadline away from losing it", "Focused panic detected", "Productivity-induced suffering", "Almost emotionally present", "Running on fumes", + "Stress-colored glasses on", "Thriving (but sarcastically)", "Too hot to handle deadlines", "Meetings are a fever dream", "Google Calendar warrior", + "Anxiously efficient", "Caffeinated dread", "Deadlines whispering", "Hyper-focus? Maybe.", "Did I send that email?", + "Frantically composed", "99 tabs open, 1 brain cell", "Ctrl+Alt+Stress", "Surviving on vibes & panic", "Deadline-driven drama", + "Multitasking disaster", "Red-alert mindstate", "Mental break loading...", "Rush hour upstairs", "Spicy brain activity" + }; + return moods[random(0, 25)]; } else if (tempF < 94) { - const char* moods[] = {"Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja"}; return moods[random(0, 5)]; + const char* moods[] = { + "Buzzing with existential dread", "Running on caffeine and vibes", "Possibly unraveling", "Caffeinated and dangerous", "Deadline ninja", + "Thermally unhinged", "Mood: Keyboard smash", "Side questing thru life", "Out-of-office inside", "May implode soon", + "System overheating", "Productive chaos", "Brain jammed in 4th gear", "Screaming (internally)", "Manager ping anxiety", + "Ctrl+Z for life", "Power surge personality", "Ctrl+Shift+Survive", "Overclocking the soul", "Heavy emotional packet loss", + "Workload tsunami", "High temp, low chill", "Crashing in style", "This is fine.exe", "Stress-induced charisma" + }; + return moods[random(0, 25)]; } else if (tempF < 96) { - const char* moods[] = {"Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected"}; return moods[random(0, 5)]; + const char* moods[] = { + "Overclocked human processor", "Might spontaneously combust", "TIME FOR YOU TO GO HOME", "Stop. Breathe. Panic again.", "Corporate martyr detected", + "Flame-retardant personality", "Data corrupted by stress", "Close to meltdown", "Break glass for emotional support", "Nearing brain boil", + "Meme-ing through pain", "Slack screaming", "Too hot to work", "Charcoal soul", "Emotional core dump", + "Danger zone entered", "Ping me never", "Deadlines are lava", "Executive dysfunction maxed", "Infernal to-do list", + "Crispy aura", "Drenched in digital sweat", "Mental fan spinning fast", "Update delayed due to fire", "Red-alert mode" + }; + return moods[random(0, 25)]; } else { - const char* moods[] = {"Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)"}; return moods[random(0, 5)]; + const char* moods[] = { + "Go touch grass. Immediately.", "Check for open flames", "Thermally unstable coworker", "CRASHING OUT", "Return to sender (overheated)", + "Brain soup mode", "Sizzling regrets", "Ashes of motivation", "Permanent vacation (from logic)", "Doomscrolling the sun", + "Burnout bonanza", "Toxic heat signature", "Emotionally flambΓ©ed", "Sunburnt thoughts", "Smoking productivity", + "Human volcano", "Too late to chill", "Fahrenheit 404", "Internally toasted", "This meeting is a sauna", + "Excessive self-heating", "Crash cart required", "Too much vibe, not enough AC", "Flare-up in progress", "Hot mess express" + }; + return moods[random(0, 25)]; } } + void setup() { Serial.begin(9600); // Start serial for debugging delay(500); @@ -66,7 +116,7 @@ void loop() { static float tempSum = 0; static int sampleCount = 0; - float tempF = thermocouple.readFahrenheit(); // Read current temperature + float tempF = thermocouple.readFahrenheit() - 7.0; // Read current temperature tempSum += tempF; sampleCount++;