Поправка скетча, управления матрицами на ws2812 от задних фонарей автомобиля

vidro_boltiv
vidro_boltiv аватар
Offline
Зарегистрирован: 18.10.2016

Здраствуйте. Ищу кто может, НЕ забезплатно, поправить скетч и дописать немного. Есть скетч, на Мікро 32U4, управления задними световими приборами, точнее управление матрицами на ws2812, от задних фонарей автомобиля. Это уже готовий рабоччий блок, которий работает. Нужно поправить, облагородить скетр ,и дописать пара строчек кода. Скетч расчитан на постоянние сигнали от ламп управления задними фонарями авто, и не расчитан на лампи поворотов, которие моргают 1 раз в секунду. Также в скетче реализовано управлени от другого блока по шине I2C.  Устройство может работать автономно от задних фонарей, а может от сигналов другого блока (через мобюильний телефон) по шине I2C. Скетч приведен ниже (состоит из трех частей, вкладок).  Коменти в скетче на украинском язике, если нада, то напишу на русском. 

001/*
002 *
003 *  // Micro 32U4, I2C
004 * 2 - SDA
005 * 3 - SCL
006 *
007 * I2C2.writeByte(0x02,0,2);
008 * база - 2 (Arduino_m) - REG_matrix - 02
009 * 0 - Режим матриці
010 * 1 - індикація режиму матриць
011 * 2 - стан встановлення звязку між контролером і телефоном
012 */
013  
014//#include <Arduino.h>
015#include <Adafruit_GFX.h>
016#include <Adafruit_NeoMatrix.h>
017#include <iarduino_I2C_connect.h>
018#include "Wire.h"
019 
020// Призначення пінів
021const uint8_t pin_m_l = A0;       // Ліва матриця
022const uint8_t pin_m_r = A1;       // Права матриця
023const uint8_t pin_L = 4;
024const uint8_t pin_R = 5;
025const uint8_t pin_58 = 6;
026const uint8_t pin_54 = 7;
027const uint8_t pin_RF = 8;
028const uint8_t pin_mfa_1 = 9;
029const uint8_t pin_mfa_2 = 10;
030const uint8_t pin_mfa_3 = A3;
031 
032iarduino_I2C_connect I2C2;      // объявляем переменную для работы c библиотекой iarduino_I2C_connect
033byte REG_matrix[4];             // объявляем массив, данные которого будут доступны для чтения/записи по шине I2C
034 
035Adafruit_NeoMatrix matrix_l = Adafruit_NeoMatrix(32, 8, pin_m_l, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800) ;
036Adafruit_NeoMatrix matrix_r = Adafruit_NeoMatrix(32, 8, pin_m_r, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800) ;
037 
038// Змінні для вибору режимів матриць
039uint8_t mode_m=0;
040 
041// Загальні змінні
042int16_t brightness = 50;        // 10
043uint8_t mode_connect=0;
044uint8_t i=0;
045bool bmod_L, bmod_R, bmod_58, bmod_54, bmod_RF, bmod_mfa_1, bmod_mfa_2, bmod_mfa_3;
046 
047int32_t temp_1 = 0 ;            // Тимчасова змінна, для затримки
048uint8_t  delay_1 = 500;         // Установка часу затримки, 1000 мс, для millis-1
049 
050const uint8_t ON=0;             // 0
051const uint8_t OFF=1;            // 1
052 
053// Налаштування режиму - L (Лівий поворот)
054int32_t previousMillis_l = 0;   // время, когда состояние светодиода обновлялось
055int32_t interval_l = 500;       // половина периода мигания (в миллисекундах)
056uint8_t m_l_State = LOW;        // Стан лівої матриці: ВКЛ/ВИКЛ
057 
058// Налаштування режиму - R (Правий поворот)
059int32_t previousMillis_r = 0;   // время, когда состояние светодиода обновлялось
060int32_t interval_r = 500;       // половина периода мигания (в миллисекундах)
061uint8_t m_r_State = LOW;        // Стан правої матриці: ВКЛ/ВИКЛ
062 
063// Налаштування режиму - LR (Аварійка)
064int32_t previousMillis_lr = 0;  // время, когда состояние светодиода обновлялось
065int32_t interval_lr = 500;      // половина периода мигания (в миллисекундах)
066uint8_t m_lr_State = LOW;       // Стан лівої і правої матриці: ВКЛ/ВИКЛ
067int16_t brightness_lr = 50;      // 25
068 
069// Налаштування режиму - 58 (Габарит)
070int16_t brightness_58 = 50;      // 10
071 
072// Налаштування режиму - 54
073int32_t previousMillis_54 = 0;  // время, когда состояние светодиода обновлялось
074int32_t interval_54 = 750;      // половина периода мигания (в миллисекундах)
075uint8_t ledState_54 = LOW;      // состояние светодиода: ВКЛ/ВИКЛ
076int16_t brightness_54 = 50;     // 50
077 
078// Налаштування режиму - rf (Задній Хід)
079int16_t brightness_rf = 50;      // 50
080 
081// Налаштування режиму - text
082uint8_t speed_text = 30;        // Швидкість біжучої стрічки //30 (більша цифра - повільніше)
083int16_t num_text = 3;           // Порядковий номер тексту в базі
084int16_t mode_tt= 0;
085uint32_t time_text;             // Змінна для зберігання точки відліку
086int16_t x_l = matrix_l.width();
087int16_t x_r = matrix_r.width();
088uint8_t pass_l = 0;
089uint8_t pass_r = 6;
090 
091static const uint8_t PROGMEM myBitmap[][32] = {
092  /*  0 */ 0xff,0xff,0xff,0xff,0x81,0x81,0x81,0x81,0xbd,0xbd,0xbd,0xbd,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xbd,0xbd,0xbd,0xbd,0x81,0x81,0x81,0x81,0xff,0xff,0xff,0xff,
093  /*  1 */ 0xff,0xff,0xff,0xff,0x81,0x81,0x81,0x81,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0x81,0x81,0x81,0x81,0xff,0xff,0xff,0xff,
094  /*  2 */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
095  /*  3 */ 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
096  /*  4 */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
097  /*  5 */ 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
098  /*  6 */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
099  /*  7 */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0x0c,0x30,0xc3,0xc3,0x0c,0x30,0xc3,0xc3,0x0c,0x30,0xc3,0xc3,0x0c,0x30,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
100  /*  8 */ 0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,
101  /*  9 */ 0x99,0x99,0x99,0x99,0x5A,0x5A,0x5A,0x5A,0x3C,0x3C,0x3C,0x3C,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0x3C,0x3C,0x3C,0x3C,0x5A,0x5A,0x5A,0x5A,0x99,0x99,0x99,0x99,
102  /* 10 */ 0x3C,0x3C,0x3C,0x3C,0x42,0x42,0x42,0x42,0xA5,0xA5,0xA5,0xA5,0x81,0x81,0x81,0x81,0xA5,0xA5,0xA5,0xA5,0x99,0x99,0x99,0x99,0x42,0x42,0x42,0x42,0x3C,0x3C,0x3C,0x3C,
103  /* 11 */ 0x3C,0x3C,0x3C,0x3C,0x42,0x42,0x42,0x42,0x99,0x99,0x99,0x99,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0x99,0x99,0x99,0x99,0x42,0x42,0x42,0x42,0x3C,0x3C,0x3C,0x3C,
104           60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
105  /* 13 */ 0x3C,0x3C,0x3C,0x3C,0x42,0x42,0x42,0x42,0x99,0x99,0x99,0x99,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0x99,0x99,0x99,0x99,0x42,0x42,0x42,0x42,0x3C,0x3C,0x3C,0x3C,
106};
107 
108const char *slogans[]= {
109  "<<<<<"// 0
110  ">>>>>"// 1
111  "STOP",   // 2
112  "XXXXX"// 3
113  "<< >>"// 4
114  "OOOOO"// 5
115  "!!!!!"// 6
116  "====="// 7
117  "#####"// 8
118};
119   
120const uint16_t colors_t[]={
121  0xF800,  // 0 - Червоний   red
122  0x07E0,  // 1 - Зелений    green
123  0xFFE0,  // 2 - Жовтий     YELLOW
124  0x001F,  // 3 - Синій      blue
125  0xF81F,  // 4 - Пурпурний  magenta (Фіолетовий)
126  0x07FF,  // 5 - Голубий    cyan
127  0xFFFF   // 6 - Білий      white
128    //  #define black 0x0000 
129  };
130 
131const uint16_t colors[]={
132  0xF800,  // 0 - Червоний   red
133  0x07E0,  // 1 - Зелений    green
134  0xFFE0,  // 2 - Жовтий     YELLOW
135  0x001F,  // 3 - Синій      blue
136  0xF81F,  // 4 - Пурпурний  magenta (Фіолетовий)
137  0x07FF,  // 5 - Голубий    cyan
138  0xFFFF   // 6 - Білий      white
139    //  #define black 0x0000 
140  };
141 
142const char *names[]  = {
143  "Перепрошую",                       // 0 - 70
144  "Вибачте",                          // 1 - 60
145  "Дякую.",                           // 2 - 40
146 
147};
148 
149void setup() {
150  Wire.begin(0x02);                   // инициируем подключение к шине I2C в качестве ведомого (slave) устройства, с указанием своего адреса на шине.
151  I2C2.begin(REG_matrix);             // инициируем возможность чтения/записи данных по шине I2C, из/в указываемый массив
152  //Serial.begin(115200);
153  matrix_l.begin();
154  matrix_r.begin();
155  matrix_l.cp437(true);
156  matrix_r.cp437(true);
157  matrix_l.setTextWrap(false);
158  matrix_r.setTextWrap(false);
159  matrix_l.fillScreen(0);
160  matrix_r.fillScreen(0);
161  matrix_l.clear(); // Очищаємо
162  matrix_r.clear(); // Очищаємо
163  matrix_l.show();                    // Виводимо, тобто гасимо всі, очищені
164  matrix_r.show();                    // Виводимо, тобто гасимо всі, очищені
165  pinMode(pin_m_l, OUTPUT);
166  pinMode(pin_m_r, OUTPUT);
167  pinMode(pin_L, INPUT);
168  pinMode(pin_R, INPUT);
169  pinMode(pin_58, INPUT);
170  pinMode(pin_54, INPUT);
171  pinMode(pin_RF, INPUT);
172  pinMode(pin_mfa_1, INPUT);
173  pinMode(pin_mfa_2, INPUT);
174  pinMode(pin_mfa_3, INPUT);
175  //Serial.println("Ready!");
176}
177 
178void loop()
179{
180  //Serial.println("loop");
181  bmod_L = digitalRead(pin_L);
182  bmod_R = digitalRead(pin_R);
183  bmod_58 = digitalRead(pin_58);
184  bmod_54 = digitalRead(pin_54);
185  bmod_RF = digitalRead(pin_RF);
186  bmod_mfa_1 = digitalRead(pin_mfa_1);
187  bmod_mfa_2 = digitalRead(pin_mfa_2);
188  bmod_mfa_3 = digitalRead(pin_mfa_3);
189  //mode_l();
190  //mode_r();
191  //mode_lr();
192  //mode_58();
193  //mode_54();
194  //mode_rf();
195  //mode_m2();
196  //mode_m3();
197  //mode_m4();
198  //mode_m5();
199  //mode_m6();
200  //mode_m7();
201  //mode_text2(num_text);
202  //mode_text3(num_text,mode_tt);
203  //mods_54(); // test
204  //mods_11(); // test
205  
206 //-------------------------------------------------------------------------
207  mode_connect=REG_matrix[2]; // Статус зєднання з телефоном (1 - Розєднано, 0 - Зєднано)
208  //mode_connect=1;    // для тесту
209  if (mode_connect==0){
210    compare();
211  } else {
212    mobila();
213  }
214//-------------------
215} // loop
216 
217//---------mobila----------
218void mobila() {
219  mode_m=REG_matrix[0]; // Режим матриці
220  if (mode_m >= 0 && mode_m <= 16) {  // Якщо дорівнює або більше 0 і менше або дорівнює 16
221    if (mode_m==1) {
222      mode_l();
223      //Serial.println("Лівий поворот");
224    } else if (mode_m==2) {
225      mode_r();
226      //Serial.println("Правий поворот");
227    } else if (mode_m==3) {
228      mode_lr();
229      //Serial.println("Аварійка");
230    } else if (mode_m==4) {
231      mode_58();
232      //Serial.println("Габарит");
233    } else if (mode_m==5) {
234      mode_54();
235      //Serial.println("Стоп-сигнал");
236    } else if (mode_m==6) {
237      mode_rf();
238      //Serial.println("Задній хід");
239    } else if (mode_m==7) {
240      mode_m1();
241      //REG_matrix[1] = 7; // Індикація режиму матриць
242      //Serial.println("Програма М_1");
243    } else if (mode_m==8) {
244      //mode_m2();
245      mode_text2(0); // Перепрошую
246      REG_matrix[1] = 8; // Індикація режиму матриць
247      //Serial.println("Програма М_2");
248    } else if (mode_m==9) {
249      //mode_m3();
250      mode_text2(2); // Дякую
251      REG_matrix[1] = 9; // Індикація режиму матриць
252      //Serial.println("Програма М_3");
253    } else if (mode_m==10) {
254      //mode_m4();
255      mode_text2(3); // Привіт з Волині
256      REG_matrix[1] = 10; // Індикація режиму матриць
257      //Serial.println("Програма М_4");
258    } else if (mode_m==11) {
259      //mode_m5();
260      mode_text2(5); // UARNet - Супер iнтернет!
261      REG_matrix[1] = 11; // Індикація режиму матриць
262      //Serial.println("Програма М_5");
263    } else if (mode_m==12) {
264      //mode_m6();
265      mode_text2(6); // Привіт.
266      REG_matrix[1] = 12; // Індикація режиму матриць
267      //Serial.println("Програма М_6");
268    } else if (mode_m==13) {
269      //mode_m7();
270      mods_58 ();
271      REG_matrix[1] = 13; // Індикація режиму матриць
272      //Serial.println("Програма М_7");
273    } else if (mode_m==14) {
274      //mode_m8();
275      mods_54();
276      REG_matrix[1] = 14; // Індикація режиму матриць
277      //Serial.println("Програма М_8");
278    } else if (mode_m==15) {
279      //mode_m9();
280      mods_rf;
281      REG_matrix[1] = 15; // Індикація режиму матриць
282      //Serial.println("Програма М_9");
283    } else if (mode_m==16) {
284      //mode_m10();
285      REG_matrix[1] = 16; // Індикація режиму матриць
286      //Serial.println("Програма М_10");
287      //} else if (mode_m==0) {
288      //mode_0();
289      //Serial.println("Програма М_0");
290    } else {
291      mode_0();
292      REG_matrix[1] = 0;  // Режим матриці
293      //Serial.println("Помилка");
294    }
295  }
296}
297//----------------------------------------------------------------------------
298void compare() {
299  // && - і, || - або
300  if ( (bmod_L==ON && bmod_R==OFF && bmod_58==OFF && bmod_54==OFF && bmod_RF==OFF) ||
301       (bmod_L==ON && bmod_R==OFF && bmod_58==ON && bmod_54==OFF && bmod_RF==OFF) ) {
302     //Serial.println("_Лівий поворот_");
303     //REG_matrix[1] = 1; // Індикація режиму матриць
304     mode_l();
305  } else if ((bmod_L==OFF && bmod_R==ON && bmod_58==OFF && bmod_54==OFF && bmod_RF==OFF) ||
306             (bmod_L==OFF && bmod_R==ON && bmod_58==ON && bmod_54==OFF && bmod_RF==OFF) ) {
307    //Serial.println("_Правий поворот_");
308    //REG_matrix[1] = 2; // Індикація режиму матриць
309    mode_r();
310  } else if ( (bmod_L==ON && bmod_R==ON && bmod_58==OFF && bmod_54==OFF && bmod_RF==OFF) ||
311              (bmod_L==ON && bmod_R==ON && bmod_58==ON && bmod_54==OFF && bmod_RF==OFF) ) {
312    //Serial.println("_Аварійка_");
313    //REG_matrix[1] = 3;  // Індикація режиму матриць
314    mode_lr();
315  } else if (bmod_L==OFF && bmod_R==OFF && bmod_58==ON && bmod_54==OFF && bmod_RF==OFF) {
316    //Serial.println("_Габарит_");
317    //REG_matrix[1] = 4;  // Індикація режиму матриць
318    mode_58();
319  } else if (bmod_54==ON) {
320    //Serial.println("_Стоп-сигнал_");
321    //REG_matrix[1] = 5;  // Індикація режиму матриць
322    mode_54();
323  } else if ((bmod_RF==ON) || (bmod_RF==ON && bmod_RF==ON)) {
324    //Serial.println("_Задній хід_");
325    //REG_matrix[1] = 6;  // Індикація режиму матриць
326    mode_rf();
327  } else if (bmod_mfa_1==ON) {
328    //Serial.println("_mfa_1_");
329    //REG_matrix[1] = 7;  // Індикація режиму матриць
330    //mfa_1();
331    mode_text2(0); // Перепрошую
332  } else if (bmod_mfa_2==ON) {
333    //Serial.println("_mfa_2_");
334    //REG_matrix[1] = 8;  // Індикація режиму матриць
335    //mfa_2();
336    mode_text2(2); // Дякую
337  } else if (bmod_mfa_3==ON) {
338    //Serial.println("_mfa_3_");
339    //REG_matrix[1] = 9;  // Індикація режиму матриць
340    //mfa_3();
341    mode_text2(5); // UARNet - Супер iнтернет!
342  } else  {
343    //Serial.println("_Помилка_");
344    //REG_matrix[1] = 0;  // Індикація режиму матриць
345    mode_0();
346  }
347 }
001//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
002//------------------------------- режим 00 -------------------------------
003void mode_0() {
004  //strcpy (RemoteXY.text_pixel_mode, "Mode-0");
005  //Serial.println("Mode-00  ");
006  matrix_l.clear();                 // Очищаємо
007  matrix_r.clear();                 // Очищаємо
008  matrix_l.fillScreen(0);
009  matrix_r.fillScreen(0);
010  matrix_l.show();                    // Виводимо, тобто гасимо всі, очищені
011  matrix_r.show();                    // Виводимо, тобто гасимо всі, очищені
012 
013  REG_matrix[1] = 0;  // Індикація режиму матриць
014 
015}
016 
017//------------------------------- режим L -------------------------------
018//Моргає ліва матриця, лівий поворот, жовтим
019void mode_l() {
020  REG_matrix[1] = 1;  // Індикація режиму матриць
021  //Serial.println("Mode-L");
022  matrix_l.clear(); // Очищаємо
023  matrix_r.clear(); // Очищаємо
024  //uint32_t currentMillis = millis();     // Поточний час в мілісекундах
025  matrix_l.setBrightness(brightness_lr);
026  matrix_l.setTextColor(colors_t[2]);
027  matrix_l.setCursor(2, 0);             // Відступ курсора (першого символа)
028  if(millis() - previousMillis_l > interval_l){
029    // сохраняем последний момент, когда менялось состояние светодиода
030    previousMillis_l = millis();
031    if (m_l_State == LOW){
032      matrix_l.print(slogans[0]);
033      matrix_l.show();                  // Виводимо напис
034      matrix_r.show();
035      m_l_State = HIGH;
036    } else {
037      matrix_l.clear();                 // Очищаємо
038      matrix_l.show();                  // Виводимо, тобто гасимо всі, очищені
039      matrix_r.show();
040      m_l_State = LOW;
041    }
042  }   // millis
043}     // void mode_l
044 
045//------------------------------- режим R -------------------------------
046//Моргає ліва матриця, лівий поворот, жовтим
047void mode_r() {
048  REG_matrix[1] = 2;  // Індикація режиму матриць
049  //Serial.println("Mode-R");
050  matrix_l.clear(); // Очищаємо
051  matrix_r.clear(); // Очищаємо
052  //uint32_t currentMillis = millis(); // текущее время в миллисекундах
053  matrix_r.setBrightness(brightness_lr);
054  matrix_r.setTextColor(colors_t[2]);
055  matrix_r.setCursor(2, 0);
056  if(millis() - previousMillis_r > interval_r){
057    // сохраняем последний момент, когда менялось состояние светодиода
058    previousMillis_r = millis();
059    if (m_r_State == LOW){
060      matrix_r.print(slogans[1]);
061      matrix_l.show();
062      matrix_r.show(); // Виводимо напис
063      m_r_State = HIGH;
064    } else {
065      matrix_r.clear(); // Очищаємо
066      matrix_l.show();
067      matrix_r.show();  // Виводимо, тобто гасимо всі, очищені
068      m_r_State = LOW;
069    }
070  } // millis
071} // void mode_r
072 
073//------------------------------- режим LR -------------------------------
074//Моргає ліва і права матриця, аварійка, жовтим
075void mode_lr() {
076  REG_matrix[1] = 3;  // Індикація режиму матриць
077  //Serial.println("Mode-LR");
078  matrix_l.clear(); // Очищаємо
079  matrix_r.clear(); // Очищаємо
080  //uint32_t currentMillis = millis(); // текущее время в миллисекундах
081  matrix_l.setBrightness(brightness_lr);
082  matrix_r.setBrightness(brightness_lr);
083  matrix_r.setTextColor(colors_t[2]);
084  matrix_l.setTextColor(colors_t[2]);
085  matrix_l.setCursor(2, 0);
086  matrix_r.setCursor(1, 0);
087  if(millis() - previousMillis_lr > interval_lr){
088    // сохраняем последний момент, когда менялось состояние светодиода
089    previousMillis_lr = millis();
090    if (m_lr_State == LOW){
091      matrix_l.print(slogans[0]);
092      matrix_r.print(slogans[1]);
093      matrix_l.show(); // Виводимо напис
094      matrix_r.show(); // Виводимо напис
095      m_lr_State = HIGH;
096    } else {
097      matrix_l.clear(); // Очищаємо
098      matrix_r.clear(); // Очищаємо
099      matrix_l.show();  // Виводимо, тобто гасимо всі, очищені
100      matrix_r.show();  // Виводимо, тобто гасимо всі, очищені
101      m_lr_State = LOW;
102    }
103 // millis
104}   // void mode_lr
105 
106//------------------------------- режим 58 -------------------------------
107//Світиться квадратами ліва і права матриця, габарит, червоним
108void mode_58() {
109  REG_matrix[1] = 4;  // Індикація режиму матриць
110  //Serial.println("Mode-58");
111  matrix_l.clear(); // Очищаємо
112  matrix_r.clear(); // Очищаємо
113  matrix_l.setBrightness(brightness_58);
114  matrix_r.setBrightness(brightness_58);
115  matrix_l.drawBitmap(0, 0, myBitmap[0], 32,8, colors_t[0]);
116  matrix_r.drawBitmap(0, 0, myBitmap[0], 32,8, colors_t[0]);
117  matrix_l.show();
118  matrix_r.show();
119}
120 
121//------------------------------- режим 54 -------------------------------
122//Світиться слово STOP ліва і права матриця, стоп-сигнал, червоним, ярким
123void mode_54() {
124  REG_matrix[1] = 5;  // Індикація режиму матриць
125  //Serial.println("Mode-54");
126  matrix_l.clear(); // Очищаємо
127  matrix_r.clear(); // Очищаємо
128  matrix_l.setBrightness(brightness_54);
129  matrix_r.setBrightness(brightness_54);
130  matrix_l.setTextColor(colors_t[0]);
131  matrix_r.setTextColor(colors_t[0]);
132  matrix_l.setCursor(5, 0);
133  matrix_r.setCursor(5, 0);
134  matrix_l.print(slogans[2]);
135  matrix_r.print(slogans[2]);
136  matrix_l.show();
137  matrix_r.show();
138}                                 
139 
140//------------------------------- режим RF -------------------------------
141//Світиться колами ліва і права матриця, задній хід, білим, ярким
142void mode_rf() {
143  REG_matrix[1] = 6;  // Індикація режиму матриць
144  //Serial.println("Mode-RF");
145  matrix_l.clear(); // Очищаємо
146  matrix_r.clear(); // Очищаємо
147  matrix_l.setBrightness(brightness_rf);
148  matrix_r.setBrightness(brightness_rf);
149  matrix_l.drawBitmap(0, 0, myBitmap[1], 32,8, colors_t[6]);
150  matrix_r.drawBitmap(0, 0, myBitmap[1], 32,8, colors_t[6]);
151  matrix_l.show();
152  matrix_r.show(); 
153}
154 
155//------------------------------- режим 01 -------------------------------
156// Смайлики
157void mode_m1() {                   
158  REG_matrix[1] = 7;  // Індикація режиму матриць
159  //Serial.println("Mode-58");
160  matrix_l.setBrightness(brightness);
161  matrix_r.setBrightness(brightness);
162  matrix_l.fillScreen(0);
163  matrix_r.fillScreen(0);
164  matrix_l.drawBitmap(0, 0, myBitmap[10], 32,8, colors_t[3]);
165  matrix_r.drawBitmap(0, 0, myBitmap[10], 32,8, colors_t[0]);
166 //matrix_r.drawBitmap(0, 0, myBitmap[4], 32,8, colors[6]);
167  matrix_l.show();
168  matrix_r.show();
169}
170 
171 
172//------------------------------- режим 02 -------------------------------
173void mode_m2() {                      
174  REG_matrix[1] = 8;  // Індикація режиму матриць
175  //Serial.println("Mode-R");
176 
177 
178 
179  
180}
181 
182//------------------------------- режим 03 -------------------------------
183void mode_m3() {                      
184  REG_matrix[1] = 9;  // Індикація режиму матриць
185  //Serial.println("Mode-R");
186 
187 
188 
189}
190//------------------------------- режим 04 -------------------------------
191void mode_m4() {                      
192  REG_matrix[1] = 10;  // Індикація режиму матриць
193  //Serial.println("Mode-R");
194 
195 
196 
197}
198//------------------------------- режим 05 -------------------------------
199void mode_m5() {                   
200  REG_matrix[1] = 11;  // Індикація режиму матриць
201  //Serial.println("Mode-LR");
202   uint8_t pass = 0;
203  matrix_l.setBrightness(brightness);
204  matrix_r.setBrightness(brightness); 
205  matrix_l.fillScreen(0);
206  matrix_r.fillScreen(0);  
207  matrix_l.setCursor(x_l, 0);
208  matrix_r.setCursor(x_r, 0);
209  matrix_l.print(utf8rus7(names[3]));
210  matrix_r.print(utf8rus7(names[2]));
211  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
212    time_text = millis();
213    if(--x_l < -90 && --x_r < -255 ) {      // width
214      x_l = matrix_l.width();
215      x_r = matrix_r.width();
216      if(++pass >= 7) pass = 0;
217      matrix_l.setTextColor(colors_t[pass]);
218      matrix_r.setTextColor(colors_t[pass]);
219    }
220  } // millis
221  matrix_l.show();
222  matrix_r.show();
223}
224 
225//------------------------------- режим 06 -------------------------------
226void mode_m6() {                      
227  REG_matrix[1] = 12;  // Індикація режиму матриць
228  //Serial.println("Mode-R");
229  matrix_l.setBrightness(brightness);
230  matrix_r.setBrightness(brightness);
231  matrix_l.fillScreen(0);
232  matrix_r.fillScreen(0);
233  matrix_l.drawBitmap(0, 0, myBitmap[10], 32,8, colors_t[3]);
234  matrix_r.drawBitmap(0, 0, myBitmap[10], 32,8, colors_t[0]);
235 //matrix_r.drawBitmap(0, 0, myBitmap[4], 32,8, colors[6]);
236  matrix_l.show();
237  matrix_r.show();
238}
239//------------------------------- режим 07 -------------------------------
240void mode_m7() {                 
241  REG_matrix[1] = 13; // Індикація режиму матриць
242  //Serial.println("Mode-54");
243   uint8_t pass = 0;
244  matrix_l.setBrightness(brightness);
245  matrix_r.setBrightness(brightness);
246  matrix_l.fillScreen(0); // Виводимо колір з буферу на екран
247  matrix_r.fillScreen(0);   
248  matrix_l.setCursor(x_l, 0);
249  matrix_r.setCursor(x_r, 0);
250  //matrix_l.print(names[0]);
251  //matrix_r.print(names[0]);
252  matrix_l.print(utf8rus7(names[0]));
253  matrix_r.print(utf8rus7(names[0]));
254  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
255    time_text = millis();
256    if(--x_l < -50 && --x_r < -50 ) {      // width
257      x_l = matrix_l.width();
258      x_r = matrix_r.width();
259      if(++pass >= 7) pass = 0;
260      matrix_l.setTextColor(colors_t[pass_l]);
261      matrix_r.setTextColor(colors_t[pass_r]);
262    }
263  } // millis
264  matrix_l.show();
265  matrix_r.show();
266}                                 
267 
268//------------------------------- режим 08 -------------------------------
269void mode_m8() {                  
270  REG_matrix[1] = 14; // Індикація режиму матриць
271  //Serial.println("Mode-RF");
272  //pass_l = 7;
273  //uint8_t pass1 = 0;
274  matrix_l.setBrightness(brightness);
275  matrix_r.setBrightness(brightness);   
276  matrix_l.fillScreen(0);
277  matrix_r.fillScreen(0);
278  matrix_l.setCursor(x_l, 0);
279  matrix_r.setCursor(x_r, 0);
280  matrix_l.print(utf8rus7(names[5]));
281  matrix_r.print(utf8rus7(names[4]));
282  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
283    time_text = millis();
284    if(--x_l < -70 || --x_r < -40 ) {      // width
285      x_l = matrix_l.width();
286      x_r = matrix_r.width();
287      if(++pass_l >= 7) {pass_l = 0;}
288      if(pass_r-- <= 0) {pass_r = 6;}
289      matrix_l.setTextColor(colors_t[pass_l]);
290      matrix_r.setTextColor(colors_t[pass_r]);
291    }
292  } // millis
293  matrix_l.show();
294  matrix_r.show();
295}
296 
297//------------------------------- режим 09 -------------------------------
298void mode_m9() {                      
299  REG_matrix[1] = 15; // Індикація режиму матриць
300  //itoa ((RemoteXY.button_R ==1), RemoteXY.text_out, 10);
301  //Serial.println("Mode-R");
302   uint8_t pass = 0;
303  matrix_l.setBrightness(brightness);
304  matrix_r.setBrightness(brightness);   
305  matrix_l.fillScreen(0);
306  matrix_r.fillScreen(0);
307  matrix_l.setCursor(x_l, 0);
308  matrix_r.setCursor(x_r, 0);
309  matrix_l.print(utf8rus7(names[3]));
310  matrix_r.print(utf8rus7(names[2]));
311  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
312    time_text = millis();
313    if(--x_l < -90 && --x_r < -200 ) {      // width
314      x_l = matrix_l.width();
315      x_r = matrix_r.width();
316      if(++pass >= 7) {pass = 0;}
317      matrix_l.setTextColor(colors_t[pass]);
318      matrix_r.setTextColor(colors_t[pass]);
319    }
320  } // millis
321  matrix_l.show();
322  matrix_r.show();
323}
324 
325//------------------------------- режим 10 -------------------------------
326void mode_m10() {                   
327  REG_matrix[1] = 16; // Індикація режиму матриць
328  //Serial.println("Mode-LR");
329  matrix_l.setBrightness(brightness);
330  matrix_r.setBrightness(brightness);   
331  matrix_l.fillScreen(0);
332  matrix_r.fillScreen(0);
333  matrix_l.setCursor(x_l, 0);
334  matrix_r.setCursor(x_r, 0);
335  matrix_l.print(utf8rus7(names[8]));
336  matrix_r.print(utf8rus7(names[8]));
337  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
338    time_text = millis();
339    if(--x_l < -100 && --x_r < -100 ) {      // width
340      x_l = matrix_l.width();
341      x_r = matrix_r.width();
342      if(++pass_l >= 7) {pass_l = 0;}
343      if(pass_r-- <= 0) {pass_r = 6;}
344      matrix_l.setTextColor(colors_t[pass_l]);
345      matrix_r.setTextColor(colors_t[pass_r]);
346    }
347  } // millis
348  matrix_l.show();
349  matrix_r.show();
350}
351 
352//------------------------------- режим 11 -------------------------------
353void mode_m11() {                   
354  REG_matrix[1] = 17; // Індикація режиму матриць
355  //Serial.println("Mode-58");
356}
357 
358//------------------------------- режим 12 -------------------------------
359void mode_m12() {                 
360  REG_matrix[1] = 18; // Індикація режиму матриць
361  //Serial.println("Mode-54");
362}                                 
363 
364//------------------------------- режим text -------------------------------
365void mode_text(uint8_t num_t) {
366  REG_matrix[1] = 7;  // Індикація режиму матриць
367  //Serial.println("Mode-R");
368  uint8_t width_t;
369  if (num_t == 0) width_t = 70;
370  if (num_t == 1) width_t = 60;
371  if (num_t == 2) width_t = 40;
372  if (num_t == 3) width_t = 100;
373  if (num_t == 4) width_t = 120;
374  if (num_t == 5) width_t = 160;
375  if (num_t == 6) width_t = 40;
376  if (num_t == 7) width_t = 50;
377  if (num_t == 8) width_t = 50;
378  if (num_t == 9) width_t = 50;
379  if (num_t == 10)width_t = 50;
380 
381  matrix_l.setBrightness(brightness);
382  matrix_r.setBrightness(brightness);
383  matrix_l.fillScreen(0);   // Обнуление матрицы
384  matrix_r.fillScreen(0);     // очищаем экран при каждом выполнении цикла    
385  matrix_l.setCursor(x_l, 0);
386  matrix_l.print(utf8rus7(names[num_t]));
387  if (millis() - time_text > speed_text){ // значение паузы
388    time_text = millis();
389    if(--x_l < -width_t) {      // width
390      x_l = matrix_l.width();
391      if(++pass_l >= 7) pass_l = 0;
392      matrix_l.setTextColor(colors_t[pass_l]);
393    }
394  } // millis
395  matrix_l.show();
396  matrix_r.show();
397}
398 
399//------------------------------- режим text 2 -------------------------------
400void mode_text2(uint8_t num_t) {
401  //REG_matrix[1] = 7;  // Індикація режиму матриць
402  //Serial.println("Mode-R");
403  uint8_t width_t;
404  if (num_t == 0) width_t = 70;
405  if (num_t == 1) width_t = 60;
406  if (num_t == 2) width_t = 40;
407  if (num_t == 3) width_t = 100;
408  if (num_t == 4) width_t = 120;
409  if (num_t == 5) width_t = 160;
410  if (num_t == 6) width_t = 40;
411  if (num_t == 7) width_t = 50;
412  if (num_t == 8) width_t = 50;
413  if (num_t == 9) width_t = 50;
414  if (num_t == 10)width_t = 50;
415 
416  matrix_l.setBrightness(brightness);
417  matrix_r.setBrightness(brightness);
418  matrix_l.fillScreen(0);      // Обнуление матрицы
419  matrix_r.fillScreen(0);     // очищаем экран при каждом выполнении цикла
420  matrix_l.setCursor(x_l, 0);
421  matrix_r.setCursor(x_r, 0);
422  matrix_l.print(utf8rus7(names[num_t]));
423  matrix_r.print(utf8rus7(names[num_t]));
424 
425  if (millis() - time_text > speed_text){             //  Пауза
426    time_text = millis();
427    if(--x_l < -width_t && --x_r < -width_t ) {       // Послідовно на двох матрицях
428    //if(--x_l < -width_t || --x_r < -width_t ) {     // Паралельно на двох матрицях
429      x_l = matrix_l.width();
430      x_r = matrix_r.width();
431      if(++pass_l >= 7) {pass_l = 0;}                 // Перебираємо кольори на лівій матриці
432      if(pass_r-- <= 0) {pass_r = 6;}                 // Перебираємо кольори на правій матриці
433      matrix_l.setTextColor(colors_t[pass_l]);        // Приміняємо колір лівої матриці
434      matrix_r.setTextColor(colors_t[pass_r]);        // Приміняємо колір правої матриці
435    }
436  } // millis
437  matrix_l.show();                                    // Виводимо текст на лівій матриці
438  matrix_r.show();                                    // Виводимо текст на правій матриці
439}
440 
441//------------------------------- режим text 3 -------------------------------
442 
443//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
444 
445////////////////////////////////////////////
446 
447// ----- Р Е Ж И М И   Р О Б О Т И -----
448 
449//--------------------------------------
450 
451//  Світимо червоним, на двох матрицях, габарит
452void mods_58 (){
453  matrix_l.clear(); // Очищаємо
454  matrix_r.clear(); // Очищаємо
455  matrix_l.setBrightness(brightness_58);
456  matrix_r.setBrightness(brightness_58);
457  matrix_l.drawBitmap(0, 0, myBitmap[0], 32,8, colors_t[1]);
458  matrix_r.drawBitmap(0, 0, myBitmap[1], 32,8, colors_t[3]);
459  matrix_l.show();
460  matrix_r.show();
461}
462//--------------------------------------
463 
464// СТОП - моргають дві матриці, червоним
465void mods_54(){
466  uint32_t currentMillis = millis(); // текущее время в миллисекундах
467  matrix_l.clear(); // Очищаємо
468  matrix_r.clear(); // Очищаємо
469  matrix_l.setBrightness(brightness_54);
470  matrix_r.setBrightness(brightness_54);
471  matrix_l.setTextColor(colors_t[0]);
472  matrix_r.setTextColor(colors_t[0]);
473  matrix_l.setCursor(5, 0);
474  matrix_r.setCursor(5, 0);
475  if(currentMillis - previousMillis_54 > interval_54) {
476    // сохраняем последний момент, когда менялось состояние светодиода
477    previousMillis_54 = currentMillis;
478    if (ledState_54 == LOW) {
479      //matrix_l.print(slogans[2]);
480      //matrix_r.print(slogans[2]);
481      matrix_l.print(slogans[2]);
482      matrix_r.print(slogans[2]);
483      matrix_l.show();
484      matrix_r.show();
485      ledState_54 = HIGH;
486    } else {
487      matrix_l.clear();
488      matrix_r.clear();
489      matrix_l.show();
490      matrix_r.show();
491      ledState_54 = LOW;
492    }
493  } // millis
494} // void mods_54
495//--------------------------------------
496 
497// Світяться габарити, на двох матрицях, червоним
498void mods_rf (){
499  matrix_l.clear(); // Очищаємо
500  matrix_r.clear(); // Очищаємо
501  matrix_l.setBrightness(brightness_rf);
502  matrix_r.setBrightness(brightness_rf);
503  matrix_l.drawBitmap(0, 0, myBitmap[3], 32,8, colors[3]);
504  matrix_r.drawBitmap(0, 0, myBitmap[4], 32,8, colors[6]);
505  matrix_l.show();
506  matrix_r.show();
507}
508//--------------------------------------
509// Тестова підпрограма
510void mods_11 (){
511  //uint8_t pass = 0;
512  matrix_l.setBrightness(brightness);
513  matrix_r.setBrightness(brightness);
514  matrix_l.fillScreen(0);   // Обнуление матрицы
515  matrix_r.fillScreen(0);     // очищаем экран при каждом выполнении цикла
516    // закрашиваем матрицу в красный цвет
517  //matrix.fillScreen(matrix.Color(255, 0, 0));   
518  matrix_l.setCursor(x_l, 0);
519  //matrix.print(F("UARNet - Good Internet!"));
520  //matrix.println(utf8rus("Тест"));
521  //matrix_l.print(utf8rus(F("Привiт з Хелма!"))); // // width - 90
522  //matrix_l.print(F("Test"));
523  //matrix_l.print(F("Dziekuje.")); // width - 50
524  //matrix_l.print(F("Przepraszam."));  // width - 70
525  //matrix_l.print(F("Usmiechnij sie, a zycie bedzie lepsze!")); // width - 225
526  //matrix_l.print(names[4]); // width - 225
527  //matrix_l.print(utf8rus(names[3]));
528  //matrix_l.print(utf8rus(names[0]));
529  //matrix_l.print(F("UARNet Red Green Blue Red Green Blue!"));
530  matrix_l.println(utf8rus7(names[7]));
531    //matrix_l.print(F("<<<<<"));
532  // matrix_l.drawBitmap(0, 0, myBitmap[3], 32,8, colors[pass]);
533  //matrix_l.drawBitmap(0, 0, myBitmap[3], 32,8, colors[pass]);
534  //matrix_l.print(F("<<<<<"));
535  //matrix_l.print(slogans[0]);
536  //matrix_l.print(slogans[0]);
537  //if(currentMillis - previousMillis > interval) {
538  // сохраняем последний момент, когда менялось состояние светодиода
539  //previousMillis = currentMillis;
540  if (millis() - time_text > speed_text){ // Вместо 10000 подставьте нужное вам значение паузы
541    time_text = millis();
542    if(--x_l < -260) {      // width
543      x_l = matrix_l.width();
544      if(++pass_l >= 7) {pass_l = 0;}
545      matrix_l.setTextColor(colors_t[pass_l]);
546    }
547  } // millis
548  matrix_l.show();
549  //matrix_r.show();
550} // void mods_11
551//--------------------------------------
01//////////// ----------------------------////////////
02 
03//----------------------------------------------------------------------------
04/* Recode russian fonts from UTF-8 to Windows-1251 */
05//  String utf8rus (источник строки)
06 
07#define maxString 21
08char target[maxString + 1] = "";
09 
10char *utf8rus7(char *source)
11{
12  int i,j,k;
13  unsigned char n;
14  char m[2] = { '0', '\0' };
15 
16  strcpy(target, ""); k = strlen(source); i = j = 0;
17 
18  while (i < k) {
19    n = source[i]; i++;
20 
21    if (n >= 0xC0) {
22      switch (n) {
23        case 0xD0: {
24          n = source[i]; i++;
25          if (n == 0x81) { n = 0xA8; break; }
26          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
27          break;
28        }
29        case 0xD1: {
30          n = source[i]; i++;
31          if (n == 0x91) { n = 0xB8; break; }
32          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
33          break;
34        }
35      }
36    }
37 
38    m[0] = n; strcat(target, m);
39    j++; if (j >= maxString) break;
40  }
41  return target;
42}
43//----------------------------------------------------------------------------
44-------------------------------------

 

 

vidro_boltiv
vidro_boltiv аватар
Offline
Зарегистрирован: 18.10.2016

В зависимости от прихода сигнала на пини, от задних фонарей автомобиля, загораются разние знаки на матрицах. Все работает. Но не расчитано на входной импульсний сигнал от ламп поворотов. Если давать постояяний смгнал (когда лапми поворотов просто светятся), то все работает. Нужно чтоби пока идут импульси на вход сигнала от ламп поворотов, то побпрограма моргания исполнялась. как-бы сказать.... Ну пока идут импульси с частотой 0.5-1 секунда, то подпрограма выполняется, как только в течении 1 секунди нет изменение на входном пине, от лампи поворотов, то подпрограма моргания прекращала свою работу. И не смейтесь и не судите строго ))))))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

vidro_boltiv пишет:

В зависимости от прихода сигнала на пини, от задних фонарей автомобиля, загораются разние знаки на матрицах. Все работает. Но не расчитано на входной импульсний сигнал от ламп поворотов. Если давать постояяний смгнал (когда лапми поворотов просто светятся), то все работает. Нужно чтоби пока идут импульси на вход сигнала от ламп поворотов, то побпрограма моргания исполнялась. как-бы сказать.... Ну пока идут импульси с частотой 0.5-1 секунда, то подпрограма выполняется, как только в течении 1 секунди нет изменение на входном пине, от лампи поворотов, то подпрограма моргания прекращала свою работу. И не смейтесь и не судите строго ))))))

я же тебе написал этот кусок, в начале loop, (строки 170 - 180) не уж то не работает?

vidro_boltiv
vidro_boltiv аватар
Offline
Зарегистрирован: 18.10.2016

Скажу чесно, не обратил внимания, взавтра попробую. Благодарствую. (Невнимательний, весь в работе, здесь, за бугром)