From 3695f1e139f87e5cb157c2d46fd71bacd5db3197 Mon Sep 17 00:00:00 2001 From: gitProtogen Date: Fri, 6 Feb 2026 09:51:22 +0100 Subject: [PATCH] ai added lifespans --- ledy.ino | 62 +++++++++++++++++++++++++++++++++++++++------------- prototypes.h | 9 ++++++-- server.ino | 5 +++-- structs.h | 8 +++---- 4 files changed, 61 insertions(+), 23 deletions(-) diff --git a/ledy.ino b/ledy.ino index fd58139..ca58833 100644 --- a/ledy.ino +++ b/ledy.ino @@ -41,14 +41,14 @@ short getTextNodeX2(TextNode *node) void addNewTextNode ( char text[TEXT_MAX_LENGTH + 1], uint32_t color, bool handle_pos_via_cursor = true, short pos_x = 0, short pos_y = 0, - unsigned char scroll_slowness = 1, bool is_scrolling = true, bool is_small = true + unsigned char scroll_slowness = 1, bool is_scrolling = true, bool is_small = true, short disappear_time = -1 ) { unsigned char text_length = strlen(text); if (text_length == 0){return;} for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) { - if (text_nodes[i].is_deleted) + if (text_nodes[i].disappear_time == 0) { strncpy(text_nodes[i].content, text, TEXT_MAX_LENGTH); text_nodes[i].color = color; @@ -69,7 +69,7 @@ void addNewTextNode text_nodes[i].character_count = text_length; text_nodes[i].scroll_slowness = scroll_slowness; text_nodes[i].is_scrolling = is_scrolling; - text_nodes[i].is_deleted = false; + text_nodes[i].disappear_time = disappear_time; ever_created_text_nodes++; if (handle_pos_via_cursor) @@ -85,7 +85,7 @@ void scrollAllScrollableTexts(bool split_scroll_mode = false) { for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) { - if (text_nodes[i].is_deleted) {continue;} + if (text_nodes[i].disappear_time == 0) {continue;} if (text_nodes[i].is_scrolling) { @@ -103,7 +103,7 @@ void scrollAllScrollableTexts(bool split_scroll_mode = false) { if (x2 < 0) { - text_nodes[i].is_deleted = true; + text_nodes[i].disappear_time = 1; continue; } text_nodes[i].pos_x--; @@ -112,7 +112,7 @@ void scrollAllScrollableTexts(bool split_scroll_mode = false) { if (x1 > DISPLAY_MAX_X) { - text_nodes[i].is_deleted = true; + text_nodes[i].disappear_time = 1; continue; } text_nodes[i].pos_x++; @@ -138,14 +138,14 @@ void scrollAllScrollableTexts(bool split_scroll_mode = false) void addNewMultiColor ( char text[TEXT_MAX_LENGTH + 1], RGBWithIndex colors[4], unsigned char color_count, bool handle_pos_via_cursor = true, short pos_x = 0, short pos_y = 0, - unsigned char scroll_slowness = 1, bool is_scrolling = true, bool is_small = true + unsigned char scroll_slowness = 1, bool is_scrolling = true, bool is_small = true, short disappear_time = -1 ) { unsigned char text_length = strlen(text); if (text_length == 0){return;} for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) { - if (multi_color_text_node[i].is_deleted) + if (multi_color_text_node[i].disappear_time == 0) { strncpy(multi_color_text_node[i].content, text, TEXT_MAX_LENGTH); multi_color_text_node[i].color_count = color_count; @@ -170,7 +170,7 @@ void addNewMultiColor multi_color_text_node[i].character_count = text_length; multi_color_text_node[i].scroll_slowness = scroll_slowness; multi_color_text_node[i].is_scrolling = is_scrolling; - multi_color_text_node[i].is_deleted = false; + multi_color_text_node[i].disappear_time = disappear_time; ever_created_multi_color_text_nodes++; if (handle_pos_via_cursor) @@ -192,7 +192,7 @@ void scrollAllMultiColorTexts(bool split_scroll_mode = false) { for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) { - if (multi_color_text_node[i].is_deleted) {continue;} + if (multi_color_text_node[i].disappear_time == 0) {continue;} if (multi_color_text_node[i].is_scrolling) { @@ -210,7 +210,7 @@ void scrollAllMultiColorTexts(bool split_scroll_mode = false) { if (x2 < 0) { - multi_color_text_node[i].is_deleted = true; + multi_color_text_node[i].disappear_time = 1; continue; } multi_color_text_node[i].pos_x--; @@ -219,7 +219,7 @@ void scrollAllMultiColorTexts(bool split_scroll_mode = false) { if (x1 > DISPLAY_MAX_X) { - multi_color_text_node[i].is_deleted = true; + multi_color_text_node[i].disappear_time = 1; continue; } multi_color_text_node[i].pos_x++; @@ -268,6 +268,36 @@ void drawImageFromMemoryByIndex(unsigned char image_index, short pos_x, short po } } +void handleDisappearTimers() +{ + for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) + { + if (text_nodes[i].disappear_time > 0) + { + text_nodes[i].disappear_time--; + if (text_nodes[i].disappear_time == 0) + { + fillPixels(text_nodes[i].pos_x, text_nodes[i].pos_y, getTextNodeX2(&text_nodes[i]), getTextNodeY2(&text_nodes[i]), 0); + } + } + } +} + +void handleMultiColorDisappearTimers() +{ + for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++) + { + if (multi_color_text_node[i].disappear_time > 0) + { + multi_color_text_node[i].disappear_time--; + if (multi_color_text_node[i].disappear_time == 0) + { + fillPixels(multi_color_text_node[i].pos_x, multi_color_text_node[i].pos_y, getMultiColorTextNodeX2(&multi_color_text_node[i]), multi_color_text_node[i].pos_y + multi_color_text_node[i].characterSize.height - 1, 0); + } + } + } +} + void setup() { Serial.begin(115200); @@ -276,11 +306,11 @@ void setup() pixels.begin(); pixels.clear(); - addNewTextNode("NET", 0xFF050505, false, 0, 0); - addNewTextNode("AWAIT", 0xFF050505, false, 0, 9); + addNewTextNode("NET", 0xFF050505, false, 0, 0, 1, true, true, -1); + addNewTextNode("AWAIT", 0xFF050505, false, 0, 9, 1, true, true, -1); RGBWithIndex colors[2] = {RGBWithIndex(255, 0, 0, 0), RGBWithIndex(0, 0, 255, 6)}; - addNewMultiColor("HELLO WORLD", colors, 2, false, 0, 0, 1, true, true); + addNewMultiColor("HELLO WORLD", colors, 2, false, 0, 0, 1, true, true, -1); pixels.show(); start_server(); @@ -290,6 +320,8 @@ void loop() { pixels.clear(); handle_server(); + handleDisappearTimers(); + handleMultiColorDisappearTimers(); scrollAllScrollableTexts(); scrollAllMultiColorTexts(); diff --git a/prototypes.h b/prototypes.h index 78d1427..d8008bf 100644 --- a/prototypes.h +++ b/prototypes.h @@ -16,11 +16,16 @@ void drawImageFromMemoryByIndex(unsigned char image_index, short pos_x, short po void setPixel(short x, short y, uint32_t color); void start_server(); void handle_server(); -void addNewTextNode(char text[TEXT_MAX_LENGTH + 1], uint32_t color, bool handle_pos_via_cursor, short pos_x, short pos_y, unsigned char scroll_slowness, bool is_scrolling, bool is_small); +void addNewTextNode(char text[TEXT_MAX_LENGTH + 1], uint32_t color, bool handle_pos_via_cursor, short pos_x, short pos_y, unsigned char scroll_slowness, bool is_scrolling, bool is_small, short disappear_time); void scrollAllScrollableTexts(bool split_scroll_mode); -void addNewMultiColor(char text[TEXT_MAX_LENGTH + 1], RGBWithIndex colors[4], unsigned char color_count, bool handle_pos_via_cursor, short pos_x, short pos_y, unsigned char scroll_slowness, bool is_scrolling, bool is_small); +void addNewMultiColor(char text[TEXT_MAX_LENGTH + 1], RGBWithIndex colors[4], unsigned char color_count, bool handle_pos_via_cursor, short pos_x, short pos_y, unsigned char scroll_slowness, bool is_scrolling, bool is_small, short disappear_time); void scrollAllMultiColorTexts(bool split_scroll_mode); void drawCharacter(const bool (*character)[5], unsigned char height, unsigned char width, uint32_t color, Cursor (*used_cursor)); +void handleDisappearTimers(); +void handleMultiColorDisappearTimers(); +short getTextNodeY2(TextNode *node); +short getTextNodeX2(TextNode *node); +short getMultiColorTextNodeX2(MultiColorTextNode *node); #endif // PROTOTYPES_H \ No newline at end of file diff --git a/server.ino b/server.ino index f7e87f5..85375d2 100644 --- a/server.ino +++ b/server.ino @@ -103,6 +103,7 @@ void handleText() { String colorStr = server.arg("color"); String position = server.arg("position"); unsigned char slowness = server.arg("slowness").toInt(); + short disappear_time = server.hasArg("disappear") ? server.arg("disappear").toInt() : -1; char text[TEXT_MAX_LENGTH + 1]; text_str.toCharArray(text, TEXT_MAX_LENGTH + 1); @@ -110,9 +111,9 @@ void handleText() { uint32_t color = strtol(colorStr.substring(1).c_str(), NULL, 16); if (position == "top") { - addNewTextNode(text, color, false, 43, 0, slowness, true, false); + addNewTextNode(text, color, false, 43, 0, slowness, true, false, disappear_time); } else if (position == "bottom") { - addNewTextNode(text, color, false, -text_str.length() * 6, 9, slowness, true, false); + addNewTextNode(text, color, false, -text_str.length() * 6, 9, slowness, true, false, disappear_time); } server.send(200, "text/plain", "OK"); diff --git a/structs.h b/structs.h index a9cbdbe..8194917 100644 --- a/structs.h +++ b/structs.h @@ -32,11 +32,11 @@ struct TextNode unsigned char character_count; unsigned char scroll_slowness; unsigned char scroll_progress; - bool is_deleted; + short disappear_time; bool is_scrolling; - TextNode() : color(0), pos_x(0), pos_y(0), character_count(0), scroll_slowness(0), scroll_progress(0), characterSize({7,5}), is_deleted(true), is_scrolling(true) {} + TextNode() : color(0), pos_x(0), pos_y(0), character_count(0), scroll_slowness(0), scroll_progress(0), characterSize({7,5}), disappear_time(0), is_scrolling(true) {} }; struct RGB @@ -75,10 +75,10 @@ struct MultiColorTextNode unsigned char character_count; unsigned char scroll_slowness; unsigned char scroll_progress; - bool is_deleted; + short disappear_time; bool is_scrolling; - MultiColorTextNode() : pos_x(0), pos_y(0), character_count(0), scroll_slowness(0), scroll_progress(0), characterSize({7,5}), is_deleted(true), is_scrolling(true), color_count(0) {} + MultiColorTextNode() : pos_x(0), pos_y(0), character_count(0), scroll_slowness(0), scroll_progress(0), characterSize({7,5}), disappear_time(0), is_scrolling(true), color_count(0) {} }; struct Image