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

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

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

#include <DallasTemperature.h>  // подключаем библиотек для светодиодов
#include <Adafruit_NeoPixel.h>  // подключаем библиотек для светодиодов
#include <avr/power.h>
#include <OneWire.h>            // подключаем библиотек для датчиков температуры
#include <DallasTemperature.h>  // подключаем библиотек для датчиков температуры

#define PIN0 2                  // Управление правым, малым кругом
#define PIN1 3                  // Управление правым, большим кругом
#define PIN2 4                  // Управление левым, большим кругом
#define PIN3 5                  // Управление левым, малым кругом 
#define PIN4 6                  // Датчик температуры ds18b20, для правой фары
#define PIN5 7                  // Датчик температуры ds18b20, для левой фары

OneWire oneWireP(PIN4);                 //скажем библиотеке, датчик где у нас температуры ds18b20, для правой фары
OneWire oneWireL(PIN5);                 //скажем библиотеке, где у нас датчик температуры ds18b20, для левой фары
DallasTemperature sensorsP(&oneWireP);  //скажем библиотеке где у нас градусник для правой фары
DallasTemperature sensorsL(&oneWireL);  //скажем библиотеке где у нас градусник для левой фары

#define NUMPIXELS0 36           //Число светодиодов правый малый круг
#define NUMPIXELS1 48           //Число светодиодов правый большим круг
#define NUMPIXELS2 48           //Число светодиодов левым большим круг
#define NUMPIXELS3 36           //Число светодиодов левым малый круг 


Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS2, PIN2, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS3, PIN3, NEO_RGBW + NEO_KHZ800);

// задаем константы

const int buttonPin0 = A0;     // +5В Габариты
const int buttonPin1 = A1;     // +5В Ближний свет
const int buttonPin2 = A2;     // +5В Vtec
const int buttonPin3 = A3;     // +5В Левый поворотник
const int buttonPin4 = A4;     // +5В Правый поворотник

// переменные

int buttonState0 = 0;         // переменная для хранения состояния Габаритов
int buttonState1 = 0;         // переменная для хранения состояния Ближнего света
int buttonState2 = 0;         // переменная для хранения состояния Vtec
int buttonState3 = 0;         // переменная для хранения состояния Левый поворотник
int buttonState4 = 0;         // переменная для хранения состояния Правый поворотнк 
int CtempP;                   // Объявляем переменную для датчика температуры правой фары
int CtempL;                   // Объявляем переменную для датчика температуры левой фары
int CtempPL;                  // Объявляем переменную для средней температуры в фарах
 
void setup() {
  Serial.begin(9600);
  strip0.begin(); // Выключаем все светодиодные кольца.
  strip0.show();
  strip1.begin();
  strip1.show();
  strip2.begin();
  strip2.show();
  strip3.begin();
  strip3.show();
  pinMode(buttonPin0, INPUT); // инициализируем пин, подключенный к Габаритам, как вход
  pinMode(buttonPin1, INPUT); // инициализируем пин, подключенный к Ближнему свету, как вход
  pinMode(buttonPin2, INPUT); // инициализируем пин, подключенный к Vtec, как вход
  pinMode(buttonPin3, INPUT); // инициализируем пин, подключенный к Левому поворотнику, как вход
  pinMode(buttonPin4, INPUT); // инициализируем пин, подключенный к Правому поворотнику, как вход
}
 
void loop(){
  
//считываем значения с входа кнопки

   buttonState0 = digitalRead(buttonPin0);
   buttonState1 = digitalRead(buttonPin1);
   buttonState2 = digitalRead(buttonPin2);
   buttonState3 = digitalRead(buttonPin3);
   buttonState4 = digitalRead(buttonPin4);

//Вывод температуры в консоль

  Serial.println(CtempP);
  Serial.println(CtempL);
  Serial.println(CtempPL);

// Условия при которых включается соответствующий режим

if (CtempPL >= -30  && CtempPL <= 80) // Если температура находиться в пределах от -30°С до +80°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия 
 {
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();}//Габариты
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
 }
 else {off();} //иначе все светодиоды не включаются.
}
//Режим "Всё выключено"
void off(){
       for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 0));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 0));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 0));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 0));
    strip3.show();    
   }
}

//Режим "Габариты", включены все кольца белым цветом
void gabarit(){
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255));
    strip3.show();    
   }
}

//Режим "Vtec", включены все кольца красным цветом
void vtec(){
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(255, 0, 0, 0));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(255, 0, 0, 0));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(255, 0, 0, 0));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(255, 0, 0, 0));
    strip3.show();    
   }
}

//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
void pravpow(){
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255));
    strip3.show();    
   }
}

//Режим "Левый поворотник" включены левые кольца оранжевым цветом, правые белым
void levpow(){
     for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0));
    strip3.show();    
   }
}

//Режим "Аварийка", включены все кольца оранжевым цветам
void avaria(){
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0));
    strip0.show();    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0));
    strip1.show();    
   }
  for(int i=0; i<NUMPIXELS2; i++) {
    strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0));
    strip2.show();    
   }
  for(int i=0; i<NUMPIXELS3; i++) {
    strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0));
    strip3.show();    
   }
}

//Считываем температуру с датчиков 

void TempTOvalue()
{
  sensorsP.requestTemperatures();//Опрашиваем датчик температуры ds18b20 правой фары
  CtempP=sensorsP.getTempCByIndex(0);//присваиваем температуру правой фары переменной
  sensorsL.requestTemperatures();//Опрашиваем датчик температуры ds18b20 левой фары
  CtempL=sensorsL.getTempCByIndex(0);//присваиваем температуру левой фары переменной
  CtempPL=(CtempP+CtempL)/2;
}

В каждой фаре по датчику температуры, пределы от -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)


//Режим "Всё выключено"
void off(){
  uint32_t black = RGB2Color(0, 0, 0); 
  for(int i=0; i<NUMPIXELS0; i++) {
     strip0.setPixelColor(i, black);
     strip3.setPixelColor(i, black);
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, black);
    strip2.setPixelColor(i, black); 
   }
  Show();
}

void Show() {
strip0.show();
strip1.show();
strip2.show();
strip3.show();
}

uint32_t RGB2Color(uint8_t r, uint8_t g, uint8_t b) {
  return ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
}
MAGRA
Offline
Зарегистрирован: 09.12.2016
return ((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(...) (см. исходник библы)

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

 

 
 
 

 

MAGRA
Offline
Зарегистрирован: 09.12.2016
#include <DallasTemperature.h>  // подключаем библиотек для светодиодов
#include <Adafruit_NeoPixel.h>  // подключаем библиотек для светодиодов
#include <avr/power.h>
#include <OneWire.h>            // подключаем библиотек для датчиков температуры
#include <DallasTemperature.h>  // подключаем библиотек для датчиков температуры

#define PIN0 2                  // Управление правым, малым кругом
#define PIN1 3                  // Управление правым, большим кругом
#define PIN2 4                  // Управление левым, малым кругом 
#define PIN3 5                  // Управление левым, большим кругом 
#define PIN4 6                  // Датчик температуры ds18b20, для правой фары
#define PIN5 7                  // Датчик температуры ds18b20, для левой фары

OneWire oneWireP(PIN4);                 //скажем библиотеке, датчик где у нас температуры ds18b20, для правой фары
OneWire oneWireL(PIN5);                 //скажем библиотеке, где у нас датчик температуры ds18b20, для левой фары
DallasTemperature sensorsP(&oneWireP);  //скажем библиотеке где у нас градусник для правой фары
DallasTemperature sensorsL(&oneWireL);  //скажем библиотеке где у нас градусник для левой фары

#define NUMPIXELS0 36           //Число светодиодов  малый круг
#define NUMPIXELS1 48           //Число светодиодов  большой круг

Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS0, PIN2, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS1, PIN3, NEO_RGBW + NEO_KHZ800);

// задаем константы

const int buttonPin0 = A0;     // +5В Габариты
const int buttonPin1 = A1;     // +5В Ближний свет
const int buttonPin2 = A2;     // +5В Vtec
const int buttonPin3 = A3;     // +5В Левый поворотник
const int buttonPin4 = A4;     // +5В Правый поворотник

// переменные

int buttonState0 = 0;         // переменная для хранения состояния Габаритов
int buttonState1 = 0;         // переменная для хранения состояния Ближнего света
int buttonState2 = 0;         // переменная для хранения состояния Vtec
int buttonState3 = 0;         // переменная для хранения состояния Левый поворотник
int buttonState4 = 0;         // переменная для хранения состояния Правый поворотнк 
int CtempP;                   // Объявляем переменную для датчика температуры правой фары
int CtempL;                   // Объявляем переменную для датчика температуры левой фары
int CtempPL;                  // Объявляем переменную для средней температуры в фарах

uint32_t RGBW2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
return ((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b;
}
 
void setup() {
  begin();
  Show();
  pinMode(buttonPin0, INPUT); // инициализируем пин, подключенный к Габаритам, как вход
  pinMode(buttonPin1, INPUT); // инициализируем пин, подключенный к Ближнему свету, как вход
  pinMode(buttonPin2, INPUT); // инициализируем пин, подключенный к Vtec, как вход
  pinMode(buttonPin3, INPUT); // инициализируем пин, подключенный к Левому поворотнику, как вход
  pinMode(buttonPin4, INPUT); // инициализируем пин, подключенный к Правому поворотнику, как вход
  Serial.begin(9600);
}
 
void loop(){
  
//считываем значения с входа кнопки

   buttonState0 = digitalRead(buttonPin0);
   buttonState1 = digitalRead(buttonPin1);
   buttonState2 = digitalRead(buttonPin2);
   buttonState3 = digitalRead(buttonPin3);
   buttonState4 = digitalRead(buttonPin4);

//Вывод температуры в консоль

  Serial.println(CtempP);
  Serial.println(CtempL);
  Serial.println(CtempPL);

// Условия при которых включается соответствующий режим

if (CtempPL >= -30  && CtempPL <= 75) // Если температура находиться в пределах от -30°С до +75°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия 
 {
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 0  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();}//Габариты
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}// всё выключено
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}// Vtec поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}// правый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}// Левый поворотник
  if (buttonState0 == 1  && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}// Аварийка поворотник
 }
 else {off();} //иначе все светодиоды не выключаются.
}
//Режим "Всё выключено"
void off(){
  uint32_t black = RGBW2Color(0, 0, 0, 0);
  for(int i=0; i<NUMPIXELS0; i++) { 
   strip0.setPixelColor(i, black);
   strip3.setPixelColor(i, black);
   }
  for(int i=0; i<NUMPIXELS1; i++) {
   strip1.setPixelColor(i, black);
   strip2.setPixelColor(i, black);
   }
   Show();
}


//Режим "Габариты", включены все кольца белым цветом
void gabarit(){
  uint32_t white = RGBW2Color(0, 0, 0, 255);
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, white);   
    strip3.setPixelColor(i, white); 
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, white);   
    strip2.setPixelColor(i, white); 
   }
   Show();
}

//Режим "Vtec", включены все кольца красным цветом
void vtec(){
  uint32_t red = RGBW2Color(255, 0, 0, 0);
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, red);
    strip3.setPixelColor(i, red);  
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, red);
    strip2.setPixelColor(i, red);
   }
   Show();
}

//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
void pravpow(){
   uint32_t orange = RGBW2Color(255, 40, 0, 0); 
   uint32_t white = RGBW2Color(0, 0, 0, 255);
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, orange);
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, orange);   
   }
  for(int i=0; i<NUMPIXELS0; i++) {
    strip2.setPixelColor(i, white);   
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip3.setPixelColor(i, white); 
   }
   Show();
}

//Режим "Левый поворотник" включены левые кольца оранжевым цветом, правые белым
void levpow(){
   uint32_t orange = RGBW2Color(255, 40, 0, 0); 
   uint32_t white = RGBW2Color(0, 0, 0, 255);
     for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, white);    
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, white);   
   }
  for(int i=0; i<NUMPIXELS0; i++) {
    strip2.setPixelColor(i, orange); 
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip3.setPixelColor(i, orange); 
   }
   Show();
}

//Режим "Аварийка", включены все кольца оранжевым цветам
void avaria(){
 uint32_t orange = RGBW2Color(255, 40, 0, 0); 
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, orange);
    strip1.setPixelColor(i, orange); 
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip2.setPixelColor(i, orange); 
    strip3.setPixelColor(i, orange);  
   }
   Show();
}

//Считываем температуру с датчиков 

void TempTOvalue()
{
  sensorsP.requestTemperatures();//Опрашиваем датчик температуры ds18b20 правой фары
  sensorsL.requestTemperatures();//Опрашиваем датчик температуры ds18b20 левой фары
  CtempP=sensorsP.getTempCByIndex(0);//присваиваем переменную для температуры правой фары 
  CtempL=sensorsL.getTempCByIndex(0);//присваиваем переменную для температуры левой фары
  CtempPL=(CtempP+CtempL)/2; //Вычисляем среднее значение температуры в фарах
}

// Обновляем все светодиоды.

void Show()
{
  strip0.show();
  strip1.show();
  strip2.show();
  strip3.show();
}

// Выключаем все светодиодные кольца.

void begin()
{
  strip0.begin(); 
  strip1.begin();
  strip2.begin();
  strip3.begin();
}

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

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

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

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

//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
void pravpow(){
   uint32_t orange = RGBW2Color(255, 40, 0, 0); 
   uint32_t white = RGBW2Color(0, 0, 0, 255);
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, orange);
    strip2.setPixelColor(i, white);  
   }
   for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, orange);  
    strip3.setPixelColor(i, white);  
   }
   Show();
}

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

//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
void pravpow(){
   uint32_t orange = RGBW2Color(255, 40, 0, 0); 
   uint32_t white = RGBW2Color(0, 0, 0, 255);

  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, orange); 
    strip3.setPixelColor(i, white); 
    if (i < NUMPIXELS0) {
        strip0.setPixelColor(i, orange);
        strip2.setPixelColor(i, white); 
    } 
   }
   Show();
}

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

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

Serial.println(CtempP);
Serial.println(CtempL);
Serial.println(CtempPL);

// Условия при которых включается соответствующий режим

if (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
//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
void pravpow(){
  delay(1000);
   uint32_t orange = RGBW2Color(40, 255, 0, 0); 
   uint32_t white = RGBW2Color(0, 0, 0, 255);
   for(int i=0; i<NUMPIXELS0; i++) {
    strip0.setPixelColor(i, orange);
    Show();
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, orange); 
     Show();
   }
  for(int i=0; i<NUMPIXELS0; i++) {
    strip2.setPixelColor(i, white);   
   }
  for(int i=0; i<NUMPIXELS1; i++) {
    strip3.setPixelColor(i, white); 
   }
   Show();
}

Если 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

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

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

void pravpowB(){
   uint32_t orange = RGBW2Color(40, 255, 0, 0); 
  for(int i=0; i<NUMPIXELS1; i++) {
    strip1.setPixelColor(i, orange);  
   strip1.show();
   delay(20);
  }
}

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

 

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

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

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

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

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

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

void функция (){
  
  static unsigned long prevTime = 0;
  if (millis() - prevTime > 20) { //Проверка заданного интервала
  
  что то делаем
  
  prevTime = millis();
 
  }
}

 

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

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

void функция (){
static unsigned long prevTime = 0;
 if (millis() - prevTime > 20) { //Проверка заданного интервала 

 uint32_t orange = RGBW2Color(40, 255, 0, 0);
 int i=0;
  if (i<NUMPIXELS1){i++;}   
  strip1.setPixelColor(i, orange);
  strip1.show();

prevTime = millis();
  }
}

 

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 пишет:

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

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

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

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