diff --git a/.idea/copilot.data.migration.agent.xml b/.idea/copilot.data.migration.agent.xml
new file mode 100644
index 0000000..4ea72a9
--- /dev/null
+++ b/.idea/copilot.data.migration.agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask.xml b/.idea/copilot.data.migration.ask.xml
new file mode 100644
index 0000000..7ef04e2
--- /dev/null
+++ b/.idea/copilot.data.migration.ask.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/fonts.h b/fonts.h
index 60c09ef..694f0b9 100644
--- a/fonts.h
+++ b/fonts.h
@@ -1,5 +1,14 @@
-constexpr bool font7x5[95][7][5] =
+constexpr bool font7x5[96][7][5] =
{
+ {
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ },
// ! (ASCII 33)
{
{false, false, true, false, false},
diff --git a/ledy.ino b/ledy.ino
index aa8bdd4..27ad0e0 100644
--- a/ledy.ino
+++ b/ledy.ino
@@ -15,10 +15,12 @@ Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
TextNode text_nodes[MAX_TEXT_NODES_COUNT];
+Cursor cursor;
+
void addNewTextNode
(
- char text[TEXT_MAX_LENGTH + 1], uint32_t color = 0x00010101, unsigned short pos_x = 65535, unsigned short pos_y = 0,
- bool is_small = true
+ char text[TEXT_MAX_LENGTH + 1], uint32_t color = 0x00010101, unsigned short pos_x = 0, unsigned short pos_y = 0,
+ unsigned char scroll_slowness = 1, bool is_scrolling = true, bool is_small = true
)
{
unsigned char text_length = strlen(text);
@@ -34,21 +36,26 @@ void addNewTextNode
text_nodes[i].characterSize.height = is_small ? SMALL_TEXT_HEIGHT : MEDIUM_TEXT_HEIGHT;
text_nodes[i].characterSize.width = is_small ? SMALL_TEXT_WIDTH : MEDIUM_TEXT_WIDTH;
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;
break;
}
}
}
-void drawTextNodes()
+void drawTextNodes(bool reset_cursor = true)
{
for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++)
{
if (!text_nodes[i].is_deleted)
{
- Cursor cursor;
- cursor.x = text_nodes[i].pos_x;
- cursor.y = text_nodes[i].pos_y;
+ if (reset_cursor)
+ {
+ cursor.x = text_nodes[i].pos_x;
+ cursor.y = text_nodes[i].pos_y;
+
+ }
for (unsigned char j = 0; j < text_nodes[i].character_count; j++)
{
@@ -57,13 +64,32 @@ void drawTextNodes()
{
ch = ' ';
}
- drawCharacter(font7x5[ch - '!'], text_nodes[i].characterSize.height, text_nodes[i].characterSize.width, text_nodes[i].color, &cursor);
+
+ drawCharacter(font7x5[ch - ' '], text_nodes[i].characterSize.height, text_nodes[i].characterSize.width, text_nodes[i].color, &cursor);
}
}
}
}
-// void scrollTextNodeByAmount(unsigned )
+void scrollAllScrollableTexts()
+{
+ for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++)
+ {
+ if (!text_nodes[i].is_deleted && text_nodes[i].is_scrolling)
+ {
+ if (text_nodes[i].pos_y < 7)
+ {
+ shiftGivenRectangleLeft(text_nodes[i].pos_x, text_nodes[i].pos_y, text_nodes[i].characterSize.width * text_nodes[i].character_count, text_nodes[i].characterSize.height, text_nodes[i].scroll_slowness);
+ text_nodes[i].pos_x -= text_nodes[i].scroll_slowness;
+ }
+ else
+ {
+ shiftGivenRectangleRight(text_nodes[i].pos_x, text_nodes[i].pos_y, text_nodes[i].characterSize.width * text_nodes[i].character_count, text_nodes[i].characterSize.height, text_nodes[i].scroll_slowness);
+ text_nodes[i].pos_x += text_nodes[i].scroll_slowness;
+ }
+ }
+ }
+}
void setup()
{
@@ -72,7 +98,8 @@ void setup()
pixels.begin();
pixels.clear();
- addNewTextNode("TEst", 0x0001700, 0, 0, true);
+ addNewTextNode("NET", 0xFF150000);
+ addNewTextNode("FAILED", 0xFF150000, 0, 9);
drawTextNodes();
pixels.show();
@@ -81,7 +108,7 @@ void setup()
void loop()
{
- shiftGivenRectangleLefr(0, 0, 23, 7, 1);
+ scrollAllScrollableTexts();
pixels.show();
handle_server();
}
\ No newline at end of file
diff --git a/lowLevel.ino b/lowLevel.ino
index 885a10c..6a1656b 100644
--- a/lowLevel.ino
+++ b/lowLevel.ino
@@ -143,7 +143,7 @@ void fillPixels(unsigned short x1, unsigned short y1, unsigned short x2, unsigne
}
}
-void shiftGivenRectangleLefr(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned char shift_by)
+void shiftGivenRectangleLeft(short x1, short y1, short x2, short y2, unsigned char shift_by)
{
if (!shift_by)
{
@@ -171,4 +171,30 @@ void shiftGivenRectangleLefr(unsigned short x1, unsigned short y1, unsigned shor
}
}
+void shiftGivenRectangleRight(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned char shift_by)
+{
+ if (!shift_by)
+ {
+ return;
+ }
+ if (x1 > x2)
+ {
+ unsigned short tmp = x1; x1 = x2; x2 = tmp;
+ }
+ if (y1 > y2)
+ {
+ unsigned short tmp = y1; y1 = y2; y2 = tmp;
+ }
+ unsigned short width = (unsigned short)(x2 - x1 + 1);
+ unsigned short height = (unsigned short)(y2 - y1 + 1);
+
+ for (unsigned short i = 0; i < height; i++)
+ {
+ for (unsigned short j = 0; j < width + shift_by; j++)
+ {
+ setPixel(x1 + j - shift_by, y1 - 1 , getPixelColor(x1 + j, y1 + i));
+ setPixel(x1 + j, y1 + i, 0x00000000);
+ }
+ }
+}
diff --git a/structs.h b/structs.h
index 7758a26..4e14bd1 100644
--- a/structs.h
+++ b/structs.h
@@ -30,11 +30,12 @@ struct TextNode
unsigned short width;
} characterSize;
unsigned char character_count;
+ unsigned char scroll_slowness;
bool is_deleted;
- bool is_scrolled;
+ bool is_scrolling;
- TextNode() : color(0), pos_x(0), pos_y(0), character_count(0), characterSize({7,5}), is_deleted(true) {}
+ TextNode() : color(0), pos_x(0), pos_y(0), character_count(0), scroll_slowness(1), characterSize({7,5}), is_deleted(true), is_scrolling(true) {}
};
#endif // STRUCTS_H