Contr1 Tags1 Inputs1 Variables1 0@0 LibraryRoot LibraryGroup-Базовые элементы 0@0 355 0@0 169 368 0@0 root globalVariable 1 6083e3c5-5567-4ca0-8435-86db62f328ff 0@0 0 5 3 --- ЭФФЕКТЫ --- срока вкл == 13 4 760@320 780@320 corner: 911.0d@340 760@320 corner: 931.0d@340 785.0d@334.5d WS2812_Eff_Gyver_final 9e3b5f41-961b-42d7-92e1-084db40edbac Эффекты на WS2812 Гивера последний Ставится блок последним, работает только с первымм блоком. Между ними ставить блоки эффектов. 94 } 131.0d 7 11 560@190 580@190 corner: 640@250 560@190 corner: 660@250 595.0d@204.5d V 560@220 580@220 540.0d@223.5d 560@210 corner: 580@230 35 400@150 420@150 corner: 500@210 400@150 corner: 520@210 449.0d@163.5d 33 290@150 310@150 corner: 370@190 290@150 corner: 390@190 326.0d@163.5d 39 180@40 200@40 corner: 240@80 180@40 corner: 260@80 216.0d@53.5d 40 60@60 80@60 corner: 139.0d@80 60@60 corner: 159.0d@80 84@74.5d 60@70 80@70 60@60 corner: 80@80 139.0d@60 corner: 159.0d@80 159.0d@70 9.0d 51.0d эфект вкл 0.0d 139.0d@70 159.0d@70 corner: 159.0d@70 180@70 200@70 180@60 corner: 200@80 240@60 corner: 260@80 260@70 Q 240@70 25 770@0 790@0 corner: 935.0d@60 770@0 corner: 955.0d@60 795.0d@14.5d 770@20 corner: 790@40 brightness 250 770@50 790@50 750.0d@53.5d WS2812_Eff_Gyver_main en_g ff84043f-248e-41ab-9e01-ee69e464ad45 d33a14d9-0b55-40cf-9dbf-1387189f8d25 eb520ab3-b1eb-4c10-8133-28cfa0fd619b 5c8320ed-cb31-4afe-ab5a-55d2de2f1efc LedMode d7203749-7779-43ec-b213-cc01c0754a0f 2d1caead-279e-4ab3-8bab-dba56bedd7ce 02999e23-1989-47d2-a147-65901b336b31 Эффекты на WS2812 Гивера главный Входы: en_g - включение блока; brightness - яркость; LedMode - стартовый режим: 0 - все выключены 1 - все включены 3 - кольцевая радуга 888 - демо-режим Параметры: LED_COUNT - количество светодиодов; LED_DT - вывод, куда подключен DIN ленты 278 LED_COUNT 48 118101c3-0d16-469f-9bfb-66b196c7417a aae27e5e-6f22-4607-86a0-eb91d4253e96 LED_DT 66eb2176-a6af-48a0-b401-4c340f72eab9 44d2d881-4390-4861-9307-49a2058df461 if (en_g) { LEDS.setBrightness(brightness); if (Serial.available() > 0) { // если что то прислали ledMode = Serial.parseInt(); // парсим в тип данных int change_mode(ledMode); // меняем режим через change_mode (там для каждого режима стоят цвета и задержки) } else { ledMode = LedMode; change_mode(ledMode); } switch (ledMode) { case 999: break; // пауза 439 Serial.begin(9600); LEDS.setBrightness( brightness ); LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT); one_color_all(0, 0, 0); LEDS.show(); 154 библиотека для работы с лентой #include "FastLED.h" ledMode = LedMode ; int /* Стартовый режим 0 - все выключены 1 - все включены 3 - кольцевая радуга 888 - демо-режим */ цвета мячиков для режима ballColors [3][3] = { {0xff, 0, 0}, {0xff, 0xff, 0xff}, {0 , 0 , 0xff}, }; byte светодиод начала отсчёта BOTTOM_INDEX = 0; int TOP_INDEX = int(LED_COUNT / 2); int EVENODD = LED_COUNT % 2; int leds [LED_COUNT]; CRGB -ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC) ledsX [LED_COUNT][3]; int -FX LOOPS DELAY VAR thisdelay = 20; int -FX LOOPS DELAY VAR thisstep = 10; int -FX LOOPS DELAY VAR thishue = 0; int -FX LOOPS DELAY VAR thissat = 255; int thisindex = 0; int thisRED = 0; int thisGRN = 0; int thisBLU = 0; int -LED INDEX (0 to LED_COUNT-1 idex = 0; int -HUE (0-255) ihue = 0; int -BRIGHTNESS (0-255) ibright = 0; int -SATURATION (0-255) isat = 0; int -SWITCH FOR COLOR BOUNCE (0-1) bouncedirection = 0; int -INC VAR FOR SIN LOOPS tcount = 0.0; float -ANOTHER COUNTING VAR lcount = 0; int for (int i = 0 ; i < LED_COUNT; i++ ) { leds[i].setRGB( cred, cgrn, cblu); } 82 void one_color_all int cred int cgrn int cblu //-SET ALL LEDS TO ONE COLOR (HSV) for (int i = 0 ; i < LED_COUNT; i++ ) { leds[i] = CHSV(ahue, thissat, 255); } 121 void one_color_allHSV int ahue thissat = 255; switch (newmode) { case 0: one_color_all(0, 0, 0); LEDS.show(); break; //---ALL OFF case 1: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL ON case 2: thisdelay = 20; break; //---STRIP RAINBOW FADE case 3: thisdelay = 20; thisstep = 10; break; //---RAINBOW LOOP case 4: thisdelay = 20; break; //---RANDOM BURST case 5: thisdelay = 20; thishue = 0; break; //---CYLON v1 case 6: thisdelay = 40; thishue = 0; break; //---CYLON v2 case 7: thisdelay = 40; thishue = 0; break; //---POLICE LIGHTS SINGLE case 8: thisdelay = 40; thishue = 0; break; //---POLICE LIGHTS SOLID case 9: thishue = 160; thissat = 50; break; //---STRIP FLICKER case 10: thisdelay = 15; thishue = 0; break; //---PULSE COLOR BRIGHTNESS case 11: thisdelay = 15; thishue = 0; break; //---PULSE COLOR SATURATION case 12: thisdelay = 60; thishue = 180; break; //---VERTICAL SOMETHING case 13: thisdelay = 100; break; //---CELL AUTO - RULE 30 (RED) case 14: thisdelay = 40; break; //---MARCH RANDOM COLORS case 15: thisdelay = 80; break; //---MARCH RWB COLORS case 16: thisdelay = 60; thishue = 95; break; //---RADIATION SYMBOL //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS case 19: thisdelay = 35; thishue = 180; break; //---SIN WAVE BRIGHTNESS case 20: thisdelay = 100; thishue = 0; break; //---POP LEFT/RIGHT case 21: thisdelay = 100; thishue = 180; break; //---QUADRATIC BRIGHTNESS CURVE //---PLACEHOLDER FOR FLAME VARS case 23: thisdelay = 50; thisstep = 15; break; //---VERITCAL RAINBOW case 24: thisdelay = 50; break; //---PACMAN case 25: thisdelay = 35; break; //---RANDOM COLOR POP case 26: thisdelay = 25; thishue = 0; break; //---EMERGECNY STROBE case 27: thisdelay = 25; thishue = 0; break; //---RGB PROPELLER case 28: thisdelay = 100; thishue = 0; break; //---KITT case 29: thisdelay = 50; thishue = 95; break; //---MATRIX RAIN case 30: thisdelay = 5; break; //---NEW RAINBOW LOOP case 31: thisdelay = 100; break; //---MARCH STRIP NOW CCW case 32: thisdelay = 100; break; //---MARCH STRIP NOW CCW case 33: thisdelay = 50; break; // colorWipe case 34: thisdelay = 50; break; // CylonBounce case 35: thisdelay = 15; break; // Fire case 36: thisdelay = 50; break; // NewKITT case 37: thisdelay = 20; break; // rainbowCycle case 38: thisdelay = 10; break; // rainbowTwinkle case 39: thisdelay = 50; break; // RunningLights case 40: thisdelay = 0; break; // Sparkle case 41: thisdelay = 20; break; // SnowSparkle case 42: thisdelay = 50; break; // theaterChase case 43: thisdelay = 50; break; // theaterChaseRainbow case 44: thisdelay = 100; break; // Strobe case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED case 102: one_color_all(0, 255, 0); LEDS.show(); break; //---ALL GREEN case 103: one_color_all(0, 0, 255); LEDS.show(); break; //---ALL BLUE case 104: one_color_all(255, 255, 0); LEDS.show(); break; //---ALL COLOR X case 105: one_color_all(0, 255, 255); LEDS.show(); break; //---ALL COLOR Y case 106: one_color_all(255, 0, 255); LEDS.show(); break; //---ALL COLOR Z } bouncedirection = 0; one_color_all(0, 0, 0); ledMode = newmode; 3824 void change_mode int newmode 770@40 corner: 790@60 770@30 WS2812_Eff_Gyver_main_1 2d0a688e-3f53-440e-a9c9-41603c6c5b54 Эффекты на WS2812 Гивера главный_1 Создан на основе скетчей Алекса Гивера https://alexgyver.ru/ws2812b-fx/. Ставится блок первым, работает только с последним блоком. Между ними ставить блоки эффектов. Входы: en_g - включение блока; brightness - яркость; Параметры: LED_COUNT - количество светодиодов; LED_DT - вывод, куда подключен DIN ленты. Для плат ESP8266 Nodemcu и тп, если стоит LED_DT = 2, то подключать к D2 (и так аналогично для других выводов, библиотека так написана). Для голых ESP8266 с выводами в GPIO совпадают. aidar_i 15/12/2019 519 6 LED_COUNT 0bf96f67-5262-4d7e-b728-0a9dc47df8ae 300 84e66d63-ba89-45f6-b686-76b4af598d25 if (en_g) { LEDS.setBrightness(brightness); 51 LEDS.setBrightness( 100 ); LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT); one_color_all(0, 0, 0); LEDS.show(); 127 библиотека для работы с лентой #include "FastLED.h" ballColors [3][3] = { {0xff, 0, 0}, {0xff, 0xff, 0xff}, {0 , 0 , 0xff}, }; byte светодиод начала отсчёта BOTTOM_INDEX = 0; int TOP_INDEX = int(LED_COUNT / 2); int EVENODD = LED_COUNT % 2; int leds [LED_COUNT]; CRGB -ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC) ledsX [LED_COUNT][3]; int -FX LOOPS DELAY VAR thisdelay = 20; int -FX LOOPS DELAY VAR thisstep = 10; int -FX LOOPS DELAY VAR thishue = 0; int -FX LOOPS DELAY VAR thissat = 255; int thisindex = 0; int thisRED = 0; int thisGRN = 0; int thisBLU = 0; int -LED INDEX (0 to LED_COUNT-1 idex = 0; int -HUE (0-255) ihue = 0; int -BRIGHTNESS (0-255) ibright = 0; int -SATURATION (0-255) isat = 0; int -SWITCH FOR COLOR BOUNCE (0-1) bouncedirection = 0; int -INC VAR FOR SIN LOOPS tcount = 0.0; float -ANOTHER COUNTING VAR lcount = 0; int leds[adex].setRGB( cred, cgrn, cblu); void set_color_led int adex int cred int cgrn int cblu //-ONLY WORKS WITH INDEX < TOPINDEX if (i == BOTTOM_INDEX) { return BOTTOM_INDEX; } if (i == TOP_INDEX && EVENODD == 1) { return TOP_INDEX + 1; } if (i == TOP_INDEX && EVENODD == 0) { return TOP_INDEX; } return LED_COUNT - i; 253 int horizontal_index int i int iN = i + TOP_INDEX; if (i >= TOP_INDEX) { iN = ( i + TOP_INDEX ) % LED_COUNT; } return iN; 106 int antipodal_index int i int r; if (i < LED_COUNT - 1) { r = i + 1; } else { r = 0; } return r; 90 int adjacent_cw int i int r; if (i > 0) { r = i - 1; } else { r = LED_COUNT - 1; } return r; int adjacent_ccw int i for (int i = 0; i < LED_COUNT; i++ ) { ledsX[i][0] = leds[i].r; ledsX[i][1] = leds[i].g; ledsX[i][2] = leds[i].b; } 131 void copy_led_array leds[Pixel].r = red; leds[Pixel].g = green; leds[Pixel].b = blue; 71 void setPixel int Pixel byte red byte green byte blue for (int i = 0; i < LED_COUNT; i++ ) { setPixel(i, red, green, blue); } FastLED.show(); 97 void setAll byte red byte green byte blue 145.0d 790@30 260@30 corner: 260@180 EN 290@180 310@180 290@170 corner: 310@190 370@170 corner: 390@190 390@180 asimetricMulti 150 10000 Q 370@180 390@180 corner: 390@180 C 400@180 420@180 36 340@230 360@230 corner: 392.0d@250 340@230 corner: 412.0d@250 364@243.5d 340@240 360@240 340@230 corner: 360@250 392.0d@230 corner: 412.0d@250 412.0d@240 7.0d 24.0d reset 392.0d@240 400@200 corner: 400@240 R 400@200 420@200 37 600@140 620@140 corner: 652.0d@160 600@140 corner: 672.0d@160 624@153.5d 600@150 652.0d@150 672.0d@150 620@150 520@150 corner: 520@180 >L 14.0d 500@180 520@180 520@200 2 up V 10.0d 500@200 17 610@80 630@80 corner: 710@120 610@80 corner: 730@120 631.0d@94.5d 610@110 16 770@80 790@80 corner: 845.0d@120 770@80 corner: 865.0d@120 795.0d@94.5d 770@110 Clear_eff clear fd3f8f9e-3249-4526-81f1-85eb86e1b516 4283209c-2372-4cf2-9995-2f69d3d88fa8 6c588c0c-8516-4697-981b-32aa7453b0da Очистка ленты if (clear) { one_color_all(0, 0, 0); LEDS.show(); } 68 55.0d 790@110 730@110 corner: 730@110 Q 710@110 730@110 constant Value 630@110 530@110 corner: 530@240 Sel 560@240 580@240 560@230 corner: 580@250 29 760@180 780@180 corner: 907.0d@240 760@180 corner: 927.0d@240 785.0d@194.5d 760@200 corner: 780@220 time_rl 20 760@230 780@230 746.0d@233.5d Effect_RAINBOW_LOOP Rainbow_loop 895c4f29-7943-446f-baa6-b1c8fd9dc4ce 85f502d4-7269-4357-a9d1-7827e98e694d f319ad2a-1bcf-4b20-886e-e827ac3cb9eb c8e629f4-6559-4122-a648-01e02275bee3 af7ed5d9-2a9e-462a-afd2-0187576a93d6 Эффект RAINBOW_LOOP Ставится блок между главным и последними блоками. 50 LED_COUNT f932f7e1-f765-48c4-9e33-9778f5f2a6c5 c041f2fd-6a2e-421c-acb9-5b3067390339 if ( Rainbow_loop ) { thisdelay = time_rl; thisstep = 10; rainbow_loop(); } idex++; ihue = ihue + thisstep; if (idex >= LED_COUNT) { idex = 0; } if (ihue > 255) { ihue = 0; } leds[idex] = CHSV(ihue, thissat, 255); LEDS.show(); delay(thisdelay); 192 void rainbow_loop 760@220 corner: 780@240 760@210 5552a7a0-5c9d-40de-893a-ae03742d5903 Ставится блок между главным и последними блоками. Входы: Rainbow_loop - включение блока; time_rl - скорость выполнения эффекта. Параметры: LED_COUNT - количество светодиодов в ленте. Thissat - меняя значения этих параметров можно задавать другие цвета. Thisstep - задержка. 285 Thissat 255 6448c5d7-1e35-4a7e-a3cd-974c43c9bdb7 185df97c-1f7b-49dc-8167-a5a5d4e0dc69 Thisstep 10 ee3343c6-8c7e-47cb-aaf7-46ff6b46393e 0179b9f7-0465-4aff-a52e-67253f384cb4 if ( Rainbow_loop ) { thisdelay = time_rl; thisstep = Thisstep ; thissat = Thissat; rainbow_loop(); } 134 127.0d 780@210 660@210 corner: 660@220 Q0 15.0d 640@220 660@220 640@210 corner: 660@230 22 760@260 780@260 corner: 902.0d@300 760@260 corner: 922.0d@300 785.0d@274.5d 760@280 corner: 780@300 760@290 Effect_STRIP FLICKER Effect_RAINBOW_LOOP Rainbow_loop 895c4f29-7943-446f-baa6-b1c8fd9dc4ce 85f502d4-7269-4357-a9d1-7827e98e694d time_rl f319ad2a-1bcf-4b20-886e-e827ac3cb9eb c8e629f4-6559-4122-a648-01e02275bee3 af7ed5d9-2a9e-462a-afd2-0187576a93d6 Эффект RAINBOW_LOOP Ставится блок между главным и последними блоками. LED_COUNT f932f7e1-f765-48c4-9e33-9778f5f2a6c5 c041f2fd-6a2e-421c-acb9-5b3067390339 if ( Rainbow_loop ) { thisdelay = time_rl; thisstep = 10; rainbow_loop(); } idex++; ihue = ihue + thisstep; if (idex >= LED_COUNT) { idex = 0; } if (ihue > 255) { ihue = 0; } leds[idex] = CHSV(ihue, thissat, 255); LEDS.show(); delay(thisdelay); void rainbow_loop Flicker 07c6ddc6-d495-4e6b-93f3-e7bb019e0fea Эффект STRIP FLICKER Ставится блок между главным и последними блоками. Входы: Flicker - включение блока; Параметры: LED_COUNT - количество светодиодов в ленте. Thishue , Thissat - меняя значения этих параметров можно задавать другие цвета. 228 LED_COUNT 74564eaf-0ff0-43b3-9cf9-900b92802e49 0b9c4552-377b-4543-973d-36e67c62bff7 Thissat b330408d-555e-4e96-a04d-effb0915d3a6 bdb29ae1-cdc8-47c1-a9ad-b0533eadb2d1 Thishue 160 8e4e03d1-a8cd-4409-8a92-a112982f9cef d7f108a3-9f99-49f1-9b64-2c8e3a54d56e if ( Flicker ) { thishue = Thishue; thissat =Thissat; flicker(); } 88 int random_bright = random(0, 255); int random_delay = random(10, 100); int random_bool = random(0, random_bright); if (random_bool < 10) { for (int i = 0 ; i < LED_COUNT; i++ ) { leds[i] = CHSV(thishue, thissat, random_bright); } LEDS.show(); delay(random_delay); } 298 void flicker 122.0d 780@290 660@240 corner: 660@290 Q1 640@240 660@240 640@230 corner: 660@250 920@210 920@210 corner: 1096.0d@231.0d left плавная смена цветов всей ленты 170.0d 3@13.0d 940@280 940@280 corner: 1038.0d@298.0d крутящаяся радуга 92.0d 3@10.0d 320@260 320@260 corner: 494.0d@281.0d вывод случайного числа от 0 до 9 168.0d 3@13.0d 950@20 950@20 corner: 1023.0d@40.0d 12 главный блок 67.0d 3@12.0d 960@320 960@320 corner: 1047.0d@340.0d последний блок 81.0d 3@12.0d 438.0d -- СТРОКА -- 280@180 300@180 corner: 340@240 280@180 corner: 360@240 311.5d@193.5d 8 0@90 20@90 corner: 51.0d@110 0@90 corner: 71.0d@110 24@103.5d 0@100 20@100 0@90 corner: 20@110 51.0d@90 corner: 71.0d@110 71.0d@100 23.0d пуск 51.0d@100 90@90 110@90 corner: 190@150 90@90 corner: 210@150 139.0d@103.5d 90@110 corner: 110@130 0@130 20@130 corner: 52.0d@150 0@130 corner: 72.0d@150 24@143.5d 0@140 20@140 0@130 corner: 20@150 52.0d@130 corner: 72.0d@150 72.0d@140 52.0d@140 72.0d@140 corner: 72.0d@140 90@140 110@140 90@130 corner: 110@150 210@50 230@50 corner: 262.0d@70 210@50 corner: 282.0d@70 234@63.5d 210@50 corner: 230@70 262.0d@60 282.0d@60 262.0d@50 corner: 282.0d@70 210@60 230@60 220@60 corner: 220@120 190@120 210@120 190@110 corner: 210@130 400@0 420@0 corner: 480@100 400@0 corner: 500@100 435.0d@14.5d v0 400@30 420@30 400@20 corner: 420@40 v1 ----- ПРИВЕТ ---- 400@50 420@50 314.0d@54.0d 400@40 corner: 420@60 v2 ------ ПОКА ---- 400@70 420@70 331.0d@74.0d 400@60 corner: 420@80 400@80 corner: 420@100 520@70 540@70 corner: 678.0d@250 520@70 corner: 698.0d@250 545.0d@85.0d 520@90 corner: 540@110 speed 520@120 540@120 506.0d@123.5d WS2812_scroll1_rus in_Text c3ba1340-11dd-46a3-aea1-20810e194d20 f88e9b25-2e80-4ea2-ad57-93e5cda7fe43 6f071f29-45eb-407c-998c-1dbf7aff35cd WS2812 бегущая строка1русский /* Пробелы равны дистанции между прокруткой текста. Один пробел 7 равен пикселям. Например 60/7=9, нужно 9 пробелов в кавычках, что равно 63 пикселям, следующий раз текст появится через такое количество пикселей. */ // MATRIX DECLARATION: // Parameter 1 = width of NeoPixel matrix // Parameter 2 = height of matrix // Parameter 3 = pin number (most are valid) // Parameter 4 = matrix layout flags, add together as needed: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Position of the FIRST LED in the matrix; pick two, e.g. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal // rows or in vertical columns, respectively; pick one or the other. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed // in the same order, or alternate lines reverse direction; pick one. // See example below for these values in action. // Parameter 5 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_GRBW Pixels are wired for GRBW bitstream (RGB+W NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // Example for NeoPixel Shield. In this application we'd like to use it // as a 5x8 tall matrix, with the USB port positioned at the top of the // Arduino. When held that way, the first pixel is at the top right, and // lines are arranged in columns, progressive order. The shield uses // 800 KHz (v2) pixels that expect GRB color data. 1761 matrix.fillScreen(0); matrix.setCursor(x, 0); tape = utf8rus(in_Text); matrix.print(tape); if(--x < -36) { x = matrix.width(); if(++pass >= 3) pass = 0; matrix.setTextColor(colors[pass]); } matrix.show(); delay(100); 243 matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(255); matrix.setTextColor(colors[0]); 112 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> Make Arduino Due happy #define PSTR #define PIN 6 tape = ""; String matrix = Adafruit_NeoMatrix(32, 8, PIN, NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE, NEO_GRB + NEO_KHZ800); Adafruit_NeoMatrix colors [] = { matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; const uint16_t x = matrix.width(); int pass = 0; int int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } m[0] = n; target = target + String(m); } return target; 623 String utf8rus String source ebf5c228-e3e3-4fe0-ae7c-dd373fbaf705 3b5f00b2-9abc-4be8-8c9b-8b7bf0f4d225 r f75be403-a1c4-47ba-9cf7-96427eb873f3 f66d4be1-6adb-4504-bc4f-818c05c756d5 g 19140a8c-66de-413d-b227-76215109ae7b 41a247b6-efbd-4429-9ebb-47e7b72539d5 b 1dc3f30c-b06d-42bf-a3b5-51978128e804 ac37b9eb-f9b3-439c-8ee6-e42606c4eb4e 2a204836-8b26-41a8-8ab7-1d648ec995b7 К Ардуино подключается 6 пин. По умолчанию лента подключена последовательно, можно зигзагом, вертикальными столбцами (см ниже) // ДЕКЛАРАЦИЯ МАТРИЦЫ: // Параметр 1 = ширина матрицы NeoPixel // Параметр 2 = высота матрицы // Параметр 3 = номер контакта (большинство из них действительны) // Параметр 4 = флаги макета макета, добавьте вместе по мере необходимости: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Положение светодиода FIRST в матрице; выберите два, например. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT для левого верхнего угла. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: светодиоды расположены горизонтально // строки или вертикальные столбцы соответственно; выбрать тот или другой. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: все строки / столбцы продолжаются // в том же порядке, или в альтернативном направлении в обратном направлении; Выбери один. // См. Пример ниже для этих значений в действии. // Параметр 5 = флаги типа пикселя, добавляем вместе по мере необходимости: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) // NEO_KHZ400 400 кГц (классический «v1» (не v2) пиксель FLORA, драйверы WS2811) // NEO_GRB Пиксели подключены для потока бит GRB (большинство продуктов NeoPixel) // пиксели NEO_RGB подключены для битового потока RGB (v1 FLORA пикселей, а не v2) // Пример для NeoPixel Shield. В этом приложении мы хотели бы использовать его // как матрица высотой 5x8, с портом USB, расположенным в верхней части // Ардуино. Когда это удерживается таким образом, первый пиксель находится в верхнем правом углу и // строки расположены в столбцах, поступательном порядке. Щит использует // 800 КГц (v2) пикселей, которые ожидают данные цвета GRB. NEO_MATRIX_TOP 0x00 // Пиксель 0 находится в верхней части матрицы NEO_MATRIX_BOTTOM 0x01 // Пиксель 0 находится внизу матрицы NEO_MATRIX_LEFT 0x00 // Пиксель 0 находится слева от матрицы NEO_MATRIX_RIGHT 0x02 // Пиксель 0 находится справа от матрицы NEO_MATRIX_CORNER 0x03 // Битмаск для пикселя 0 матричный угол NEO_MATRIX_ROWS 0x00 // Матрица является строкой большой (горизонтальной) NEO_MATRIX_COLUMNS 0x04 // Матрица - основная колонка (вертикальная) NEO_MATRIX_AXIS 0x04 // Битовая маска для раскладки строк / столбцов NEO_MATRIX_PROGRESSIVE 0x00 // Тот же порядок пикселей по каждой линии NEO_MATRIX_ZIGZAG 0x08 // Обратный порядок строк между строками NEO_MATRIX_SEQUENCE 0x08 // Битмаск для порядка строк в пикселях 2473 w 32 9f0ab06f-1a80-4d10-a7c6-59ef443ca0ab e2734705-678f-4dc9-b72f-294097b75ba6 topbotton NEO_MATRIX_TOP NEO_MATRIX_TOP или NEO_MATRIX_BOTTON (верх или низ) f4a0f125-ed1d-42c6-a288-1e0e8274347f 94153221-2653-4da9-bd7b-98e399aa5ec3 rightleft NEO_MATRIX_RIGHT NEO_MATRIX_RIGHT или NEO_MATRIX_LEFT (Справа или слева) 1b378b2d-6278-4554-9463-cfc943ff2dc0 8def349a-6380-4d83-993d-d0b2b123a442 rowscolumns NEO_MATRIX_ROWS NEO_MATRIX_ROWS или NEO_MATRIX_COLUMNS (светодиоды расположены горизонтально в строках или вертикальные столбцы ) a7f9ebe3-aa3b-405e-84dc-9469dfbb3d7b 9c766234-9218-4d00-be87-f41640d6cc35 progressivezigzaq NEO_MATRIX_PROGRESSIVE NEO_MATRIX_PROGRESSIVE или NEO_MATRIX_ZIGZAG (последовательно или обратный порядок строк между строками) 90071f6c-0553-412d-b31d-7c911139ab10 50d83b47-2cc2-4133-9353-eabb77121004 bitstream NEO_KHZ800 NEO_KHZ800 или NEO_KHZ400 (битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) или классический «v1» (не v2) пиксель FLORA, драйверы WS2811 ) 128a07c0-338f-4637-b651-bf0747d49124 f33ece13-15b8-4f9d-b399-cbca17a0ca12 matrix.fillScreen(0); matrix.setCursor(x, 0); tape = utf8rus(in_Text); matrix.print(tape); if(--x < -74) { x = matrix.width(); matrix.setTextColor(matrix.Color(r, g, b)); } matrix.show(); delay(speed); 227 matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(255); matrix.setTextColor(matrix.Color(r, g, b)); 124 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> Make Arduino Due happy #define PSTR #define PIN 6 tape = ""; String matrix = Adafruit_NeoMatrix(w, h, PIN, topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix const uint16_t colors[] = { matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; x = matrix.width(); int pass = 0; int 520@110 corner: 540@130 red 200 520@140 540@140 500.0d@143.5d 0-255 520@130 corner: 540@150 green 520@160 540@160 0-255 520@150 corner: 540@170 blue 520@180 540@180 500.0d@183.5d 0-255 520@170 corner: 540@190 brightness 520@200 540@200 501.0d@203.5d WS2812_scroll_rus long_string 51e0bf87-1e8a-49a7-a9e3-ad3b3d2f4146 b570e21c-62eb-45a9-8f07-084d54fffecb fc9e9bf1-92fe-41c9-a2a1-85368247de61 h b755b8dd-6b64-4547-bd86-7dcdd83b18e2 a480020f-48cc-473e-bff5-fe7986daddca matrix.fillScreen(0); matrix.setCursor(x, 0); tape = utf8rus(in_Text); matrix.print(tape); if(--x < -long_string) { x = matrix.width(); matrix.setTextColor(matrix.Color(r, g, b)); } matrix.show(); delay(speed); 236 length_string brightness 0ef5341b-c15e-4f92-8781-c59d983abadd 9a8560fd-5dfb-424b-83b0-a0a97ad989b1 6e337b9b-31ba-4dae-a55f-ed5d363b35bc matrix.fillScreen(0); matrix.setCursor(x, 0); tape = utf8rus(in_Text); matrix.print(tape); if(--x < -length_string) { x = matrix.width(); matrix.setTextColor(matrix.Color(r, g, b)); } matrix.show(); delay(speed); 238 matrix.begin(); matrix.setTextWrap(0); matrix.setBrightness(brightness); matrix.setTextColor(matrix.Color(255,0, 0)); matrix.print(tape); 147 От 0 до 255 en bda22501-9107-4dae-8af9-283a44f9ebd6 47225166-474a-41bb-b1e3-d622e6d63024 out 7ae312ce-289a-40c8-a1d9-0db430a394cc 156c43a3-7231-4466-a11b-6ecb4331953d edbf02fc-a0d6-4795-af29-ce7818a2e94e out=false; if (en) { matrix.fillScreen(0); matrix.setCursor(x, 0); tape = utf8rus(in_Text); matrix.print(tape); if(--x < -length_string) { x = matrix.width(); matrix.setTextColor(matrix.Color(r, g, b)); } matrix.show(); out=true; delay(speed); } 299 matrix.begin(); matrix.setTextWrap( 0 ); matrix.setBrightness( 255 ); matrix.setTextColor(matrix.Color(r, g, b)); 123 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #define PSTR // Make Arduino Due happy #define PIN 6 tape = ""; String matrix = Adafruit_NeoMatrix(w, h, PIN, topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix x = matrix.width(); int bf2d579a-9d23-4830-996b-51ebeb93329b 54557a04-e214-4e22-ae1a-58b807db40f1 0-255 e96c0230-50d6-45f2-b920-e116af027e11 5b6d79dc-035e-4578-8858-551d33f49ba6 WS2812 бегущая строка русский NEO_MATRIX_PROGRESSIVE matrix.setBrightness( brightness ); matrix.fillScreen(0); matrix.setCursor(x, 0); matrix.print(tape); matrix.setTextColor(matrix.Color(r, g, b)); if(--x < -length_string) { if (en){x = matrix.width();} tape = utf8rus(in_Text); } matrix.show(); delay(speed); 301 matrix.begin(); matrix.setTextWrap( 0 ); matrix.setBrightness( brightness ); matrix.setTextColor(1, 0);// цвет текста и фона 520@190 corner: 540@210 StaticText 520@220 540@220 520@210 corner: 540@230 410@200 430@200 corner: 470@260 410@200 corner: 490@260 438.5d@213.5d Q 340@230 360@230 360@230 corner: 360@230 410@230 430@230 410@220 corner: 430@240 14 280@250 300@250 corner: 357.0d@270 280@250 corner: 377.0d@270 304@263.5d 280@260 300@260 280@250 corner: 300@270 357.0d@250 corner: 377.0d@270 377.0d@260 49.0d 357.0d@260 377.0d@250 corner: 377.0d@260 410@250 430@250 410@240 corner: 430@260 470@240 corner: 490@260 490@250 470@250 490@240 corner: 490@250 StartRunning 520@240 540@240 WS2812_scroll_rus_Новый 42513175-cba1-4d1b-9ba3-c0194855c2e2 7048fbad-442f-45a3-99bf-04f9dc6f15b6 out 40628fd9-5e94-4b6e-8210-f47f2da11970 25750a96-3a72-44d2-86af-bf71934e4de6 eb433fa9-c3d7-450a-9add-22d5e39bf97b w 9f0ab06f-1a80-4d10-a7c6-59ef443ca0ab h b755b8dd-6b64-4547-bd86-7dcdd83b18e2 topbotton NEO_MATRIX_TOP NEO_MATRIX_TOP или NEO_MATRIX_BOTTON (верх или низ) f4a0f125-ed1d-42c6-a288-1e0e8274347f rightleft NEO_MATRIX_RIGHT NEO_MATRIX_RIGHT или NEO_MATRIX_LEFT (Справа или слева) 1b378b2d-6278-4554-9463-cfc943ff2dc0 rowscolumns NEO_MATRIX_ROWS NEO_MATRIX_ROWS или NEO_MATRIX_COLUMNS (светодиоды расположены горизонтально в строках или вертикальные столбцы ) a7f9ebe3-aa3b-405e-84dc-9469dfbb3d7b progressivezigzaq NEO_MATRIX_PROGRESSIVE NEO_MATRIX_PROGRESSIVE или NEO_MATRIX_ZIGZAG (последовательно или обратный порядок строк между строками) 90071f6c-0553-412d-b31d-7c911139ab10 bitstream NEO_KHZ800 NEO_KHZ800 или NEO_KHZ400 (битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) или классический «v1» (не v2) пиксель FLORA, драйверы WS2811 ) 128a07c0-338f-4637-b651-bf0747d49124 out=false; //matrix.invertDisplay(1); if (en) { matrix.setBrightness( brightness ); matrix.fillScreen(0); matrix.print(tape); matrix.setTextColor(matrix.Color(red, green, blue)); matrix.setCursor(x, 0); if(--x < -length_string) { x = matrix.width(); tape = utf8rus(in_Text); out=true; } matrix.show(); delay(speed); } 641 matrix.begin(); matrix.setTextWrap( 0 ); 47 running X_1 b0b6ea8a-748c-48bb-8eba-e04ba53af192 a7326b66-21c2-42c4-81d3-eea272c5f0db 0f970815-67c1-4fac-9d2e-27c6981ff109 WS2812 бегущая строка русский Нов К Ардуино подключается По умолчанию лента подключена последовательно, можно зигзагом, вертикальными столбцами (см ниже) // ДЕКЛАРАЦИЯ МАТРИЦЫ: // Параметр 1 = ширина матрицы NeoPixel // Параметр 2 = высота матрицы // Параметр 3 = номер контакта (большинство из них действительны) // Параметр 4 = флаги макета макета, добавьте вместе по мере необходимости: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Положение светодиода FIRST в матрице; выберите два, например. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT для левого верхнего угла. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: светодиоды расположены горизонтально // строки или вертикальные столбцы соответственно; выбрать тот или другой. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: все строки / столбцы продолжаются // в том же порядке, или в альтернативном направлении в обратном направлении; Выбери один. // См. Пример ниже для этих значений в действии. // Параметр 5 = флаги типа пикселя, добавляем вместе по мере необходимости: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) // NEO_KHZ400 400 кГц (классический «v1» (не v2) пиксель FLORA, драйверы WS2811) // NEO_GRB Пиксели подключены для потока бит GRB (большинство продуктов NeoPixel) // пиксели NEO_RGB подключены для битового потока RGB (v1 FLORA пикселей, а не v2) Пример для NeoPixel Shield. В этом приложении мы хотели бы использовать его как матрица высотой 5x8, с портом USB, расположенным в верхней части Ардуино. Когда это удерживается таким образом, первый пиксель находится в верхнем правом углу и строки расположены в столбцах, поступательном порядке. Щит использует 800 КГц (v2) пикселей, которые ожидают данные цвета GRB. NEO_MATRIX_TOP 0x00 // Пиксель 0 находится в верхней части матрицы NEO_MATRIX_BOTTOM 0x01 // Пиксель 0 находится внизу матрицы NEO_MATRIX_LEFT 0x00 // Пиксель 0 находится слева от матрицы NEO_MATRIX_RIGHT 0x02 // Пиксель 0 находится справа от матрицы NEO_MATRIX_CORNER 0x03 // Битмаск для пикселя 0 матричный угол NEO_MATRIX_ROWS 0x00 // Матрица является строкой большой (горизонтальной) NEO_MATRIX_COLUMNS 0x04 // Матрица - основная колонка (вертикальная) NEO_MATRIX_AXIS 0x04 // Битовая маска для раскладки строк / столбцов NEO_MATRIX_PROGRESSIVE 0x00 // Тот же порядок пикселей по каждой линии NEO_MATRIX_ZIGZAG 0x08 // Обратный порядок строк между строками NEO_MATRIX_SEQUENCE 0x08 // Битмаск для порядка строк в пикселях 2455 Пин подключения Пин к которому подключена лента dabf3bfb-7448-4f44-bf9f-1eb96306492e fed3e13d-541b-4c58-bde6-5427def6909e Ширина шрифта В точках fb389d47-e523-4f03-9392-6ef2c2c48ef4 587e91f4-aba8-466a-8954-4901e6ca2ce3 out=false; if ( brightness != last_brightness ) { matrix.setBrightness( brightness ); last_brightness = brightness;} if ( in_Text != STR_Temp ) // только если текс на входе изменился { STR_Temp = in_Text; tape = utf8rus(in_Text); length_string= tape.length()*( Ширина шрифта); //Так подсчет символов с кирилицей будет верный } if ( millis()> NeoMatrix_NextUpdate )// выполняется только когда пришло время { matrix.fillScreen(0); // if (yust==0) matrix.setCursor( matrix.setCursor((-length_string+matrix.width())/2, 0);//центр //else if (yust==1) matrix.setCursor( matrix.setCursor((0, 0);//слева //else if (yust==2) matrix.setCursor( matrix.setCursor((0, matrix.width());//справа matrix.print(tape); matrix.setTextColor(matrix.Color(red, green, blue)); if (en) { matrix.setCursor(x, 0); if(--x < -length_string) { x = matrix.width(); out=true; } matrix.show(); NeoMatrix_NextUpdate =millis()+speed;// расчет времени когда следующий раз обновить при движении } else NeoMatrix_NextUpdate =millis()+1000; // обновлять раз в секунду если текс стоит. } X_1 = x ; 1223 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #define PSTR // Make Arduino Due happy STR_Temp ; String tape = ""; String matrix = Adafruit_NeoMatrix(w, h, Пин подключения , topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix x = matrix.width(); int length_string ; byte last_inv ; bool last_brightness ; bool NeoMatrix_NextUpdate ; unsigned long aa8b7500-3aa6-4682-9b78-c192e2fbfb28 if ( brightness != last_brightness ) { matrix.setBrightness( brightness ); last_brightness = brightness;} if ( in_Text != STR_Temp ) // только если текс на входе изменился { STR_Temp = in_Text; tape = utf8rus(in_Text); length_string= tape.length()*( Ширина шрифта); //Так подсчет символов с кирилицей будет верный } if ( StartRunning && !last_StartRunning ) //выполняется по преднему фронту { x= w ; //Возмоно нужен 0 не уверен running =true; //начать пробег NeoMatrix_NextUpdate =millis(); // сдвинуть время старта } last_StartRunning=StartRunning; if ( millis()> NeoMatrix_NextUpdate )// выполняется только когда пришло время { matrix.fillScreen(0); // if (yust==0) matrix.setCursor( matrix.setCursor((-length_string+matrix.width())/2, 0);//центр //else if (yust==1) matrix.setCursor( matrix.setCursor((0, 0);//слева //else if (yust==2) matrix.setCursor( matrix.setCursor((0, matrix.width());//справа matrix.print(tape); matrix.setTextColor(matrix.Color(red, green, blue)); if (running) { matrix.setCursor(x, 0); if(--x < -length_string) { x = matrix.width(); } else running = false; matrix.show(); NeoMatrix_NextUpdate =millis()+speed;// расчет времени когда следующий раз обновить при движении } else NeoMatrix_NextUpdate =millis()+1000; // обновлять раз в секунду если текс стоит. } X_1 = x ; 1469 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #define PSTR // Make Arduino Due happy STR_Temp ; String tape = ""; String matrix = Adafruit_NeoMatrix(w, h, Пин подключения , topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix x = matrix.width(); int length_string ; byte last_inv ; bool last_brightness ; bool last_StartRunning ; bool toStart ; bool NeoMatrix_NextUpdate ; unsigned long 520@230 corner: 540@250 37.0d 678.0d@200 698.0d@200 678.0d@190 corner: 698.0d@210 pulse 26.0d 678.0d@220 698.0d@220 22d1cb73-fb77-4b46-8e91-e5e3408187c1 91e70c80-554a-41e3-85c7-a650bd7497a8 end ba3e2421-2d8b-4af8-9d2c-c2d5b94dbe9a 3c4617f6-1b81-4f43-b42f-903095da2f11 1abb6edc-11f1-40a3-89ca-a05a8186cb3e WS2812 бегущая строка русский V.05 К Ардуино подключается По умолчанию лента подключена последовательно, можно зигзагом, вертикальными столбцами (см ниже) Входа: StaticText - выводит статический текст в крайне левое положение, только если нет сигнала на входе StartRunning StartRunning - выводит бегущую строку, строка пробегает один раз. speed - пауза между сдвигами симовлов при бегущей строке, в мс brightness - общая яркость свечения , 0-255 Выхода: running - единица пока бежит строка pulse - импульс при каждом сдвига на один светодиод при бегущей строке end - импуль при окончании бега строки Парамтеры: // ДЕКЛАРАЦИЯ МАТРИЦЫ: w = ширина матрицы NeoPixel h = высота матрицы Пин подключения = номер контакта (большинство из них действительны) // Параметр 4 = флаги макета макета, добавьте вместе по мере необходимости: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Положение светодиода FIRST в матрице; выберите два, например. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT для левого верхнего угла. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: светодиоды расположены горизонтально // строки или вертикальные столбцы соответственно; выбрать тот или другой. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: все строки / столбцы продолжаются // в том же порядке, или в альтернативном направлении в обратном направлении; Выбери один. // См. Пример ниже для этих значений в действии. // Параметр 5 = флаги типа пикселя, добавляем вместе по мере необходимости: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) // NEO_KHZ400 400 кГц (классический «v1» (не v2) пиксель FLORA, драйверы WS2811) // NEO_GRB Пиксели подключены для потока бит GRB (большинство продуктов NeoPixel) // пиксели NEO_RGB подключены для битового потока RGB (v1 FLORA пикселей, а не v2) NEO_MATRIX_TOP 0x00 // Пиксель 0 находится в верхней части матрицы NEO_MATRIX_BOTTOM 0x01 // Пиксель 0 находится внизу матрицы NEO_MATRIX_LEFT 0x00 // Пиксель 0 находится слева от матрицы NEO_MATRIX_RIGHT 0x02 // Пиксель 0 находится справа от матрицы NEO_MATRIX_CORNER 0x03 // Битмаск для пикселя 0 матричный угол NEO_MATRIX_ROWS 0x00 // Матрица является строкой большой (горизонтальной) NEO_MATRIX_COLUMNS 0x04 // Матрица - основная колонка (вертикальная) NEO_MATRIX_AXIS 0x04 // Битовая маска для раскладки строк / столбцов NEO_MATRIX_PROGRESSIVE 0x00 // Тот же порядок пикселей по каждой линии NEO_MATRIX_ZIGZAG 0x08 // Обратный порядок строк между строками NEO_MATRIX_SEQUENCE 0x08 // Битмаск для порядка строк в пикселях 2536 В точках + пробел, т.е. ширина 5 +1 пробел = 6 pulse =0; end =0; if ( brightness != last_brightness ) { matrix.setBrightness( brightness ); last_brightness = brightness;} if ( in_Text != STR_Temp ) // только если текс на входе изменился { STR_Temp = in_Text; tape = utf8rus(in_Text); length_string= tape.length()*( Ширина шрифта); //Так подсчет символов с кирилицей будет верный NeoMatrix_NextUpdate =millis(); // сдвинуть время старта } if ( StartRunning && !last_StartRunning ) //выполняется по преднему фронту { x = matrix.width(); running =true; //начать пробег NeoMatrix_NextUpdate =millis(); // сдвинуть время старта } last_StartRunning=StartRunning; if ( millis()> NeoMatrix_NextUpdate )// выполняется только когда пришло время { matrix.fillScreen(0); // if (yust==0) matrix.setCursor( matrix.setCursor((-length_string+matrix.width())/2, 0);//центр //else if (yust==1) matrix.setCursor( matrix.setCursor((0, 0);//слева //else if (yust==2) matrix.setCursor( matrix.setCursor((0, matrix.width());//справа matrix.print(tape); matrix.setTextColor(matrix.Color(red, green, blue)); if (running) { matrix.setCursor(x, 0); if(--x < -length_string) { running = false; end =true; } matrix.show(); pulse =1; NeoMatrix_NextUpdate =millis()+speed;// расчет времени когда следующий раз обновить при движении } else { if ( StaticText ) { matrix.setCursor(0, 0); matrix.show(); } NeoMatrix_NextUpdate =millis()+1000; // обновлять раз в секунду если текс стоит. } } 1593 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #define PSTR // Make Arduino Due happy STR_Temp ; String tape = ""; String matrix = Adafruit_NeoMatrix(w, h, Пин подключения , topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix x = matrix.width(); int length_string ; int last_brightness ; bool last_StartRunning ; bool toStart ; bool NeoMatrix_NextUpdate ; unsigned long 678.0d@210 corner: 698.0d@230 9 730@250 750@250 corner: 781.0d@270 730@250 corner: 801.0d@270 754@263.5d 730@250 corner: 750@270 781.0d@260 801.0d@260 781.0d@250 corner: 801.0d@270 730@260 750@260 698.0d@240 corner: 698.0d@260 19.0d 678.0d@240 698.0d@240 678.0d@230 corner: 698.0d@250 520@100 186d4abb-0479-4193-ad68-c5649269a30d WS2812 бегущая строка русский V0,11 К Ардуино подключается По умолчанию лента подключена последовательно, можно зигзагом, вертикальными столбцами (см ниже) Текс выводится только когда единица на StaticText или одиночный пробе после единицы на StartRunning. Обновление текста происходи при обновлении данны на входах red , green, blue , in_Text , brightness Входа: StaticText - выводит статический текст в крайне левое положение, только если нет сигнала на входе StartRunning StartRunning - выводит бегущую строку, строка пробегает один раз. speed - пауза между сдвигами симовлов при бегущей строке, в мс brightness - общая яркость свечения , 0-255 Выхода: running - единица пока бежит строка pulse - импульс при каждом сдвига на один светодиод при бегущей строке end - импуль при окончании бега строки Парамтеры: // ДЕКЛАРАЦИЯ МАТРИЦЫ: w = ширина матрицы NeoPixel h = высота матрицы Пин подключения = номер контакта (большинство из них действительны) // Параметр 4 = флаги макета макета, добавьте вместе по мере необходимости: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Положение светодиода FIRST в матрице; выберите два, например. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT для левого верхнего угла. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: светодиоды расположены горизонтально // строки или вертикальные столбцы соответственно; выбрать тот или другой. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: все строки / столбцы продолжаются // в том же порядке, или в альтернативном направлении в обратном направлении; Выбери один. // См. Пример ниже для этих значений в действии. // Параметр 5 = флаги типа пикселя, добавляем вместе по мере необходимости: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel с светодиодами WS2812) // NEO_KHZ400 400 кГц (классический «v1» (не v2) пиксель FLORA, драйверы WS2811) // NEO_GRB Пиксели подключены для потока бит GRB (большинство продуктов NeoPixel) // пиксели NEO_RGB подключены для битового потока RGB (v1 FLORA пикселей, а не v2) NEO_MATRIX_TOP 0x00 // Пиксель 0 находится в верхней части матрицы NEO_MATRIX_BOTTOM 0x01 // Пиксель 0 находится внизу матрицы NEO_MATRIX_LEFT 0x00 // Пиксель 0 находится слева от матрицы NEO_MATRIX_RIGHT 0x02 // Пиксель 0 находится справа от матрицы NEO_MATRIX_CORNER 0x03 // Битмаск для пикселя 0 матричный угол NEO_MATRIX_ROWS 0x00 // Матрица является строкой большой (горизонтальной) NEO_MATRIX_COLUMNS 0x04 // Матрица - основная колонка (вертикальная) NEO_MATRIX_AXIS 0x04 // Битовая маска для раскладки строк / столбцов NEO_MATRIX_PROGRESSIVE 0x00 // Тот же порядок пикселей по каждой линии NEO_MATRIX_ZIGZAG 0x08 // Обратный порядок строк между строками NEO_MATRIX_SEQUENCE 0x08 // Битмаск для порядка строк в пикселях 2748 30 Центрировать Статический текст 903497cb-2556-4f7d-af63-cf16964b3cab 8afae031-ef5f-4167-af07-dc64409cad56 pulse =0; end =0; toStart=0; if ( brightness != last_brightness ) { matrix.setBrightness( brightness ); last_brightness = brightness ; toStart=1;} if (matrix.Color(red, green, blue)!=last_Color ) { last_Color=matrix.Color(red, green, blue); matrix.setTextColor(last_Color); toStart=1;} if ( !running &&(in_Text != STR_Temp)) // только если текст на входе изменился { STR_Temp = in_Text; tape = utf8rus(in_Text); length_string= tape.length()*( Ширина шрифта); //Так подсчет символов с кирилицей будет верный toStart=1; } if ( StartRunning && !last_StartRunning ) //обнаружение переднего фронта StartRunning { x = matrix.width(); running =true; //начать пробег toStart=1; } last_StartRunning=StartRunning; if (StaticText && !last_StaticText) // обнаружение переднего фронта StaticText { toStart=1; } last_StaticText=StaticText; if (running && (millis()> NeoMatrix_NextUpdate)) // расчеты времени и координа для бегущей строки { NeoMatrix_NextUpdate =millis()+speed;// расчет времени когда следующий раз обновить при движении toStart=1; if(--x < -length_string) {running = false; end =true; } pulse =1; } if ( toStart && (running || StaticText ))// выполняется вывод на табло { matrix.fillScreen(0); if (StaticText && !running ) // если ститический то указать { if ( Центрировать ) x=(-length_string+matrix.width())/2; else x=0; } matrix.setCursor(x, 0); matrix.print(tape); matrix.show(); } 1468 #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #define PSTR // Make Arduino Due happy matrix = Adafruit_NeoMatrix(w, h, Пин подключения , topbotton + rightleft + rowscolumns + progressivezigzaq, NEO_GRB + bitstream); Adafruit_NeoMatrix STR_Temp ; String tape ; String NeoMatrix_NextUpdate ; unsigned long last_Color ; uint16_t x ; int length_string ; int last_brightness ; byte last_StartRunning ; bool last_StaticText ; bool toStart ; bool 138.0d 540@100 500@90 corner: 500@100 480@90 500@90 480@80 corner: 500@100 400@90 Sel 420@90 210@90 corner: 210@140 190@140 210@140 190@130 corner: 210@150 90@120 110@120 71.0d@100 corner: 71.0d@210 280@210 300@210 280@200 corner: 300@220 0@210 20@210 corner: 60@250 0@210 corner: 80@250 26.5d@224.5d I 0@240 14@240 0@230 corner: 14@250 60@230 corner: 80@250 80@240 60@240 80@230 corner: 80@240 280@230 300@230 280@220 corner: 300@240 340@220 corner: 360@240 368.0d --Упровление строка - эфект -- 240@60 260@60 corner: 317.0d@80 240@60 corner: 337.0d@80 264@73.5d 60@60 80@60 corner: 193.0d@80 60@60 corner: 213.0d@80 84@73.5d 213.0d@70 105.0d переключ строка вкл 19273178 199.0d@70 213.0d@70 corner: 213.0d@70 240@70 260@70 240@60 corner: 260@80 317.0d@70 337.0d@70 317.0d@60 corner: 337.0d@80 240@110 260@110 corner: 319.0d@130 240@110 corner: 339.0d@130 264@124.5d 60@110 80@110 corner: 189.0d@130 60@110 corner: 209.0d@130 84@124.5d 209.0d@120 101.0d переключ эфект вкл 174300958 195.0d@120 209.0d@120 corner: 209.0d@120 240@120 260@120 240@110 corner: 260@130 319.0d@120 339.0d@120 319.0d@110 corner: 339.0d@130 211.0d 9600 arduinoIDE 189 1024 255558060 Arduino Pro Mini (ATmega328, 5V, 16MHz) 24863483