Проект Ангельских глазок на основe SK6812 RGBW

MAGRA
Offline
Зарегистрирован: 09.12.2016

Вообщем задача состояла в ледующем, заставить 4 кольца 2 из них 48 светодиодов 2 36светодиодов, гореть как мне нужно.

001#include <DallasTemperature.h>  // подключаем библиотек для светодиодов
002#include <Adafruit_NeoPixel.h>  // подключаем библиотек для светодиодов
003#include <avr/power.h>
004#include <OneWire.h>            // подключаем библиотек для датчиков температуры
005#include <DallasTemperature.h>  // подключаем библиотек для датчиков температуры
006 
007#define PIN0 2                  // Управление правым, малым кругом
008#define PIN1 3                  // Управление правым, большим кругом
009#define PIN2 4                  // Управление левым, большим кругом
010#define PIN3 5                  // Управление левым, малым кругом
011#define PIN4 6                  // Датчик температуры ds18b20, для правой фары
012#define PIN5 7                  // Датчик температуры ds18b20, для левой фары
013 
014OneWire oneWireP(PIN4);                 //скажем библиотеке, датчик где у нас температуры ds18b20, для правой фары
015OneWire oneWireL(PIN5);                 //скажем библиотеке, где у нас датчик температуры ds18b20, для левой фары
016DallasTemperature sensorsP(&oneWireP);  //скажем библиотеке где у нас градусник для правой фары
017DallasTemperature sensorsL(&oneWireL);  //скажем библиотеке где у нас градусник для левой фары
018 
019#define NUMPIXELS0 36           //Число светодиодов правый малый круг
020#define NUMPIXELS1 48           //Число светодиодов правый большим круг
021#define NUMPIXELS2 48           //Число светодиодов левым большим круг
022#define NUMPIXELS3 36           //Число светодиодов левым малый круг
023 
024 
025Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800);
026Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800);
027Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS2, PIN2, NEO_RGBW + NEO_KHZ800);
028Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS3, PIN3, NEO_RGBW + NEO_KHZ800);
029 
030// задаем константы
031 
032const int buttonPin0 = A0;     // +5В Габариты
033const int buttonPin1 = A1;     // +5В Ближний свет
034const int buttonPin2 = A2;     // +5В Vtec
035const int buttonPin3 = A3;     // +5В Левый поворотник
036const int buttonPin4 = A4;     // +5В Правый поворотник
037 
038// переменные
039 
040int buttonState0 = 0;         // переменная для хранения состояния Габаритов
041int buttonState1 = 0;         // переменная для хранения состояния Ближнего света
042int buttonState2 = 0;         // переменная для хранения состояния Vtec
043int buttonState3 = 0;         // переменная для хранения состояния Левый поворотник
044int buttonState4 = 0;         // переменная для хранения состояния Правый поворотнк
045int CtempP;                   // Объявляем переменную для датчика температуры правой фары
046int CtempL;                   // Объявляем переменную для датчика температуры левой фары
047int CtempPL;                  // Объявляем переменную для средней температуры в фарах
048  
049void setup() {
050  Serial.begin(9600);
051  strip0.begin(); // Выключаем все светодиодные кольца.
052  strip0.show();
053  strip1.begin();
054  strip1.show();
055  strip2.begin();
056  strip2.show();
057  strip3.begin();
058  strip3.show();
059  pinMode(buttonPin0, INPUT); // инициализируем пин, подключенный к Габаритам, как вход
060  pinMode(buttonPin1, INPUT); // инициализируем пин, подключенный к Ближнему свету, как вход
061  pinMode(buttonPin2, INPUT); // инициализируем пин, подключенный к Vtec, как вход
062  pinMode(buttonPin3, INPUT); // инициализируем пин, подключенный к Левому поворотнику, как вход
063  pinMode(buttonPin4, INPUT); // инициализируем пин, подключенный к Правому поворотнику, как вход
064}
065  
066void loop(){
067   
068//считываем значения с входа кнопки
069 
070   buttonState0 = digitalRead(buttonPin0);
071   buttonState1 = digitalRead(buttonPin1);
072   buttonState2 = digitalRead(buttonPin2);
073   buttonState3 = digitalRead(buttonPin3);
074   buttonState4 = digitalRead(buttonPin4);
075 
076//Вывод температуры в консоль
077 
078  Serial.println(CtempP);
079  Serial.println(CtempL);
080  Serial.println(CtempPL);
081 
082// Условия при которых включается соответствующий режим
083 
084if (CtempPL >= -30  && CtempPL <= 80) // Если температура находиться в пределах от -30°С до +80°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия
085 {
086  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
087  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
088  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
089  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
090  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
091  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
092  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
093  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
094  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
095  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
096  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
097  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
098  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
099  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
100  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
101  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
102  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();}//Габариты
103  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
104  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
105  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
106  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
107  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
108  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
109  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
110  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
111  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
112  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
113  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
114  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
115  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
116  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
117  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
118 }
119 else {off();} //иначе все светодиоды не включаются.
120}
121//Режим "Всё выключено"
122void off(){
123       for(int i=0; i<NUMPIXELS0; i++) {
124    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 0));
125    strip0.show();   
126   }
127  for(int i=0; i<NUMPIXELS1; i++) {
128    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 0));
129    strip1.show();   
130   }
131  for(int i=0; i<NUMPIXELS2; i++) {
132    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 0));
133    strip2.show();   
134   }
135  for(int i=0; i<NUMPIXELS3; i++) {
136    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 0));
137    strip3.show();   
138   }
139}
140 
141//Режим "Габариты", включены все кольца белым цветом
142void gabarit(){
143   for(int i=0; i<NUMPIXELS0; i++) {
144    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255));
145    strip0.show();   
146   }
147  for(int i=0; i<NUMPIXELS1; i++) {
148    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255));
149    strip1.show();   
150   }
151  for(int i=0; i<NUMPIXELS2; i++) {
152    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255));
153    strip2.show();   
154   }
155  for(int i=0; i<NUMPIXELS3; i++) {
156    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255));
157    strip3.show();   
158   }
159}
160 
161//Режим "Vtec", включены все кольца красным цветом
162void vtec(){
163   for(int i=0; i<NUMPIXELS0; i++) {
164    strip0.setPixelColor(i, strip0.Color(255, 0, 0, 0));
165    strip0.show();   
166   }
167  for(int i=0; i<NUMPIXELS1; i++) {
168    strip1.setPixelColor(i, strip1.Color(255, 0, 0, 0));
169    strip1.show();   
170   }
171  for(int i=0; i<NUMPIXELS2; i++) {
172    strip2.setPixelColor(i, strip2.Color(255, 0, 0, 0));
173    strip2.show();   
174   }
175  for(int i=0; i<NUMPIXELS3; i++) {
176    strip3.setPixelColor(i, strip3.Color(255, 0, 0, 0));
177    strip3.show();   
178   }
179}
180 
181//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
182void pravpow(){
183   for(int i=0; i<NUMPIXELS0; i++) {
184    strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0));
185    strip0.show();   
186   }
187  for(int i=0; i<NUMPIXELS1; i++) {
188    strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0));
189    strip1.show();   
190   }
191  for(int i=0; i<NUMPIXELS2; i++) {
192    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255));
193    strip2.show();   
194   }
195  for(int i=0; i<NUMPIXELS3; i++) {
196    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255));
197    strip3.show();   
198   }
199}
200 
201//Режим "Левый поворотник" включены левые кольца оранжевым цветом, правые белым
202void levpow(){
203     for(int i=0; i<NUMPIXELS0; i++) {
204    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255));
205    strip0.show();   
206   }
207  for(int i=0; i<NUMPIXELS1; i++) {
208    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255));
209    strip1.show();   
210   }
211  for(int i=0; i<NUMPIXELS2; i++) {
212    strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0));
213    strip2.show();   
214   }
215  for(int i=0; i<NUMPIXELS3; i++) {
216    strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0));
217    strip3.show();   
218   }
219}
220 
221//Режим "Аварийка", включены все кольца оранжевым цветам
222void avaria(){
223   for(int i=0; i<NUMPIXELS0; i++) {
224    strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0));
225    strip0.show();   
226   }
227  for(int i=0; i<NUMPIXELS1; i++) {
228    strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0));
229    strip1.show();   
230   }
231  for(int i=0; i<NUMPIXELS2; i++) {
232    strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0));
233    strip2.show();   
234   }
235  for(int i=0; i<NUMPIXELS3; i++) {
236    strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0));
237    strip3.show();   
238   }
239}
240 
241//Считываем температуру с датчиков
242 
243void TempTOvalue()
244{
245  sensorsP.requestTemperatures();//Опрашиваем датчик температуры ds18b20 правой фары
246  CtempP=sensorsP.getTempCByIndex(0);//присваиваем температуру правой фары переменной
247  sensorsL.requestTemperatures();//Опрашиваем датчик температуры ds18b20 левой фары
248  CtempL=sensorsL.getTempCByIndex(0);//присваиваем температуру левой фары переменной
249  CtempPL=(CtempP+CtempL)/2;
250}

В каждой фаре по датчику температуры, пределы от -30 до 80 градусов.

Заметил какую то задержку включения. Т.е. не все сразу загораются, а поочереди только очень быстро.

Гуру посмотрите код, что в нем дает такую задержку.

проект на ардуине мега.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

MAGRA пишет:
не все сразу загораются, а поочереди только очень быстро.

Насколько я понял, команда strip.show() обновляет все светодиоды, соответственно не нужно выполнять её каждый виток цикла, а нужно вынести её наружу. А лучше бы все stripN.show() поместить в отдельную процедуру и вызывать её после циклов.

Ну и для одинакового количества numpixels можно применить один цикл. Т.е. NUMPIXELS0 и NUMPIXELS3 имеют значение 36, так зачем два цикла выполнять? Аналогично и для NUMPIXELS1 и NUMPIXELS2.

Ну и конвертацию strip.color(0,0,0,0) зачем столько раз делать?
Есть варианты -
setPixelColor(n, R, G, B) т.е. сразу в RGB
или
setPixelColor(n, color), где color - 32битный тип, объединяющий в себе RGB-составляющие.
uint32_t magenta = strip.color(255, 0, 255);
(В коде, что ниже, strip.color стырена в отдельную ф-ю RGB2Color)

01//Режим "Всё выключено"
02void off(){
03  uint32_t black = RGB2Color(0, 0, 0);
04  for(int i=0; i<NUMPIXELS0; i++) {
05     strip0.setPixelColor(i, black);
06     strip3.setPixelColor(i, black);
07   }
08  for(int i=0; i<NUMPIXELS1; i++) {
09    strip1.setPixelColor(i, black);
10    strip2.setPixelColor(i, black);
11   }
12  Show();
13}
14 
15void Show() {
16strip0.show();
17strip1.show();
18strip2.show();
19strip3.show();
20}
21 
22uint32_t RGB2Color(uint8_t r, uint8_t g, uint8_t b) {
23  return ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
24}
MAGRA
Offline
Зарегистрирован: 09.12.2016
1return ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
Что делает эта строчка?
 
И как я понял в моем случае сторчка 
uint32_t RGB2Color(uint8_t r, uint8_t g, uint8_t b)
будет заменена на 
uint32_t RGB2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
так как используется RGBW светики?
OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Для WRGB используется перегруженный вариант strip.color(...) (см. исходник библы)

1uint32_t WRGB2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
2  return ((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
3}

 

 
 
 

 

MAGRA
Offline
Зарегистрирован: 09.12.2016
001#include <DallasTemperature.h>  // подключаем библиотек для светодиодов
002#include <Adafruit_NeoPixel.h>  // подключаем библиотек для светодиодов
003#include <avr/power.h>
004#include <OneWire.h>            // подключаем библиотек для датчиков температуры
005#include <DallasTemperature.h>  // подключаем библиотек для датчиков температуры
006 
007#define PIN0 2                  // Управление правым, малым кругом
008#define PIN1 3                  // Управление правым, большим кругом
009#define PIN2 4                  // Управление левым, малым кругом
010#define PIN3 5                  // Управление левым, большим кругом
011#define PIN4 6                  // Датчик температуры ds18b20, для правой фары
012#define PIN5 7                  // Датчик температуры ds18b20, для левой фары
013 
014OneWire oneWireP(PIN4);                 //скажем библиотеке, датчик где у нас температуры ds18b20, для правой фары
015OneWire oneWireL(PIN5);                 //скажем библиотеке, где у нас датчик температуры ds18b20, для левой фары
016DallasTemperature sensorsP(&oneWireP);  //скажем библиотеке где у нас градусник для правой фары
017DallasTemperature sensorsL(&oneWireL);  //скажем библиотеке где у нас градусник для левой фары
018 
019#define NUMPIXELS0 36           //Число светодиодов  малый круг
020#define NUMPIXELS1 48           //Число светодиодов  большой круг
021 
022Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800);
023Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800);
024Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS0, PIN2, NEO_RGBW + NEO_KHZ800);
025Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS1, PIN3, NEO_RGBW + NEO_KHZ800);
026 
027// задаем константы
028 
029const int buttonPin0 = A0;     // +5В Габариты
030const int buttonPin1 = A1;     // +5В Ближний свет
031const int buttonPin2 = A2;     // +5В Vtec
032const int buttonPin3 = A3;     // +5В Левый поворотник
033const int buttonPin4 = A4;     // +5В Правый поворотник
034 
035// переменные
036 
037int buttonState0 = 0;         // переменная для хранения состояния Габаритов
038int buttonState1 = 0;         // переменная для хранения состояния Ближнего света
039int buttonState2 = 0;         // переменная для хранения состояния Vtec
040int buttonState3 = 0;         // переменная для хранения состояния Левый поворотник
041int buttonState4 = 0;         // переменная для хранения состояния Правый поворотнк
042int CtempP;                   // Объявляем переменную для датчика температуры правой фары
043int CtempL;                   // Объявляем переменную для датчика температуры левой фары
044int CtempPL;                  // Объявляем переменную для средней температуры в фарах
045 
046uint32_t RGBW2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
047return ((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
048}
049  
050void setup() {
051  begin();
052  Show();
053  pinMode(buttonPin0, INPUT); // инициализируем пин, подключенный к Габаритам, как вход
054  pinMode(buttonPin1, INPUT); // инициализируем пин, подключенный к Ближнему свету, как вход
055  pinMode(buttonPin2, INPUT); // инициализируем пин, подключенный к Vtec, как вход
056  pinMode(buttonPin3, INPUT); // инициализируем пин, подключенный к Левому поворотнику, как вход
057  pinMode(buttonPin4, INPUT); // инициализируем пин, подключенный к Правому поворотнику, как вход
058  Serial.begin(9600);
059}
060  
061void loop(){
062   
063//считываем значения с входа кнопки
064 
065   buttonState0 = digitalRead(buttonPin0);
066   buttonState1 = digitalRead(buttonPin1);
067   buttonState2 = digitalRead(buttonPin2);
068   buttonState3 = digitalRead(buttonPin3);
069   buttonState4 = digitalRead(buttonPin4);
070 
071//Вывод температуры в консоль
072 
073  Serial.println(CtempP);
074  Serial.println(CtempL);
075  Serial.println(CtempPL);
076 
077// Условия при которых включается соответствующий режим
078 
079if (CtempPL >= -30  && CtempPL <= 75) // Если температура находиться в пределах от -30°С до +75°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия
080 {
081  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
082  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
083  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
084  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
085  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
086  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
087  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
088  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
089  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
090  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
091  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
092  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
093  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
094  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
095  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
096  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
097  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();}//Габариты
098  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
099  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
100  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
101  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
102  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
103  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
104  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
105  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
106  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
107  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
108  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
109  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
110  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
111  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
112  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
113 }
114 else {off();} //иначе все светодиоды не выключаются.
115}
116//Режим "Всё выключено"
117void off(){
118  uint32_t black = RGBW2Color(0, 0, 0, 0);
119  for(int i=0; i<NUMPIXELS0; i++) {
120   strip0.setPixelColor(i, black);
121   strip3.setPixelColor(i, black);
122   }
123  for(int i=0; i<NUMPIXELS1; i++) {
124   strip1.setPixelColor(i, black);
125   strip2.setPixelColor(i, black);
126   }
127   Show();
128}
129 
130 
131//Режим "Габариты", включены все кольца белым цветом
132void gabarit(){
133  uint32_t white = RGBW2Color(0, 0, 0, 255);
134   for(int i=0; i<NUMPIXELS0; i++) {
135    strip0.setPixelColor(i, white);  
136    strip3.setPixelColor(i, white);
137   }
138  for(int i=0; i<NUMPIXELS1; i++) {
139    strip1.setPixelColor(i, white);  
140    strip2.setPixelColor(i, white);
141   }
142   Show();
143}
144 
145//Режим "Vtec", включены все кольца красным цветом
146void vtec(){
147  uint32_t red = RGBW2Color(255, 0, 0, 0);
148   for(int i=0; i<NUMPIXELS0; i++) {
149    strip0.setPixelColor(i, red);
150    strip3.setPixelColor(i, red); 
151   }
152  for(int i=0; i<NUMPIXELS1; i++) {
153    strip1.setPixelColor(i, red);
154    strip2.setPixelColor(i, red);
155   }
156   Show();
157}
158 
159//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
160void pravpow(){
161   uint32_t orange = RGBW2Color(255, 40, 0, 0);
162   uint32_t white = RGBW2Color(0, 0, 0, 255);
163   for(int i=0; i<NUMPIXELS0; i++) {
164    strip0.setPixelColor(i, orange);
165   }
166  for(int i=0; i<NUMPIXELS1; i++) {
167    strip1.setPixelColor(i, orange);  
168   }
169  for(int i=0; i<NUMPIXELS0; i++) {
170    strip2.setPixelColor(i, white);  
171   }
172  for(int i=0; i<NUMPIXELS1; i++) {
173    strip3.setPixelColor(i, white);
174   }
175   Show();
176}
177 
178//Режим "Левый поворотник" включены левые кольца оранжевым цветом, правые белым
179void levpow(){
180   uint32_t orange = RGBW2Color(255, 40, 0, 0);
181   uint32_t white = RGBW2Color(0, 0, 0, 255);
182     for(int i=0; i<NUMPIXELS0; i++) {
183    strip0.setPixelColor(i, white);   
184   }
185  for(int i=0; i<NUMPIXELS1; i++) {
186    strip1.setPixelColor(i, white);  
187   }
188  for(int i=0; i<NUMPIXELS0; i++) {
189    strip2.setPixelColor(i, orange);
190   }
191  for(int i=0; i<NUMPIXELS1; i++) {
192    strip3.setPixelColor(i, orange);
193   }
194   Show();
195}
196 
197//Режим "Аварийка", включены все кольца оранжевым цветам
198void avaria(){
199 uint32_t orange = RGBW2Color(255, 40, 0, 0);
200   for(int i=0; i<NUMPIXELS0; i++) {
201    strip0.setPixelColor(i, orange);
202    strip1.setPixelColor(i, orange);
203   }
204  for(int i=0; i<NUMPIXELS1; i++) {
205    strip2.setPixelColor(i, orange);
206    strip3.setPixelColor(i, orange); 
207   }
208   Show();
209}
210 
211//Считываем температуру с датчиков
212 
213void TempTOvalue()
214{
215  sensorsP.requestTemperatures();//Опрашиваем датчик температуры ds18b20 правой фары
216  sensorsL.requestTemperatures();//Опрашиваем датчик температуры ds18b20 левой фары
217  CtempP=sensorsP.getTempCByIndex(0);//присваиваем переменную для температуры правой фары
218  CtempL=sensorsL.getTempCByIndex(0);//присваиваем переменную для температуры левой фары
219  CtempPL=(CtempP+CtempL)/2; //Вычисляем среднее значение температуры в фарах
220}
221 
222// Обновляем все светодиоды.
223 
224void Show()
225{
226  strip0.show();
227  strip1.show();
228  strip2.show();
229  strip3.show();
230}
231 
232// Выключаем все светодиодные кольца.
233 
234void begin()
235{
236  strip0.begin();
237  strip1.begin();
238  strip2.begin();
239  strip3.begin();
240}

Ну вроде перепилил, если я тебя правельно понял :)

Единственное не получиться обьеденить в поворотниках, т.к. они разбиваются на левый и правый.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

>>не получиться обьеденить в поворотниках, т.к. они разбиваются на левый и правый
Можно так:

01//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02void pravpow(){
03   uint32_t orange = RGBW2Color(255, 40, 0, 0);
04   uint32_t white = RGBW2Color(0, 0, 0, 255);
05   for(int i=0; i<NUMPIXELS0; i++) {
06    strip0.setPixelColor(i, orange);
07    strip2.setPixelColor(i, white); 
08   }
09   for(int i=0; i<NUMPIXELS1; i++) {
10    strip1.setPixelColor(i, orange); 
11    strip3.setPixelColor(i, white); 
12   }
13   Show();
14}

а можно и в одном цикле -

01//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02void pravpow(){
03   uint32_t orange = RGBW2Color(255, 40, 0, 0);
04   uint32_t white = RGBW2Color(0, 0, 0, 255);
05 
06  for(int i=0; i<NUMPIXELS1; i++) {
07    strip1.setPixelColor(i, orange);
08    strip3.setPixelColor(i, white);
09    if (i < NUMPIXELS0) {
10        strip0.setPixelColor(i, orange);
11        strip2.setPixelColor(i, white);
12    }
13   }
14   Show();
15}

А почему TempTOvalue() нигде не используется?

MAGRA
Offline
Зарегистрирован: 09.12.2016
1Serial.println(CtempP);
2Serial.println(CtempL);
3Serial.println(CtempPL);
4 
5// Условия при которых включается соответствующий режим
6 
7if (CtempPL >= -30  && CtempPL <= 75) // Если температура находиться в пределах от -30°С до +75°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия

Ну я с TempTOvalue() переменный выдергиваю. датчик ещё не подключал но в serial нули пишет, условие выполняется. Я что то делаю не так? 

 

Кстати только что загнал код, всё получилось, задержки убрались, всё включается за доли секунды

 

MAGRA
Offline
Зарегистрирован: 09.12.2016

Не критикуй за тупые вопросы, это мой первый код в жизни :)

MAGRA
Offline
Зарегистрирован: 09.12.2016

OlegK, есть ещё 2 момента, которые я незнаю как осуществить.

1. Поворотники, хочеться сделать постепенное заполнение оранжевым светом за определенный промежуток времени, т.е. При включении поворота,2 кольца 36 и 48, одинаково заполняются.

Где то видел что добавляют 

 delay(x); как я понимаю эта задержка, т.е. 

что бы например за секунду заполнить 36 , требуется 27,77мс, а для 48  20,83мс

delay(27.77);

delay(20.83);

Непонятно куда в цикл из запихать.

2. При переменном сигнале поворотника, точнее его отсутствии, по условию будет загораться обратно белый, как и где сделать условие, что бы при прерывании сигнала с поворотника, прога ждала повторный сигнал, и не включала белый свет. а то получается какая то светомузыка :)

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

MAGRA пишет:
Ну я с TempTOvalue() переменный выдергиваю.

Эта процедура присваивает значения глобальным переменным, которые вы выводите в порт, но учитывая, что
она нигде не вызывается, то и значения этих переменных всегда будут нулевыми. Значит, нужно вызывать этот кусок кода в loop(), но периодически, с интервалом не менее секунды, а лучше более (специфика этих термодатчиков) и без delay.

Цитата:
Непонятно куда в цикл из запихать.

Внутри тела цикла, первой или последней строкой.

Цитата:
delay(20.83)

Значения должны быть целочисленными.

по п2. я не понял, что требуется. Если есть некое условие, то при нужном состоянии можно выполнить принудительный выход из цикла, не дожидаясь его окончания. Командой break.

MAGRA
Offline
Зарегистрирован: 09.12.2016
01//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02void pravpow(){
03  delay(1000);
04   uint32_t orange = RGBW2Color(40, 255, 0, 0);
05   uint32_t white = RGBW2Color(0, 0, 0, 255);
06   for(int i=0; i<NUMPIXELS0; i++) {
07    strip0.setPixelColor(i, orange);
08    Show();
09   }
10  for(int i=0; i<NUMPIXELS1; i++) {
11    strip1.setPixelColor(i, orange);
12     Show();
13   }
14  for(int i=0; i<NUMPIXELS0; i++) {
15    strip2.setPixelColor(i, white);  
16   }
17  for(int i=0; i<NUMPIXELS1; i++) {
18    strip3.setPixelColor(i, white);
19   }
20   Show();
21}

Если delay ставить в начале, действия выполняются последовательно, как сделать парралельное включение обеих колец?

Вот, что получается

https://www.youtube.com/watch?v=akn3c_1hV8I

MAGRA
Offline
Зарегистрирован: 09.12.2016

Ну и собственно у каждого кольца, должна быть своя задержка.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Для чего у вас  задержка в секунду в начале процедуры?
Для чего вызов show() помещён то в цикле, то снаружи?

>>как сделать парралельное включение обеих колец?
В сообщении 5 уже я показывал, как поместить включение обеих колец в один цикл. И даже всех четырёх.

А если хотите, что бы всё вообще раздельно работало, с индивидуальными задержками и ничего не блокировалось, ковыряйте в сторону "blink без delay", опроса кнопок через PCINT и смены принципа работы программы...

MAGRA
Offline
Зарегистрирован: 09.12.2016

задержка для тестирования.

а show() я просто эксперементировал

MAGRA
Offline
Зарегистрирован: 09.12.2016

Голова кипит уже.

Подскажите как в коде 

1void pravpowB(){
2   uint32_t orange = RGBW2Color(40, 255, 0, 0);
3  for(int i=0; i<NUMPIXELS1; i++) {
4    strip1.setPixelColor(i, orange); 
5   strip1.show();
6   delay(20);
7  }
8}

заменить delay(20) на milis() 

 

bwn
Offline
Зарегистрирован: 25.08.2014

Ну, как и всегда, вычислить разницу между текущей и старой миллис, если больше или равна заданному интервалу, выполнить код, приравнять старую миллис к текущей и вернуться в основное тело.

MAGRA
Offline
Зарегистрирован: 09.12.2016

Столько уже всего пречитал. Но все равно немогу догнать, как конкретно в моем коде приминить millis () можете помочь?

bwn
Offline
Зарегистрирован: 25.08.2014

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

 

MAGRA
Offline
Зарегистрирован: 09.12.2016

Как я понят получается, что то типо того:

01void функция (){
02static unsigned long prevTime = 0;
03 if (millis() - prevTime > 20) { //Проверка заданного интервала
04 
05 uint32_t orange = RGBW2Color(40, 255, 0, 0);
06 int i=0;
07  if (i<NUMPIXELS1){i++;}  
08  strip1.setPixelColor(i, orange);
09  strip1.show();
10 
11prevTime = millis();
12  }
13}

 

bwn
Offline
Зарегистрирован: 25.08.2014

примерно так,  i надо тоже сделать static или глобальной и по окончании if-а принудительно ее обнулить. Как сейчас, она у вас всегда будет равна 0.

satelit 2
Offline
Зарегистрирован: 04.12.2016

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

etc
Offline
Зарегистрирован: 05.06.2017

Здравствуйте, Magra!

Сможете ли написать на почту morev.d.s@gmail.com У меня похожий проект, но на начальной стадии. Нужен Ваш совет (скорее всего не один).

angels
Offline
Зарегистрирован: 24.07.2020
всем доброго времени суток. помогите разобраться со скетчем. две полосы на ардуино. при включений поворотников влево или в право моргает поворотник желтым цветом. и между интервалами должен тухнуть. но у меня получилось что включается тот цвет на каком режиме он стоит. через функцию делей пробовал не вариант лента становиться на паузу и получается бардак. в этом не силен скетч брал в интернете и немного переделал. если найдутся люди помочь буду заранее благодарен. всем спасибо за внимание.
[code]
#include <Adafruit_NeoPixel.h> // подключаем библиотеку
#define PIN 7
#define PIN2 8
#define count_led 72 // количество светодиодов 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(count_led, PIN, NEO_GRBW + NEO_KHZ800); //Инициализируем первый поворотник на 7 цифровом выходе
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(count_led, PIN2, NEO_GRBW + NEO_KHZ800);//Инициализируем второй поворотник на 8 цифровом выходе
void setup()
{
  pinMode(2, INPUT); //режим приветствия
  pinMode(3, INPUT); //ближний
  pinMode(4, INPUT); //габарит
  pinMode(5, INPUT); //левый поворотник
  pinMode(6, INPUT); //правый поворотник
  strip.begin();
  strip.show();
  strip2.begin();
  strip2.show();
}
void loop()
{
  {
    if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH) )
    {
      //Режим аварийной сигнализации, если на 5 и 6 пин приходит плюс
      for (int k = 0; k < 1; k++)
      {
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
        for (int i = 0; i < count_led + 3; i++)
        {
          for (int j = 0; j < i; j++)
          {
 
            strip.setPixelColor(j, strip.Color(255, 60, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(255, 60, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(1);
          strip.show();
          strip2.show();
        }
        for (int i = 0; i < count_led + 3; i++)
        {
          for (int j = 0; j < i; j++)
          {
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j - 2, strip.Color(0, 0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 1, strip.Color(125, 30, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(115, 8, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 2, strip2.Color(0, 0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 1, strip2.Color(125, 30, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(115, 8, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(1);
          strip.show();
          strip2.show();
        }
      }
    }
 
    if (digitalRead(5) == LOW and digitalRead(6) == HIGH )
    {
      // включается один поворотник
      for (int i = 0; i < count_led + 1; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 60, 0, 0));
      }
      delay(1);
      strip.show();
    }
    if (digitalRead(5) == HIGH and digitalRead(6) == LOW )
    {
      // включается один поворотник
      for (int i = 0; i < count_led + 1; i++)
      {
        strip2.setPixelColor(i, strip.Color(255, 60, 0, 0));
      }
      delay(1);
      strip2.show();
    }
    if ( (digitalRead(3) == HIGH) and digitalRead(5) == LOW and digitalRead(6) == LOW ) //ближний
    {
      for (int i = 0; i < count_led + 1; i++)
      { 
        strip.setPixelColor(i, strip.Color(0, 70, 100, 0));
        strip2.setPixelColor(i, strip2.Color(0, 70, 100,0));
      }
      strip.show();
      strip2.show();
    }
    if ( (digitalRead(4) == HIGH) and digitalRead(5) == LOW and digitalRead(6) == LOW and digitalRead(3) == LOW) //габариты
    {
      for (int k = 0; k < 1; k++)
      {
        for (int i = 0; i < count_led + 1; i++)
        {
          for (int j = 0; j < i; j++)
          {
            if (  (digitalRead(2) == HIGH) and  digitalRead(3) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW  )
            {
              k = 0;
            }
            strip.setPixelColor(j, strip.Color(150, 40, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(150, 40, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(40);
          strip.show();
          strip2.show();
        }
        for (int i = 0; i <count_led + 5; i++)
        {
          for (int j = 0; j < i; j++)
          {
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j - 4, strip.Color(150, 40, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 3, strip.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 2, strip.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 1, strip.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 4, strip2.Color(150, 40, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 3, strip2.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 2, strip2.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 1, strip2.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(50);
          strip.show();
          strip2.show();
        }
      }
    }
    if (  (digitalRead(2) == HIGH) and  digitalRead(3) == LOW and digitalRead(4) == LOW and digitalRead(5) == LOW  and digitalRead(6) == LOW  )
    {
      //Режим приветствия
      for (int k = 0; k < 1; k++)
      {
        for (int i = 0; i < count_led + 1; i++)
        {
          for (int j = 0; j < i; j++)
          {
            if (  (digitalRead(2) == HIGH) and  digitalRead(3) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW  )
            {
              k = 0;
            }
            strip.setPixelColor(j, strip.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(0, 0, 255, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(40);
          strip.show();
          strip2.show();
        }
        for (int i = 0; i <count_led + 5; i++)
        {
          for (int j = 0; j < i; j++)
          {
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j - 4, strip.Color(255, 0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 3, strip.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 2, strip.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j - 1, strip.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 4, strip2.Color(255, 0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 3, strip2.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 2, strip2.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j - 1, strip2.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(0, 255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(50);
          strip.show();
          strip2.show();
        }
      }
    }
    if (  digitalRead(2) == LOW and  digitalRead(3) == LOW and digitalRead(4) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW)
    {
      for (int i = 0; i < count_led + 1; i++)
      {
        // Зажигаем ходовые огни, если нетниодного сигнала
        strip.setPixelColor(i, strip.Color(0, 0, 0, 230));
        strip2.setPixelColor(i, strip2.Color(0, 0, 0, 230));
      }
      strip.show();
      strip2.show();
    }
  }
}
[/code]
b707
Offline
Зарегистрирован: 26.05.2017

разместите заказ в платном разделе - вам напишут код.

А тут, когда вы в скетче ничего не понимаете и даже не можете правильно вставить код в сообщение - вряд ли кто-то станет вас учить с нуля.

angels
Offline
Зарегистрирован: 24.07.2020

спасибо большое конечно вам. но знать бы еще куда и где писать мне?

b707
Offline
Зарегистрирован: 26.05.2017

angels пишет:

но знать бы еще куда и где писать мне?

А я разве непонятно обьяснил?

Если хотите результат без особого труда - в раздел платной помощи Ищу исполнителя

Если хотите разобраться сами - начните с изучения правил форума вот тут: Песочница