#include #include #include #include #include "index.h" #include "fonts.h" #include "cursor.h" #include "lowLevel.ino" #ifdef __AVR__ #include // Required for 16 MHz Adafruit Trinket #endif #define PIN 12 #define PANEL_PIXEL_COUNT 16 #define PANEL_COUNT 3 #define NUMPIXELS PANEL_PIXEL_COUNT*PANEL_PIXEL_COUNT*PANEL_COUNT #define PANEL_MAX_X PANEL_PIXEL_COUNT * PANEL_COUNT - 1 #define PANEL_MAX_Y PANEL_PIXEL_COUNT - 1 #define TEXT_MAX_LENGTH 64 #define SCROLLABLE_TEXT_MAX_COUNT 4 #define SMALL_TEXT_HEIGHT 7 #define SMALL_TEXT_WIDTH 5 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Text scrollable_texts[SCROLLABLE_TEXT_MAX_COUNT]; void addLeftScrollableTextOnScreen(char text[TEXT_MAX_LENGTH], uint32_t color = 0x00010101, bool is_small = true, unsigned short pos_x = nullptr, unsigned short pos_y) { unsigned char character_index = 0; for (unsigned char i = 0; i < SCROLLABLE_TEXT_MAX_COUNT; i++) { if (scrollable_texts[i].deleted) { scrollable_texts[i].deleted = false; character_index = i; break; } } if (pos_x == nullptr) { for (unsigned char i = 0; true; i++) { if (!text[i]) { pos_x = PANEL_MAX_X - ((characterSize.width + 1) * i); } } } for (unsigned char i = 0; i < TEXT_MAX_LENGTH; i++) { scrollable_texts[character_index].content[i] = text[i]; if (!text[i]) { scrollable_texts[character_index].character_count = i; break; } } scrollable_texts[character_index].color = color; scrollable_texts[character_index].pos_x = pos_x; scrollable_texts[character_index].pos_y = pos_y; if (is_small) { scrollable_texts[character_index].characterSize.height = SMALL_TEXT_HEIGHT; scrollable_texts[character_index].characterSize.width = SMALL_TEXT_WIDTH; } } void drawGivenLeftScrollableText(unsigned char index, Cursor (*used_cursor)) { if (scrollable_texts[index].deleted) { return; } for (unsigned char i = 0; i < scrollable_texts[index].character_count; i++) { if (scrollable_texts[index].is_small) { for (unsigned char char_i = 0; char_i < scrollable_texts[index].character_count; char_i++) { used_cursor.x = scrollable_texts[index].pos_x; used_cursor.y = scrollable_texts[index].pos_y; drawCharacter(font7x5[scrollable_texts[index].content[char_i] - '!'], 7, 5, scrollable_texts[index].color, used_cursor); } } } } void setup() { Serial.begin(115200); pixels.begin(); pixels.clear(); addLeftScrollableTextOnScreen("Its alive!"); pixels.show(); start_server(); } void loop() { shiftGivenRectangle(0, 0, 19, 7, 1); pixels.show(); handle_server(); }