114 lines
3.2 KiB
Arduino
114 lines
3.2 KiB
Arduino
#include <Adafruit_NeoPixel.h>
|
|
#include <WiFi.h>
|
|
#include <WebServer.h>
|
|
#include <ArduinoJson.h>
|
|
#include "config.h"
|
|
#include "index.h"
|
|
#include "fonts.h"
|
|
#include "lowLevel.h"
|
|
|
|
#ifdef __AVR__
|
|
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
|
|
#endif
|
|
|
|
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 = 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);
|
|
if (text_length == 0){return;}
|
|
for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++)
|
|
{
|
|
if (text_nodes[i].is_deleted)
|
|
{
|
|
strncpy(text_nodes[i].content, text, TEXT_MAX_LENGTH);
|
|
text_nodes[i].color = color;
|
|
text_nodes[i].pos_x = (pos_x == 65535) ? PANEL_MAX_X + 1 : pos_x;
|
|
text_nodes[i].pos_y = pos_y;
|
|
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(bool reset_cursor = true)
|
|
{
|
|
for (unsigned char i = 0; i < MAX_TEXT_NODES_COUNT; i++)
|
|
{
|
|
if (!text_nodes[i].is_deleted)
|
|
{
|
|
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++)
|
|
{
|
|
char ch = text_nodes[i].content[j];
|
|
if (ch < '!' || ch > '~')
|
|
{
|
|
ch = ' ';
|
|
}
|
|
|
|
drawCharacter(font7x5[ch - ' '], text_nodes[i].characterSize.height, text_nodes[i].characterSize.width, text_nodes[i].color, &cursor);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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].pos_x + text_nodes[i].characterSize.width * text_nodes[i].character_count + text_nodes[i].character_count - 1, text_nodes[i].pos_y + text_nodes[i].characterSize.height - 1, 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].pos_x + text_nodes[i].characterSize.width * text_nodes[i].character_count + text_nodes[i].character_count - 1, text_nodes[i].pos_y + text_nodes[i].characterSize.height - 1, text_nodes[i].scroll_slowness);
|
|
text_nodes[i].pos_x += text_6nodes[i].scroll_slowness;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
|
|
pixels.begin();
|
|
pixels.clear();
|
|
|
|
addNewTextNode("NET", 0xFF050505);
|
|
addNewTextNode("AWAIT", 0xFF050505, 0, 9);
|
|
drawTextNodes();
|
|
|
|
pixels.show();
|
|
start_server();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
scrollAllScrollableTexts();
|
|
pixels.show();
|
|
handle_server();
|
|
} |